目前我正在研究分布式测试执行和报告系统。我打算使用 Redis PUB/SUB 作为消息队列和消息分发系统。
我是 Redis 的新手,所以我正在尝试阅读尽可能多的文档并尝试使用它。最重要的主题之一是高可用性。正如我所说,我不是专家,但我知道可能的选择 - 使用 Sentinel、复制、集群等。
我不清楚 Pub/Sub 功能和 HA 选项是如何相互关联的。使用 Redis 构建可靠的消息传递系统的最佳实践是什么?我所说的可靠是指如果我的 Redis 消息代理出现故障,应该有某种备份节点(从节点?)能够接管这个角色。
是否有纯粹的服务器端解决方案?或者我是否需要围绕 Redis 客户端创建一个智能包装器来处理这个问题? Sentinel 驱动的设置对我有帮助吗?
最佳答案
在具有故障转移功能的 Redis 中执行 pub sub 意味着要考虑客户端的其他因素。要理解的一个关键部分是订阅是按连接进行的。如果你订阅了一个节点上的 channel 并且它失败了,你将需要处理重新连接和重新订阅。因为订阅是在连接级别完成的,所以它不是可以复制的东西。
关于它的工作原理和您可以期待看到的内容的详细信息,以及解决它的方法,请参阅我今年早些时候在 https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers 上发表的一篇文章。
您可以通过订阅 slave 并发布到 master 来降低风险面,但是您需要订阅不可升级的 slave 并且仍然需要处理失去 slave 的问题——失去的机会同样多一个给定的奴隶就像有一个主人一样。
关于Redis PUB/SUB 和高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832167/