0

目前我们有 2 个负载平衡的 Web 服务器。我们刚刚开始通过 NSB 公开一些功能。如果我创建两个“应用程序”服务器,我会在所有 4 个服务器之间创建一个集群吗?或者我应该创建 2 个集群?

IE

Cluster1:Web 服务器 A,应用服务器 A

集群 2:Web 服务器 B、应用服务器 B

似乎如果它是一个集群,如果该订阅者同时部署到应用服务器 A 和 B,我如何防止发布的消息被同一个逻辑订阅者处理多次?

我将 RabbitMQ 放在 Web 服务器上以实现消息持久性的唯一原因是(假设我没有在 Web 服务器上运行任何应用程序服务)?在这种情况下,我的假设是我使用集群镜像将消息发送到应用服务器。这个对吗?

4

1 回答 1

0

端点与服务器

NServiceBus 使用端点的概念。端点与它接收消息的队列相关。如果此端点为高可用性或性能而横向扩展,那么您仍然有一个队列(使用 RabbitMQ)。因此,如果您有一个在服务器 A 和 B 上运行的实例,它们(使用 RabbitMQ)都会从同一个队列中获取消息。

我不会考虑应用服务器,而是考虑端点及其在部署、可用性和性能方面的非功能性要求。

可用性 vs 性能 vs 部署

不需要在服务器 A 和 B 上托管所有端点。您还可以在服务器 A 上运行服务 X 和 Y,在服务器 B 上运行服务 U 和 V。然后您可以横向扩展性能,但不考虑可用性,但可用性已经降低由于消息传递的异步性质而导致的问题。这可以使部署更容易。

发布订阅与请求响应

如果同一个逻辑端点部署了多个实例,那么哪个实例处理事件应该无关紧要。如果是,那么它可能不是 pub sub,而是异步请求/响应。这由 NServiceBus 处理,方法是为每个实例(使用 RabbitMQ)创建一个队列,如果该响应需要与请求实例的关联,则该响应可以接收到该响应。

拓扑

你有:

  • 负载平衡的网络场集群
  • 负载均衡的 RabbitMQ 集群
  • NServiceBus 端点
    • 不同机器上的高可用多个实例
    • 在各种机器上传播端点(甚至可以是每个端点一台机器)
    • 两者的结合

基础设施

您可以选择在与您的网络场相同的基础架构上运行 RabbitMQ 集群,也可以单独运行。这取决于您的要求和可用资源。如果网络农场和兔子集群是分开的,那么您可以更轻松地独立扩展。

于 2015-06-03T09:39:52.000 回答