端点与服务器
NServiceBus 使用端点的概念。端点与它接收消息的队列相关。如果此端点为高可用性或性能而横向扩展,那么您仍然有一个队列(使用 RabbitMQ)。因此,如果您有一个在服务器 A 和 B 上运行的实例,它们(使用 RabbitMQ)都会从同一个队列中获取消息。
我不会考虑应用服务器,而是考虑端点及其在部署、可用性和性能方面的非功能性要求。
可用性 vs 性能 vs 部署
不需要在服务器 A 和 B 上托管所有端点。您还可以在服务器 A 上运行服务 X 和 Y,在服务器 B 上运行服务 U 和 V。然后您可以横向扩展性能,但不考虑可用性,但可用性已经降低由于消息传递的异步性质而导致的问题。这可以使部署更容易。
发布订阅与请求响应
如果同一个逻辑端点部署了多个实例,那么哪个实例处理事件应该无关紧要。如果是,那么它可能不是 pub sub,而是异步请求/响应。这由 NServiceBus 处理,方法是为每个实例(使用 RabbitMQ)创建一个队列,如果该响应需要与请求实例的关联,则该响应可以接收到该响应。
拓扑
你有:
- 负载平衡的网络场集群
- 负载均衡的 RabbitMQ 集群
- NServiceBus 端点
- 不同机器上的高可用多个实例
- 在各种机器上传播端点(甚至可以是每个端点一台机器)
- 两者的结合
基础设施
您可以选择在与您的网络场相同的基础架构上运行 RabbitMQ 集群,也可以单独运行。这取决于您的要求和可用资源。如果网络农场和兔子集群是分开的,那么您可以更轻松地独立扩展。