目前,我正在开发分布式测试执行和报告系统。我打算使用Redis PUB / SUB作为消息队列和消息分发系统。
我是Redis的新手,所以我试着阅读尽可能多的文档并玩弄它。其中一个最重要的主题是高可用性。正如我所说,我不是专家,但我知道可能的选择 - 使用Sentinel,复制,群集等。
我不清楚Pub / Sub功能和HA选项是如何相互关联的。使用Redis构建可靠的消息传递系统的最佳做法是什么?可靠的我的意思是,如果我的Redis消息代理已经关闭,应该有某种备份节点(奴隶?)应该能够接管这个角色。
是否有纯粹的服务器端解决方案?或者我是否需要在Redis客户端周围创建一个智能包装来处理这个问题? Sentinel驱动的设置会帮助我吗?
答案 0 :(得分:6)
在Redis中使用故障转移执行pub sub意味着考虑客户端中的其他因素。要理解的关键是订阅是每个连接。如果您订阅了节点上的频道但它失败了,您将需要处理重新连接并重新订阅。因为订阅是在连接级别完成的,所以它不是可以复制的东西。
关于它如何运作以及您可以期待看到的细节及其解决方法,请参阅我今年早些时候在https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers
撰写的帖子。您可以通过订阅奴隶并向主人发布来降低风险表面,但是您需要让不可升级的奴隶订阅并仍然需要处理失去奴隶 - 失去的机会也很多一个给定的奴隶,因为有一个主人。
答案 1 :(得分:1)
IMO,PUB / SUB不是一个好选择,可能是disque(来自antirez,Redis的作者)更合适:
Disque,一种内存中的分布式作业队列