向所有应用程序实例广播事件

问题描述 投票:0回答:1

在其中一个应用程序中,正在使用内存缓存,考虑到该应用程序有多个实例正在运行,是否有办法刷新/更新相同的内容。 使用像 Redis 这样的集中式缓存对于这个问题来说似乎有点过分了。

我想到的一个解决方案(似乎也太过分了)但行不通,有一个rabbitmq队列,具有类型交换的扇出,但扇出基本上适用于队列而不是消费者,所以如果一个队列有5个消费者,已发布的事件将以循环方式仅发送给 1 位消费者。

第二个,我正在考虑使用 redis 发布-订阅模型,其中我假设发布的事件将由单个应用程序实例的所有 redis 客户端消耗。但我不确定它是否有效。

想知道是否有任何方法可以将内存缓存更新到所有应用程序实例(这些实例可以根据吞吐量扩大或缩小)。 或者任何人解决了此类问题陈述。

python java redis rabbitmq software-design
1个回答
0
投票

对于您的问题,集中式缓存是最好的选择,但又不会太过分。

  • MQ解决方案:每个实例都应该有队列(RabbitMQ)或消费者组(Kafka),以便所有实例都可以接收数据更新。

  • Redis pub/sub:所有 Redis 客户端都应该订阅同一个频道,并且它会在您的情况下正常工作。消息发布后,所有订阅者都将收到更新的数据。 Redis pub/sub 以广播方式工作。

  • 或者,您可以实现一个服务中心来管理您需要的所有实例。一旦实例初始化,它就可以建立到服务中心的套接字连接以接收或发布任何更改。当从实例接收到任何更新时,服务中心将使用已建立的套接字连接将更新广播到它管理的所有实例。

看来集中式缓存是解决您问题的最简单方法。

© www.soinside.com 2019 - 2024. All rights reserved.