【问题标题】:Loading the tenant specific variables in a multi tenant application在多租户应用程序中加载特定于租户的变量
【发布时间】:2017-09-14 02:37:14
【问题描述】:
我有一个多租户架构的 MVC 应用程序。其中,有一些全局变量(每个租户的所有用户通用),一些特定于登录用户。
此外,还有一些特定租户的所有用户通用的设置。
我正在存储和检索 Global 和 Session 变量,如下所述。
- 特定于登录用户 -
HttpContext.Current.Session["sessionVariableName]。这些变量在用户登录时加载。
- 全局变量 -
HttpContext.Current.Application["applicationVariableName"]。这些变量在应用启动时加载到 Global.asax。
现在我有一个问题,如何加载特定于租户的变量。在哪种情况下我需要加载变量?我不想在应用程序启动时加载所有租户特定的变量,因为许多租户可能没有使用该应用程序。此外,在每个用户登录时检查和加载租户特定设置可能会产生开销。
最好的方法是什么?
【问题讨论】:
标签:
c#
asp.net-mvc
multi-tenant
【解决方案1】:
在你的情况下,我想建议以下方法
- 创建一个名为“TenantSettings”的表,其中包含租户特定设置
- 创建一个名为“UserSettings”的表,其中包含所有用户特定的设置
- 在登录后识别租户,然后当您第一次获取租户设置时,您会将 TenantSettings 存储到缓存中[通过 pub-sub 进行分布式或内存同步]
- 另外,在用户登录后,获取 UserSettings 并将其放入缓存中 [与 3 中相同]
- 不要使用应用程序内存,因为缓存可能会被意外污染,并且不会随着负载扩展
的数据库实体详细信息
1.租户设置
以下可以是 TenantSettings 的列
- 租户 ID
- 设置 ID
- 设置值
- AuditFields,如 CreatedBy、CreatedOn、IsActive、UpdatedBy...
2。用户设置
- 用户ID
- 租户 ID
- 设置 ID
- 设置值
- 与上述类似的审核字段
希望这会有所帮助。