分佈式系統架構之消息系統

消息系統中,經常使用的一致性解決方案以下:數據庫

1)      發送消息給消息系統服務器

2)      消息系統入庫消息多線程

3)      消息系統返回結果線程

4)      業務操做索引

5)      發送業務操做結果給消息系統隊列

6)      更改存儲中的消息狀態內存

若是消息丟失,從業務數據補發消息是最完全的容災手段。通常地,把集羣和集羣之間對消息的消費做爲topic模型處理,而集羣內部的各個應用實例對消息的消費當作Queue模型處理。引入clusterID來標識不一樣的集羣,集羣內的各個應用實例的鏈接使用一樣的ClusterID。分兩級處理,從而達到多個不一樣的集羣進行消息訂閱的目的。須要注意的是從topic中分發消息分發到不一樣的queue中時,須要由獨立的中轉消息訂閱者來完成,而且對同一個queue的中轉只能由一個鏈接完成,爲了實現高可用性,還須要備份節點。同步

 

爲了保證消息發送的可靠性,首先要保證消息發送端的可靠性。保證消息存儲的可靠性有多種方法:有基於文件的消息存儲例如ActiveMQ,採用數據庫的消息存儲通常考慮採用寬表、冗餘數據的方式實現,還有基於雙機內存的消息存儲。經過服務器主動調度安排投遞的方式能夠實現數據庫存儲的便利擴容。因爲消息系統須要顯示地收到接受者確認消息處理完畢的信號才能刪除消息,因此保證消息投遞的可靠性必定從應用層的響應入手。在進行投遞時必定要採用多線程的方式處理,單機多訂閱者共享鏈接,消息只發送一次,而後傳到單機的多訂閱者生成多個實例處理。消息重複接收主要是由於消息接受者成功處理消息後,消息系統不能及時更新投遞狀態形成的。應對消息重複的辦法是使消息接收端的處理是一個冪等操做。消息隊列

 

對應有序的消息隊列而言,單機多隊列的隔離完成了對消息的有序支持,進一步,把發送到這臺機器的消息數據進行順序寫入,而後根據隊列作一個索引,每一個隊列的索引是獨立的,其中保存的只是相對於存儲數據的物理隊列的索引。另外,採用消息同步複製的方式解決本地存儲的可靠性it

相關文章
相關標籤/搜索