disque概要

作項目過程接觸到disque,記錄一下。html

 

disque是redis之父開源的基於內存的分佈式做業隊列,用c語言實現的非阻塞網絡服務器。c++

 

disque的設計目標:Its goal is to capture the essence of the "Redis as a jobs queue" use case。翻譯過來是把redis做爲做業隊列。
git

 

做爲消息代理,Disque充當了須要進行消息交換的進程之間的一箇中間層,生產者向其中添加供消費者使用的消息。這種生產者-消費者隊列模型很是常見,其主要不一樣體如今一些細節方面:github

  • Disque是一個同步複製做業隊列,在默認狀況下,新增任務會複製到W個節點上,W-1個節點發生故障也不會影響消息的傳遞。
  • Disque支持至少一次和至多一次傳遞語義,前者是設計和實現重點,然後者能夠經過將重試時間設爲0來實現。每一個消息的傳遞語義都是單獨設置的,所以,在同一個消息隊列中,語義不一樣的消息能夠共存。
  • 按照設計,Disque的至少一次傳遞是近似一次傳遞,它會盡力避免消息的屢次傳遞。
  • Disque集羣的全部節點都有一樣的角色,也就是「多主節點(multi-master)」。生產者和消費者能夠鏈接到不一樣的隊列或節點,節點會根據負載和客戶端請求自動交換消息。
  • Disque支持可選的異步命令。在這種模式下,生產者在向一個複製因子不爲1的隊列中添加一個做業後,能夠沒必要等待複製完成就能夠轉而執行其它操做,節點會在後臺完成複製。
  • 在超過指定的消息重試時間後,Disque會自動將未收到響應的消息從新放入隊列。
  • 在Disque中,消費者使用顯式應答來標識消息已經傳遞完成。
  • Disque只提供盡力而爲排序。隊列根據消息建立時間對消息進行排序,而建立時間是經過本地節點的時鐘獲取的。所以,在同一個節點上建立的消息一般是按建立順序傳遞的,但Disque並不提供嚴格的FIFO語義保證。好比,在消息從新排隊或者由於負載均衡而移至其它節點時,消息的傳遞順序就沒法保證了。因此,Salvatore指出,從技術上講,Disque嚴格來講並非一個隊列,而更應該稱爲消息代理。
  • Disque經過四個參數提供了細粒度的做業控制,分別是複製因子(指定消息的副本數)、延遲時間(將消息放入隊列前的最小等待時間)、重試時間(設置消息什麼時候從新排隊)、過時時間(設置什麼時候刪除消息)。

 

目前disque的c++客戶端只有acl,acl是一個通用的網絡通訊和服務器編程框架,對disque的支持是其中的一部分。redis

 

disque中文文檔:http://disquebook.com/install.html 編程

disque github主頁:https://github.com/antirez/disque 服務器

acl主頁:https://github.com/zhengshuxin/acl/tree/master/lib_acl_cpp/samples/disque 網絡

相關文章
相關標籤/搜索