【发布时间】:2017-12-28 22:51:30
【问题描述】:
我正在开发一个我认为需要队列的应用程序。我已经打算在应用程序中使用 Redis Enterprise,因此将 Redis 用于队列是有意义的。 Redis 有一些有用的队列命令:https://redis.io/commands/rpoplpush#pattern-reliable-queue。我有插入记录的生产者和处理和删除记录的消费者。我可以很容易地让生产者和消费者横向扩展。因此,在规模上,瓶颈将是 Redis,因为队列只能存储在单个分片上。有没有一种跨多个分片分配队列的好方法?我能想出的唯一解决方案是创建多个队列并以某种方式确保每个队列散列到不同的分片。但这需要在 Redis 重新分片时更改生产者、消费者和队列键,这并不理想。
我打算使用队列将记录批量插入数据库。生产者是接收请求并生成记录的 Web 服务器。但是在流量高峰期,数据库将无法跟上单行插入的速度。我不能只缓冲 Web 服务器上的请求,因为当 Web 服务器出现故障时,所有缓冲的记录都会丢失。由于复制,Redis 队列提供了容错能力。消费者可以在执行插入之前从队列中弹出多条记录,以减轻数据库的负载。但它的规模不够大。我缺少更好的 Redis 解决方案吗?还是 Redis 不合适?
任何建议将不胜感激!
编辑:
我已经开始使用与@Itamar Haber 讨论的方法创建一个库。可在此处获取:https://github.com/fenichelar/BQueue
【问题讨论】:
标签: architecture redis queue software-design