转载

Disque:Redis之父新开源的分布式内存作业队列

Disque 是 Redis 之父 Salvatore Sanfilippo 新开源的一个分布式内存消息代理。它适应于"Redis作为作业队列"的场景,但采用了一种专用、独立、可扩展且具有容错功能的设计,兼具Redis的简洁和高性能,并且用C语言实现为一个非阻塞网络服务器。

Redis 的作者 Salvatore Sanfilippo (网名 Antirez )发表的一篇 博客文章 ,介绍了自己几个月以来在晚上和周末开发的新项目 ——Disque

开发初衷

Antirez 之所以动念开发 Disque ,是因为看到很多人用 Redis 来处理队列,但这样做的优势和劣势都很明显: Redis 很快、易用而且很多基础设施里已经在用;但是 Redis 的高可用性 / 集群特性的设计完全偏向可变数据结构,这与不可变的消息非常不同,并非最佳方案。

消息中介重要的功能是保证至少一次或者最多一次发送消息,而且前者更重要。 Antirez 开始想通过少量修改 Redis 来实现,但几天后发现客户端算法太复杂了。 Redis 已经有很多功能,再增加功能并非什么好主意。何况消息队列的运作方式与 Redis 很不同。

那么,是不是可以新开发一个消息队列呢?

世界上已经有很多消息队列了,新做一个有价值吗? Antirez 想,既然有这么多人用 Redis 来处理消息队列,已有的方案看上去要么太简单要么太复杂,其中必有机会,于是他动手了。

开发过程

他头一次没有直接写代码,而是花了几个星期思考设计,尝试从用户角度理解什么样的消息队列会让人更爽。主要的使用场景没变:延迟作业。 Disque 是通用系统,但主要针对的问题,是发送可能要处理的作业的消息。如果有什么违背了这一场景,就会被干掉。

设计有了, Antirez 直接从 Redis 代码入手。幸运的是 Redis 部分就是编写 C 分布式系统的一个框架。协议、网络库、客户端处理、结点到结点的消息总线已经有了,无需重头再写。但他又不想影响 Redis 本身,于是采取了比较实际的办法:开一个 Redis 分支,然后将 Redis 专用的东西全部删掉,只剩一个框架,再开始实现设计。

很幸运的是有 C# 客户端来操作 Disque: https://github.com/ziyasal/Disque.Net .

相关链接:

Disque:Redis之父新开源的分布式内存作业队列

Disque 使用教程(DisqueBook.com)

正文到此结束
Loading...