首页 > 解决方案 > 将带有队列的单租户应用程序移动到多租户 Web 应用程序

问题描述

我需要将单租户(.net 核心)Web 应用程序移动到多租户(大约 100 个租户)Web 应用程序。租户将共享同一个应用程序,但每个租户都将拥有自己的数据库(租户数据库) -id) 到缓存项键(前置租户模式)。

应用程序也依赖 RabitMQ 来实现异步进程。实际上我没有很多队列,只有十几个交换,但我想未来队列和交换的数量会增加。

现在,当我转向多租户架构时,我对队列的最佳架构模式感到困惑。

选择:

1) 每个虚拟主机复制具有相同拓扑的多个虚拟主机(每个租户一个)

2) 具有相同队列、交换、ecc 在租户之间共享的单个虚拟主机。

第一个选择似乎更复杂,因为我应该为每个虚拟主机保持拓扑同步(假设 100 个租户意味着 100 个虚拟主机)第二个选择接缝更容易,我只需要在发送到的每条消息的上下文中传递对租户标识符进行排队,以便消费者知道谁是消息的所有者以及如何处理它。

我会知道一些意见,主要是关于第二选择,因为在我看来它更实惠。

标签: .netweb-applicationsarchitecturerabbitmqmulti-tenant

解决方案


第二种选择更容易管理,纯粹是通过配置来吸引新客户(与基础设施创建/管理相反)。进一步推断,您的生活会更容易创建单个数据库并向所有表/查询添加类似于“客户 ID”的内容。这允许您分割您的应用程序,并使新客户像在数据库中插入一行一样简单(而不是创建一个全新的数据库实例)。


推荐阅读