如果我要设计一个庞大的分布式系统,其吞吐量应与系统中的用户数和通道数成线性比例,哪个更好?
1) Redis群集 (仅适用于Redis 3.0 alpha,如果它处于群集模式,则可以在一个节点上发布并在另一个完全不同的节点上订阅,消息将传播并到达您)。发布的复杂度为 O(N + M) ,其中N是已订阅客户端的数量,M是系统中已订阅模式的数量,但是在Redis集群中,它如何扩展?我接受对此的有根据的猜测。
2)从3.x开始, ZeroMQ进行 服务器端过滤,因此那里也有一些时间复杂性,但是我在文档中没有看到任何有关它的信息。如果要扩展它,我可以让许多服务器发布到任何频道,每个订户将连接到所有服务器,并订阅所需的频道。好像很好
那么,哪种方法更适合大型发布者系统的横向扩展?我还应考虑哪些其他解决方案?记住,我想最小化延迟和吞吐量,但是能够水平扩展。
我想您想使延迟最小化。通道数无关。关键因素大致是发布者和订阅者的数量,消息大小,每个发布者每秒的消息数,每个订阅者接收的消息数。ZeroMQ每秒可以从一个节点到另一节点处理几百万条小消息;在成为软件之前,您的瓶颈将是网络。因此,大多数高容量的pubsub架构都使用ZeroMQ支持的PGM组播之类的东西。