【问题标题】:.NET Core Multi Tenancy practicality.NET Core 多租户实用性
【发布时间】:2020-01-17 12:27:09
【问题描述】:

我想知道开发一个多租户的 .NET Core 应用程序是否可行,还是拥有一个普通的单租户应用程序就足够了?

我目前的db结构如下:

  • 用户表
  • 组织表
  • 产品表

一个用户属于一个组织(系统管理员除外),一个组织可以拥有多个产品

当用户登录时,他们的部分声明是 OrganizationId,这意味着他们只能看到他们的 OrganizationId 拥有的产品。

目前,我的网址如下所示:

  • www.localhost.com:9988
  • www.localhost.com:9988/Products/Product/Create

我的 Startup.cs url 路由如下所示:

app.UseMvc(routes =>
{
    routes.MapRoute(
      name: "areas",
      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );

});

将我现在拥有的应用程序转换为多租户应用程序会很困难吗?类似于当属于某个组织的用户登录时,他们的 url 将是

组织名称.localhost.com:9988/Products/Product

或者我现在的方法够用了吗?

我打算构建它以支持多个组织。

【问题讨论】:

  • 你可以随心所欲。我个人的偏好,尤其是在使用容器时(你应该使用容器),是使租户配置基于。换句话说,您可以使用例如“{orgname}-prod”的环境进行部署,然后使用完全不同的配置设置(连接字符串等)。这样,您的应用程序只需专注于以抽象方式支持通用组织。所有使一个组织与众不同的东西都来自配置。
  • 当你说容器时,你是指像 Docker 这样的东西吗?我正在尝试实现类似于 Shopify 所做的事情。当您注册时,您会使用您的商店名称获得类似子域的东西。

标签: c# asp.net-mvc asp.net-core .net-core multi-tenant


【解决方案1】:

我们目前所做的事情与您的理论设置非常相似。每个租户在他们自己的“服务器”(容器化)上运行相同的代码。配置中的大部分“难点”应该与服务器有关,而不是.Net本身。

根据您的业务领域,您可能需要确定是否有任何客户可能会因为他们的数据与其他人的数据混合而感到不安。如果这没什么大不了的,只是逻辑(组织)分离工作忽略我。

【讨论】:

  • 我更多的是按照 Shopify 的思路进行思考,您在注册时会在哪里获得类似子域的东西?例如myshopname.shopify.com。是否可以创建这些以编程方式进行容器化的租户?我没有容器方面的经验,所以我也必须学习它们。
  • 是的。不仅使用容器,而且它会使它变得容易得多。容器的概念是一个独立的单元,可以向上或向下旋转并独立扩展。通过编排(kubernetes)和前端代理(HAProxy、Envoy 等)或服务网格(Istio),您可以轻松地将子域或路径映射到 pod(与容器大致相同)。
  • @ChrisPratt 说了什么。我本人对云/容器化游戏还很陌生,但一个明显的好处似乎是可以通过编程方式处理大量基础设施任务,并且在很大程度上可以不干涉 - 就像您在此处考虑的任务一样。
  • 谢谢大家,我会尝试对容器进行一些研究,看看我能想出什么。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2020-12-05
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多