文章出處

DisqueRedis之父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)


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()