首页 文章

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

提问于
浏览
2

我正在努力要求将现有的ASP.NET MVC应用程序更改为多租户 . 该应用程序是通过其他方式为“只有一个客户”构建的,每个客户端都有一个新的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上并将保持良好状态 .

存储租户特定配置数据的选项有哪些?我查看了几个网站,但却找不到“好的做法” . 如果我错过了一些有用的东西,请发表评论 . 谢谢!

1 回答

  • 2

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

    • 数据保留在Db中

    • 在租户登录后,我们可能需要他们的配置值,我们可以从db存储中获取并将它们添加到缓存[redis - distributed cache]

    • 类似地对于每个租户命中,我们可以缓存它们,这样在重复使用应用程序时,静态数据越多,缓存越多,应用程序和缓存的负载越小,响应时间越长

相关问题