我正在努力要求将现有的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 回答
根据我构建多租户应用程序的经验,这个用例可以按如下方式处理,
数据保留在Db中
在租户登录后,我们可能需要他们的配置值,我们可以从db存储中获取并将它们添加到缓存[redis - distributed cache]
类似地对于每个租户命中,我们可以缓存它们,这样在重复使用应用程序时,静态数据越多,缓存越多,应用程序和缓存的负载越小,响应时间越长