來自UC的HTTP協議級消息隊列服務組件:UCMQ

jopen 11年前發布 | 27K 次閱讀 UCMQ 消息系統

UCMQ是一款輕量的HTTP協議級消息隊列服務組件,項目的最初原型來自“張宴”的HTTPSQS。

基本特性:

  • 支持標準的HTTP協議( GET/POST方法),支持長連接(keep-alive);
  • 請求響應非常快速,入隊列、出隊列速度超過10000次/秒;
  • 每個UCMQ實例支持多隊列,隊列通過操作接口自動創建;
  • 單個隊列默認限制存儲100w未讀消息,可以不限制(非必要建議限制);
  • 可以在不停止服務的情況下便捷地修改單個隊列的屬性(大小限制/只讀鎖/延時隊列/同步頻率);
  • 可以實時查看隊列屬性(入隊列數量、出隊列數量、未讀消息數量、消息積壓數量)。
  • 每個隊列有獨立的數據文件易管理易搬遷。

常見部署:

UCMQ邏輯架構中通常會涉及到三個角色:生產者(producer)/異步消息隊列(UCMQ)/消費者(consumer),而三者間都以http協議作為通訊方式,如下圖:

來自UC的HTTP協議級消息隊列服務組件:UCMQ

【UCMQ部署邏輯架構圖】

【說明】 在整個部署架構中“生產者”和“消費者”都被視為UCMQ的客戶端。“生產者”和“消費者”通過設定的負載均衡機制訪問UCMQ服務端。每個客戶端(生產 者/消費者)均可注冊一個或多個服務端(在客戶端配置文件添加每個UCMQ服務端監聽地址),如果注冊多個則可以“業務容災”和“負載均衡”。

內部結構: 

來自UC的HTTP協議級消息隊列服務組件:UCMQ

【UCMQ內部結構圖】

 【說明】

控制模塊:負責UCMQ內部流程的控制;

主從復制模塊:將數據變更使用binlog方式同步到備機實現容災(本版本暫不實現);

http協議處理模塊:http處理模塊負責http協議的解析和封裝;

libevent網絡事件驅動模塊:負責異步事件的接收和分發;

MQ隊列管理模塊:管理所有隊列的rtag信息和隊列使用狀態信息;

數據存儲模塊:負責消息持久化(當前數據文件mmap到緩存,所以持久化由系統 輔助完成),清理垃圾數據文件(一個隊列中可有多個文件);負責準確和完整的存/取隊列的rtag信息。

存儲設計

由于HTTP_SQS項目是基于TC存儲數據,眾所周知TC的數據文件是從頭開始map到緩存的,由于數據量的擴大不能被緩存的數據將很大程度上影 響服務的性能和穩定性。所以UCMQ摒棄了TC,使用日志文件方式存儲消息,數據緩存被順序讀取至內存中,且緩存區域隨讀寫指針移動,這樣既節省了內存使 用也保證了性能。設計原理如圖: 

來自UC的HTTP協議級消息隊列服務組件:UCMQ

【UCMQ存儲設計圖】

項目主頁:http://www.baiduhome.net/lib/view/home/1370737152945

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!