我正在尝试评估不同的发布/订阅消息协议的水平扩展能力,而不会产生不必要的交叉对话。
我的架构将连接带有 Web 套接字客户端的 NodeJS 服务器。我计划使用一致的基于散列的路由器根据他们感兴趣的主题将客户端引导到服务器。这意味着对于给定的主题,只有一部分服务器会有订阅该主题的客户端。然后消息将发布到发布/订阅代理,该代理负责将数据散播到有订阅者的服务器。
我要避免的情况是每个代理都收到每个请求,并且网络变得饱和。这是扩展 Redis Pub/Sub 的一个明显问题。添加服务器不应产生 n 方问题。
pub/sub 协议上的客户端数量就是服务器的数量。理想情况下,每台服务器都可以有一个本地代理来有效地将数据扇出到多个 NodeJS 进程,以避免不必要的网络带宽。在大多数情况下,对于给定的主题,所有订阅者都在同一台服务器上。
哪些发布/订阅协议提供这种基于主题的数据传播?
我正在评估的协议是:MQTT、RabbitMQ、ZMQ、nanomsg。这不包括在内,并且 SAAS 选项是可以接受的。
质量保证约束很容易。最多一次,或至少一次都足够了。承认并不重要。事件顺序并不重要。我们正在寻找一劳永逸的方法,重点是水平可扩展性。