【发布时间】:2022-01-08 16:41:21
【问题描述】:
我开发了 .NET Core Web Api 应用程序,并且有几个不同的客户使用具有不同配置的同一个应用程序。 (应用程序加载一个配置 json 文件,监听几个端口,连接到数据库。) 现在,我为每个客户使用不同的服务器来保持他们分开。(Linode 1 Cpu,1 GB Ram)。我很难发布更新、停止启动服务等。
其他开发者如何做这样的事情?有什么方法可以合并服务器并通过单一操作进行管理?或者这样做的正确方法是什么?
【问题讨论】:
-
它是带有数据库连接的基本 Web api。额外的一个是服务器为每个客户端侦听 2 个额外的端口。 (每个端口不同)。
-
你问的叫多租户。这不是微不足道的——你不仅有不同的配置,还有不同的数据、权限、帐户。您需要防止一个租户读取另一个租户的数据。 ASP.NET Core 文档提到了一些主要围绕 Azure AD 进行身份验证的技术。 Gunnar Peipman 的Multitenant web applications with ASP.NET Core 从高层次上描述了多租户 ASP.NET Core 应用程序,随附的 Github Repo 包含演示代码
-
有 很多 篇关于此的文章和博客文章,但没有一个最佳选择。例如,您可以通过 URL 参数、标头或通过首先验证调用者并检查他们的帐户/声明来识别租户。如果。如果您使用 Azure AD 或类似的身份验证服务,该服务可以在 JWT 令牌中包含租户 ID。要隔离数据库访问,您可以使用 EF Core 的全局查询过滤器来确保每个租户都能看到自己的数据。但是,您如何存储是另一回事-存储在不同的数据库中?同一个数据库中的不同表?具有 TenantID 的同一张表?
-
ASP.NET Core 配置可以从 JSON、数据库、外部服务加载设置。租户 ID 可以成为设置键的一部分,例如部分。加载所有设置后(同样,有很多选项),您可以使用特定于租户的部分读取单个租户的配置
-
如果您搜索 docs.microsoft.com,您会找到几篇文章。几乎每个中间件都受到它的影响并以某种方式对其进行描述。例如,DI 文档包含关于Patterns for multi-tenancy in DI 的部分,例如about data protection in multitenant apps