【发布时间】:2020-12-05 01:48:43
【问题描述】:
我一直在为设置多租户环境的方式而苦苦挣扎。在之前的项目中,我将其设置为一个整体,其中有一个租户实体将所有正确的数据相互绑定。这种方式很容易设置,但所有租户的数据都在一个大数据库中。
我现在的想法是以不同的方式进行设置。我将使用 Postgres,因为也可能有“模式”。我的想法是在公共架构中拥有整体数据,在租户自己的架构中拥有特定于租户的数据。
我面临着一些我无法理解的挣扎。在下图中,您可以看到这两种情况的简图。底部的包含公共架构中的所有内容,而上面的则具有公共架构中的域和用户。
我的想法是,当客户访问特定于租户的 URL 时,应用程序不必爬取所有可能的模式。对用户来说同样重要。当用户想要登录应用程序时,我们也不想爬过所有模式。但是我该如何以正确的方式进行设置呢?
此外,当用户管理他的域(添加/编辑/删除)时,他实际上是在公共架构上管理它们。还是我应该完全避免使用 public ?我想把它们放在这里,否则当用户进入一个新域时,我还必须在其他租户架构上检查它们。
我也可以简单地设置域中租户的架构名称还是应该是连接字符串?
我还在这里和那里阅读了有关多租户的信息,但我不确定应用程序如何使用不同的架构(公共)从租户架构中获取正确的数据来获取租户的数据。 我应该使用控制反转来根据对域(公共架构)或客户(特定于租户)的调用来获得特定的实现吗?
https://nebulab.it/blog/how-to-switch-solidus-ecommerce-to-multi-tenant/
https://michael-mckenna.com/multi-tenant-asp-dot-net-core-application-tenant-resolution
【问题讨论】:
-
不同的应用在不同的时间决定租户。有时它基于 Web 请求中的信息,或者它是在应用程序的特定实例上配置的,或者租户范围内的实体通过显式列关联
标签: c# postgresql asp.net-core multi-tenant