【问题标题】:What to keep in mind when developing a multi-tenant asp.net MVC application?开发多租户 asp.net MVC 应用程序时要记住什么?
【发布时间】:2011-02-10 23:30:57
【问题描述】:

下午好 - 我今天有一个非常笼统的问题 - 我的任务是创建一个 Web 应用程序来管理有关客户的一些基本信息。这是一个非常简单的应用程序,但我不知道围绕支持多个用户在他们自己的域或我们 url 的子域中开发网站时要记住什么?

如何限制用户登录应用程序的其他部分?

我在 Stack Overflow 上的类似问题中看到提到数据库范围,有人可以详细说明此类实现的最佳实践吗?

MVC3 中是否有任何支持多租户的新功能?我在 MVC2 和我的电子商务网站上遇到了这个问题,我们决定希望它贴上白标签并为多个店主定制,并且不知道从哪里开始在现有应用程序中实现这些功能。任何意见表示赞赏。

编辑

为了详细说明多租户,我的意思是——例如,在商店的上下文中,多个用户在 www.mystore.com 上注册了他们自己的商店,并且每个用户都被赋予了一个唯一的子域来访问他们自己的实例商店,在 user1.mystore.com、user2.mystore.com 等。每个商店都会有具有订单历史的客户,并且这些客户会有登录信息。我需要限制 user1.mystore.com 的客户在没有新帐户的情况下登录 user2.mystore.com,并同样阻止 user2.mystore.com 访问 user1.mystore.com 的客户历史记录。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    【讨论】:

    • 很好的链接,谢谢!我将说服他为每个客户安装单独的商店实例,避免因破坏应用程序而头疼。
    • 对于 MVC 4,现在还有另一种可能性:可以使用自定义 DisplayMode 重新路由视图。例如。到 Index.TenantName.cshtml 和 Index.TenantName.Iphone.cshtml
    【解决方案2】:

    您很可能将花费大量时间来重构您的数据库。

    第一步是您将创建一个表格来存放您的“租户”列表。然后,您需要将此 TenantId 添加到系统中的几乎每个表中,以确保没有人互相踩踏。您可以跳过任何具有全局性质的表。一个示例可能是状态代码列表。

    但是,从用户到他们拥有的数据等所有内容都必须具有此 ID。此外,修改所有索引以将租户 ID 考虑在内。

    完成后,您需要修改所有查询以将租户 ID 考虑在内。

    租户表的一列应该是门户网址。像 customername.oursite.com 或其他什么。这样,您可以将多个 url 指向完全相同的代码。当站点需要使用当前的tenantid时,只需根据传入的URL查找即可。

    如果我这样做,我计划在数据库中的每个表上花费大约 1 到 2 个小时来使其成为“多租户”。显然,一些表(及其查询)会运行得更快;其他人将需要更长的时间。

    顺便说一句,这不包括自定义每个租户的 UI(外观/感觉)或任何类似性质的内容。如果你需要这样做,那么你必须在服务器上为每个租户创建一个目录来保存他们的样式表,或者直接从数据库加载它(这在缓存方面有自己的问题)。

    通常,您会在项目开始时为此进行设计。改造一个已经(或几乎)完成的项目是一个 PITA。

    最后,测试、测试、测试并进行更多测试。您必须确保每个查询只提取它绝对需要的数据。

    【讨论】:

    【解决方案3】:

    这里有一些关于 Sharp 架构(基于 MVC 3)中的多租户支持的讨论:http://www.yellowfeather.co.uk/2011/02/multi-tenancy-on-sharp-architecture-revisited/

    不确定这是否真的对您现有的应用程序有帮助,移植会有点麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多