我有以下架构:
我有一个订阅Redis pub/sub的微服务,有时在一天的负载会很高,我需要在K8S中制作一个水平pod自动缩放器,以便在保持低延迟的同时处理所有pub/sub消息。
问题是,如果我使用pub/sub消息将由每个pod处理,如果使用队列,pod将需要对Redis进行轮询,以便读取所有消息,那么,我如何使用模式或方法来扩展我需要使用或知道?
谢谢。
如果你想让你的微服务有多个实例来处理发布的不同消息(为了更快地耗尽队列或保持低延迟),那么Redis发布/订阅不是正确的选择,因为它有一个扇出设计,这意味着相同的发布消息将被分发给所有订阅者。
你需要的是RabbitMQ或Amazon SQS,它允许你有多个消费者连接到同一个队列,每个消费者处理不同的消息。
SQS中一个非常有用的特性是,当消费者接收消息时,有一个称为可见性超时的可配置时间范围,在此期间其他消费者无法看到该消息(因此无法处理它)。如果最初接收消息的消费者没有在该时间范围内将其从队列中删除,则该消息将可供其他消费者使用。