试着回答一下这个有趣的消费-生产问题吧:
- 这是一个使用消息队列解耦多个生产者和多个消费者的系统。
- 生产者生产的消息是有分区的(按
project_id分区),分区也会动态分配。 - 消费者需要竞争消费消息,每个消费者可以消费多个分区。
- 对于一个分区,最多有不超过
1/n个消费者在消费。 - 生产者和消费者根据性能和数据量,会在kubernetes中进行动态的扩缩容。
消息需要尽可能的被均匀地分配到消费者上,以实现负载均衡。
消息需要尽可能的N等分,这N份消息将分配给消费者服务A(A的数量N>=2A)
e.g: 1/10 情景: 消息需要尽可能的10等分,这10份消息将分配给消费者服务A(A的数量>=5),对于不满足5的倍数情况,如23个消费者,则余下3个随机分配
在这种动态输入输出的情况下,我们该如何设计一个消息队列负载均衡系统呢,如何保证3个9的SLA呢?