Redis PUB/SUB 和高可用性

Redis PUB/SUB and high availability

目前我正在研究分布式测试执行和报告系统。我打算使用 Redis PUB/SUB 作为消息队列和消息分发系统。

我是 Redis 的新手,所以我正在尝试阅读尽可能多的文档并尝试使用它。最重要的主题之一是高可用性。正如我所说,我不是专家,但我知道可能的选择——使用 Sentinel、复制、集群等。

我不清楚 Pub/Sub 功能和 HA 选项之间的关系。使用 Redis 构建可靠的消息传递系统的最佳实践是什么?我所说的可靠是指如果我的 Redis 消息代理出现故障,应该有某种备份节点(从节点?)应该能够接管这个角色。

是否有纯服务器端解决方案?或者我是否需要围绕 Redis 客户端创建一个智能包装器来处理这个问题? Sentinel 驱动的设置对我有帮助吗?

IMO,PUB/SUB 不是一个好的选择,可能 disque(来自 antirez,Redis 的作者)更适合:

Disque, an in-memory, distributed job queue

在具有故障转移功能的 Redis 中执行 pub sub 意味着要考虑客户端的其他因素。要理解的一个关键部分是订阅是按连接进行的。如果你订阅了一个节点上的频道并且它失败了,你将需要处理重新连接和重新订阅。因为订阅是在连接级别完成的,所以它不是可以复制的东西。

关于它的工作原理和您可以期待看到的内容的详细信息,以及围绕它的方法,请参阅我今年早些时候在 https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers

上制作的 post

您可以通过订阅 slave 并发布到 master 来降低风险面,但是您需要订阅不可升级的 slave 并且仍然需要处理失去 slave 的问题 - 机会同样多失去一个给定的奴隶,因为有一个主人。