Redis发布/订阅和高可用性

5

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

我对Redis还比较陌生,所以我正尝试阅读尽可能多的文档并进行实践。其中最重要的话题之一是高可用性。正如我所说,我不是专家,但我知道可能的选项 - 使用Sentinel、复制、集群等。

对我来说不清楚的是Pub/Sub功能和HA选项之间的关系。建立一个可靠的Redis消息系统的最佳实践是什么?可靠意味着如果我的Redis消息代理宕机了,那么应该有某种备份节点(从节点?)能够接管这个角色。

是否有纯服务器端的解决方案?还是我需要创建一个智能包装器来处理这个问题?Sentinel驱动的设置能否帮助我?


我虽然没有在分布式环境中使用过Pubsub,但我认为Redis首先是一个数据服务器。Pubsub只是锦上添花。如果你必须要有一个可靠的分布式消息队列,那么就有专门的解决方案。我听说RabbitMQ非常不错。 - Sergio Tulentsev
是的,我们开始使用Redis作为“共享字典”的方式 - 但是随着我们的项目逐渐成形,发现基于消息的通信可能更适合我们的需求。Redis在那里,并支持它,所以我们开始将其用作消息代理。 然而,没有什么是铁板一块的,我们也会检查其他解决方案。 - user2519450
2个回答

6
在Redis中使用发布-订阅功能并进行故障转移需要客户端考虑额外的因素。了解的一个关键点是,订阅是基于每个连接的。如果您订阅了一个节点上的频道,而该节点失败,则需要处理重新连接和重新订阅。由于订阅是在连接级别上完成的,因此它不是可以复制的东西。
有关其工作方式和预期看到的详细信息以及解决方法,请参见我今年早些时候发表的文章:https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers。 您可以通过订阅从服务器并向主服务器发布来降低风险,但您仍然需要具有不可提升的从服务器来订阅,并且仍然需要处理丢失从服务器的情况 - 丢失给定的从服务器的机会与丢失主服务器的机会一样大。

谢谢,这让问题更加清晰了。对于一个Redis新手来说,你的博文并不容易阅读,但是确实有深度。 - user2519450

1
我认为PUB/SUB不是一个好的选择,也许Disque(来自Redis的作者antirez)更适合:

Disque是一个内存中的分布式作业队列


谢谢,我会检查它。 - user2519450

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接