【发布时间】:2018-05-07 07:11:04
【问题描述】:
我即将使用 Rail 和 Postgres 构建一个 SAAS 产品。我想知道我是否应该遵循架构级别、基于子域的多租户或单租户应用程序是否足够好架构? 我的要求在客户端之间没有数据的可靠性,因此基于模式的多租户架构对我来说似乎是正确的。谁能用相关的解释进一步解释一下为什么它是好是坏?
【问题讨论】:
标签: postgresql web product saas design-decisions
我即将使用 Rail 和 Postgres 构建一个 SAAS 产品。我想知道我是否应该遵循架构级别、基于子域的多租户或单租户应用程序是否足够好架构? 我的要求在客户端之间没有数据的可靠性,因此基于模式的多租户架构对我来说似乎是正确的。谁能用相关的解释进一步解释一下为什么它是好是坏?
【问题讨论】:
标签: postgresql web product saas design-decisions
Here'sApartment gem 的创建者的帖子暗示他们将来不会使用每租户模式的方法。
上述问题的最终结果导致我们大多放弃了多租户的分离模式方法。对于我们未来构建的所有服务,我们使用更传统的列范围方法,并编写了自己的包装器,有效地模仿了 Apartment 提供给我们的按请求租用方法。
如果您正在部署到 Heroku,则有一个 warning 关于每个租户的架构会影响托管备份工具的性能:
在数据库中使用多个模式的最常见用例是构建软件即服务应用程序,其中每个客户都有自己的模式。虽然这种技术看起来很有吸引力,但我们强烈建议不要使用它,因为它会导致许多操作问题的案例。例如,即使是中等数量的模式 (> 50) 也会严重影响 Heroku 的数据库快照工具 PG Backups 的性能。
为了最大程度地隔离数据,适合每个租户使用数据库的方法。
对于最简单的操作,每个表的 tenant_id 列可用于限定查询范围,并可通过 row level security policies 强制执行。
【讨论】: