【问题标题】:Multi-tenant ASP.Net MVC application - Where to store tenant specific data多租户 ASP.Net MVC 应用程序 - 存储租户特定数据的位置
【发布时间】:2015-03-06 20:25:20
【问题描述】:

我正在处理更改现有 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 上填充,并且会一直保留在那里。

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

【问题讨论】:

  • 显然,在我的声望达到 50 之前,我无法发表评论...您的租户是否进入了不同的 URL?如果是这样,那不是将应用程序分开,并且每个应用程序都是唯一的吗?

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


【解决方案1】:

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

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

【讨论】:

  • 差点忘了这个问题!不管怎么说,还是要谢谢你。目前,此要求已“暂停”。我设计了一个与此类似的架构,但我肯定会研究将应用程序配置存储到 Redis 中。将标记为答案。
  • @saravanan 警告多租户使用 schared 数据库使用 EF 不安全,请检查:stackoverflow.com/questions/30745628/…
  • @rod,如果您有安全扫描仪,这是不可能的。查看我的上述问题的帖子。 HTH
  • @rod 如果忽略这些问题,则说明设计存在缺陷,与 EF 无关。
猜你喜欢
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多