【问题标题】:Multi Tenant vs Single Tenant?多租户与单租户?
【发布时间】:2018-05-07 07:11:04
【问题描述】:

我即将使用 Rail 和 Postgres 构建一个 SAAS 产品。我想知道我是否应该遵循架构级别、基于子域的多租户或单租户应用程序是否足够好架构? 我的要求在客户端之间没有数据的可靠性,因此基于模式的多租户架构对我来说似乎是正确的。谁能用相关的解释进一步解释一下为什么它是好是坏?

【问题讨论】:

标签: postgresql web product saas design-decisions


【解决方案1】:

Here'sApartment gem 的创建者的帖子暗示他们将来不会使用每租户模式的方法。

上述问题的最终结果导致我们大多放弃了多租户的分离模式方法。对于我们未来构建的所有服务,我们使用更传统的列范围方法,并编写了自己的包装器,有效地模仿了 Apartment 提供给我们的按请求租用方法。

如果您正在部署到 Heroku,则有一个 warning 关于每个租户的架构会影响托管备份工具的性能:

在数据库中使用多个模式的最常见用例是构建软件即服务应用程序,其中每个客户都有自己的模式。虽然这种技术看起来很有吸引力,但我们强烈建议不要使用它,因为它会导致许多操作问题的案例。例如,即使是中等数量的模式 (> 50) 也会严重影响 Heroku 的数据库快照工具 PG Backups 的性能。

为了最大程度地隔离数据,适合每个租户使用数据库的方法。

对于最简单的操作,每个表的 tenant_id 列可用于限定查询范围,并可通过 row level security policies 强制执行。

【讨论】: