我需要将单租户(.net核心)Web应用程序移至多租户(约100个租户)Web应用程序。租户将共享同一应用程序,但每个租户将拥有自己的数据库(租户的数据库)我已经计划将进程内应用程序缓存移至共享的分布式缓存,以通过在缓存iteme键(前置租户模式)上添加前缀(tenant-id)来标识缓存项。
应用程序还依赖RabitMQ来实现异步过程。实际上,我没有很多队列,只有很少的几个交换,但是我想队列的数量和交换在将来会增加。
现在,我在转向多租户架构时对队列的最佳架构模式感到困惑。
选择:
1)多个虚拟主机(每个租户一个),每个虚拟主机复制相同的拓扑
2)具有相同队列,交换,租户之间共享的ecc的单个虚拟主机。
首选管理起来似乎更复杂,因为我应该保持每个虚拟主机的拓扑同步(假设100个租户意味着100个虚拟主机)第二种选择接缝比较容易,我只需要传递每条发送到队列中的租户标识符的消息的上下文,以便消费者知道谁是消息的所有者以及如何处理消息。
我会主要就第二种选择了解一些意见,因为在我看来,第二种选择更便宜。
第二个选择到目前为止更易于管理,它是纯粹的配置以吸引新客户(与基础架构创建/管理相对)。为了进一步推断,创建单个数据库并向所有表/查询添加类似于“客户ID”的内容将使您的工作变得容易得多。这使您可以细分应用程序,并使新客户变得像在数据库中插入一行一样简单(与创建一个新的数据库实例相对)。