多租户 ASP.Net MVC 应用程序 - 在哪里存储租户特定数据

Multi-tenant ASP.Net MVC application - Where to store tenant specific data

我正在处理更改现有 ASP.NET MVC 应用程序以准备好多租户的要求。该应用程序是通过其他方式为 "only one customer" 构建的,对于每个客户端都有一个新的 MVC 应用程序安装。该应用程序的数据库结构已准备好在一个 MVC 应用程序中包含 "multi" 个网站,因此所有数据库查询都已将 "site" 考虑在内(siteId)。

我有几个关于多租户应用程序的问题,我仍在研究中。今天我开始对 MVC 应用程序进行更改,并且遇到了一件事。该应用程序有一个具有多种配置的 table。 AppSMTPServer、AppShowLoginBox 等内容。这些是为使应用程序动态化而创建的参数。

所有这些配置目前都存储在静态类中的 ApplicationState 中,如下所示:

public static IDictionary<String, String> Configurations
    {
        get
        {
            if (HttpContext.Current.Application[CONFIGURATIONS] == null)
            {
                LoadConfiguration();
            }
            return (IDictionary<String, String>)HttpContext.Current.Application[CONFIGURATIONS];
        }
        private set
        {
            HttpContext.Current.Application[CONFIGURATIONS] = value;
        }
    }

我的问题是。如果我将 MVC 更改为多租户就绪,则每个租户都将拥有自己的配置值。所以,我不能再将它们存储在 ApplicationState 中,因为它将在 application_start 上填充并将永远留在那里。

存储租户特定配置数据的选项有哪些?我查看了几个网站,但找不到关于此的 "good practices"。如果我遗漏了一些有用的东西,请发表评论。谢谢!

根据我构建多租户应用程序的经验,可以按如下方式处理此用例,

  1. 数据保留在数据库中
  2. 租户登录后,我们可能需要他们的配置值,我们可以从数据库存储中获取并将它们添加到缓存中[redis - 分布式缓存]
  3. 类似地,对于每个租户命中,我们可以缓存它们,这样随着应用程序被重复使用,进入缓存的静态数据越多,应用程序和缓存的负载越小,响应时间越长