【问题标题】:How to implement multi-tenant application using ASP.NET Core Web API?如何使用 ASP.NET Core Web API 实现多租户应用程序?
【发布时间】:2017-09-18 08:51:26
【问题描述】:

注意:我的问题可能与 this 重复,但我特定于 Dot Net Core API 应用程序而不是 .net 核心应用程序。

【问题讨论】:

    标签: asp.net-core single-page-application asp.net-core-webapi


    【解决方案1】:

    取决于您希望如何提供多租户。

    最简单的方法是创建一个中间件,根据主机或路径开始将租户信息添加到 HttpContext 中。 (考虑根据主机名更改与数据库的连接字符串)。

    没有开箱即用的实现,您必须以适合您的应用程序的方式进行。

    不过,我建议您(看到您想使用多租户)还对可能的云架构和工具进行一些研究,以使这一切正常运行(想想 kubernetes、负载平衡/代理、ssl证书等)

    建议

    我不知道您的应用程序是什么样子,所以我们真的无法给您太多建议。

    但是对我们有很大帮助的是对租户的所有内容使用Scoped 依赖注入(确保您永远不会对依赖于租户信息的任何内容使用单例)。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

    并使用像 Redis 这样的缓存系统来缓存您的租户特定信息而不是 InMemory(当然,如果您运行多个实例,您已经遇到了这个问题)

    所以基本上:

    • 使用 IOC 天堂(总是这样做)
      • 没有包含任何(租户)状态的单例
      • 为确保您不缓存任何租户状态,请将所有 ioc 注册设为 Transient 或 Scoped,但不要单例。
      • 不要在 Kestrel 请求之外解析任何 Scoped Ioc 注册。 (这会破坏您的申请)
    • 如果您有任何 InMemory 缓存,请使用进程外缓存
    • 将所有租户启动代码迁移到请求管道中(或在该租户的第一次请求时,例如:db migrations)
    • 再一次不要使用单例。

    【讨论】:

    • 该应用程序有两个数据库,一个用于客户端和连接字符串详细信息,另一个用于实际系统。该应用程序是使用 Angular 2 和 .net core web API 创建的。如果您有任何将单租户迁移到多租户应用程序的链接/步骤,将会很有帮助。
    • @NimeshVaghasiya 我们最近从单租户(也称为本地安装)迁移到多租户云架构。我们必须进行很多更改,但我们已经使用 IOC 容器实现了很多东西,这对我们非常有帮助。
    • @NimeshVaghasiya 我认为您不会找到任何有关此的文档,因为您的应用程序非常具体,没有人拥有像您这样的应用程序。您应该阅读Docs 了解 dotnet 中的可能性。然后决定你要走哪条路。您必须自己构建它
    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 2012-12-10
    • 2011-05-05
    • 1970-01-01
    • 2018-11-13
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多