【问题标题】:Redis PUB/SUB and high availabilityRedis PUB/SUB 和高可用性
【发布时间】:2016-08-08 14:42:39
【问题描述】:

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

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

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

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

【问题讨论】:

  • 没有在分布式设置中使用过pubsub,但我认为redis首先是一个数据服务器。 Pubsub 是顶上的一颗樱桃。如果您必须拥有可靠的分布式消息队列,则有专门的解决方案。听说 RabbitMQ 不错。
  • 是的,我们开始以这种方式使用 Redis(作为“共享字典”)——但是当我们的项目正在形成时,事实证明基于消息的通信可能更适合我们的需求. Redis 就在那里,它支持它,所以我们开始将它用作消息代理。不过,没有什么是一成不变的,我们也会检查其他解决方案。

标签: redis high-availability


【解决方案1】:

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

关于它的工作原理和您可以期待看到的细节以及解决方法,请参阅我今年早些时候在 https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers 发布的帖子

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

【讨论】:

  • 谢谢,它使图片更清晰。对于 redis 新手来说,您的博文并不容易阅读,但绝对有说服力。
【解决方案2】:

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

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

【讨论】:

  • 谢谢,我去看看。
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2015-09-10
  • 2012-12-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多