什么是多租户及其实现方式?

What is multi tenancy and ways to achive it?

我已经阅读有关多租户的内容有一段时间了。使用如下非常琐碎的语句。我已经阅读了数十个链接和站点,但都非常抽象。

..In which a single instance of software runs on a server and serves multiple tenants.

我很乐意从 30000 英尺以上的高度理解它,但我无法理解它的实现方式。

如果有人可以通过一个堆栈(只是技术性的)和一个例子(可能是 Salesforce)帮助我理解我如何实现它,我会更满意,因为我很想知道它,因为快几天了。

请不要 post 维基百科或任何网站的链接。我已经阅读了大部分内容,但狩猎仍在继续!

我知道这是一个非常微不足道的问题,但请不要因为很少的充分理由而投反对票,因为您可能会从这个问题中读到一些新的答案!

这只是您有多个客户使用同一个应用程序的想法。大多数网站都是多租户的。他们有多个客户使用相同的安装。这意味着您必须执行限制视图等操作,以便客户只能看到属于 his/her 组织的记录。

通常通过在所有表中放置客户 ID 之类的内容来实现,并确保始终按该客户 ID 过滤查询。

通过多租户,多个安装可以由同一个应用程序提供服务。假设您有一个用于组织客户所拥有产品库存的应用程序,并且您要将其销售给两个不同的客户:租户 1 和租户 2。通过多租户,您的应用程序可以 运行 在单个服务器上的某个地方,并且仍然可以被您的两个客户访问。

目标是分离数据,让tenant1不知道tenant2。通常可以在数据库级别实现多租户。您有以下选择:

  1. 数据存储在同一个 table 但分离发生在一个额外的列(所谓的鉴别器列):

    SELECT * FROM products WHERE tenant_id = 1;
    
  2. 数据存储在同一个数据库服务器上,但在不同的架构中。在应用程序获取结果之前,它需要 select 适当的架构:

    USE tenant_1;
    SELECT * FROM products;
    
  3. 数据存储在不同的数据库服务器上。需要为每个租户保留一个连接池。