本篇主要介紹分布式框架的模組和其主要使用的通訊方式zmq。
首先,對於任意的上游結點,它都有可能會把處理的結果傳送到任意的一台下游結點中,同時如果下游結點有新增的結點,上游結點還能自動感知並處理。另一方面,任意的下游結點也會要和所有的上游結點保持心跳。如果使用原始的socket,解決上述的問題會比較麻煩,所以我們運用了zmq來解決上述的問題。zmq具有下述的優點:1. 是乙個跨協議的通訊方式,目前支援inproc, ipc, tcp, tpic, multicast;2. 具有豐富且功能強大的設計模式,如req-reply, pub-sub, push-pull, and router-dealer; 3. 高速非同步的通訊引擎。以上的三點優勢均對我們整體的分布是系統產生了至關重要的影響。首先,之前提到過只有在node間傳輸的訊息量不大的情況下,才對整體效能影響不大;但如果node間的傳輸訊號量不能忽略,那麼我們可以把兩個服務放到一台機器上,通訊協議由tcp改為ipc;其次,下游結點給上游所有結點的心跳可以通過push-pull的方式傳送,而上游根據下游的負載來分發則可以使用router-dealer模式,豐富的傳輸模式極大簡化的程式設計。最後,經本人實際測量發現,在不同機器之間zmq的通訊傳輸速度幾乎等同於socket。zmq還有網路異常情況自動連線,可以先啟動客戶端再啟動服務端等優勢,增強了整體系統的可靠性。
下圖是整個框架的模組示意圖。其中,藍色的方框為任一線程,socket send和worker執行緒可以是多個,而其它的只能為單執行緒(在config檔案中配置);菊黃色的箭頭是不同結點的傳輸,採用的是zmq方式通訊,示意圖中指畫出了上游往下游的傳輸,下游往上游的心跳並沒有顯示在該示意圖中;紅色的箭頭表示執行緒和資料儲存單元的訊息傳輸;黃色的方框則是執行緒間公用的資料儲存單元。工作時,整個node的輸入**於兩處,一是socket get模組的http請求,當獲得請求後會記錄socket號到socket list中去,同時把具體的請求放到downstream list模組中;另一處是上游node給本node分派的任務,直接寫到proxy模組中去。worker執行緒會自己去downstream list裡面去取任務,它的操作方式是執行完成乙個再去取乙個。worker執行緒執行完乙個任務後會根據情況分派輸出,要麼分發給下游的node,要麼傳遞給upstream list通過http協議傳送回客戶端;socket send從upstream list中獲取處理的結果,通過http協議傳遞出去,socket send的處理方式也是執行乙個再獲取另乙個。socket clean模組的作用是定期清理(close)socket list中的沒有處理的socket,以免系統的檔案描述符用盡。
該框架具有以下特點:1. 可以運用在整體服務中的任意結點,而不需要根據結點的不同位置或功能再新增其它結構;2. 整體框架無鎖,效能優異;3. 部分模組可根據線上情況來配置數量,如worker等;4. 高可靠性和智慧型化。
下面我們來進一步觀察兩大核心模組,proxy和worker。
先來看proxy模組。它與其它結點有三個通訊埠。pub的作用是和所有的上游結點保持心跳,同時告知上游結點自己當前的負載量;sub的作用和pub相對,它能接收下游結點傳來的心跳和負載資訊;dealer的作用是接收上游結點分配的任務。recordmessege()記錄當前需要處理的任務,where2putproxy(message) 則根據情況分派訊息給不同的公共資料模組。
再來看看worker模組。它只有乙個router埠連線下游結點,並把本node處理後的任務分派出去,以便後續的處理;handlerequest(message) 是業務處理的核心介面,recordmessage()也是記錄資訊,where2putworker(message) 則判斷資料的流向,choosechildnode()則起到了負載均衡的作用。
最後提一下不同結點間的通訊協議,我採用的是zmq中自帶的frame來區分不同的訊號邏輯。
在一種分布式框架設計(三)中,我會分享上述兩種型別的無鎖資料模組的設計。
一種分布式框架設計(四)
我們設計的分布式系統,在正常工作時呈現出網狀。服務有層次性。客戶的請求會逐步經歷各層服務進行處理。當遍歷全然部服務後才會完畢一次請求。每層服務會有若干臺機器。上游節點的機器能夠把輸出結果傳遞到下游節點的隨意一台機器上。當服務所依賴的資料須要更新時。我們須要做好同步工作,並保證在資料更新過程中服務是可...
分布式服務框架設計指標
特性名 功能名說明 服務訂閱發布 配置化發布和引用服務 支援通過xml配置的方式發布和匯入服務 服務自動發現機制 支援服務實時自動發現,由註冊中心推送服務提供者位址,消費者不需要配置服務提供者位址,位址透明化 支援執行態註冊和取消服務 服務路由 預設提供隨機路由 輪詢 基於權重的策略等 粘滯連線 總...
分布式框架設計中的服務降級
另外一些場景就是某些服務不可用時,又不能直接讓整個流程失敗就本地mcok 模擬 實現,做流程放通 eg 使用者登入餘額鑑權服務不能正常工作,需要做業務放通,記錄消費話單允許使用者繼續訪問,而不是返回失敗 為了保證以上兩種場景的正常服務,服務需要有降級 服務降級主要包括容錯降級和遮蔽降級 遮蔽降級 1...