多租户ASP.Net MVC应用程序 - 存储租户特定数据的位置

时间:2015-01-08 16:28:53

标签: asp.net-mvc-4 multi-tenant

我正在努力改变现有的ASP.NET MVC应用程序以成为多租户。该应用程序是为#34;只有一个客户"通过其他方式,对于每个客户,都有新的MVC应用程序安装。该应用程序的数据库结构准备好了多个"一个MVC应用程序内的网站,所以所有的数据库查询已经采用"网站"考虑(siteId)。

关于多租户应用,我有几个问题,我还在研究它。今天我开始对MVC应用程序进行更改,我遇到了一件事。该应用程序有一个包含多个配置的表。像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上并将保持在那里。

存储租户特定配置数据的选项有哪些?我查看了几个网站,无法找到一个好的做法&#34;就此而言。如果我错过了一些有用的东西,请发表评论。谢谢!

1 个答案:

答案 0 :(得分:2)

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

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