Consul是由HashiCorp基于Go語言開發的,用于微服務下的服務治理,采用Raft演算法保證服務的一致性,采用主從模式的設計可橫向擴展,集群間通過RPC呼叫(HTTP和DNS),
Consul主要特點:服務發現、健康檢查、Key/Value存盤、安全服務通信、多資料中心,
Consul的應用場景:服務發現、服務隔離、服務配置,
架構介紹
- Client:是一個無狀態代理,負責轉發資料請求到Server和健康檢查,
- Follower-Server:參與Raft選舉、維護集群狀態、回應RPC查詢并轉發給Leader-Server等,
- Leader-Server:一個資料中心只有一個Leader,Leader-Server負責所有的查詢和事務(如服務注冊),同時這些事務也會被復制到Follower-Server節點,
- DataCenter:資料中心是一個私有的網路環境,通過WAN GOSSIP在Internet上互動,每個資料中心都存在Consul集群,為了提高通信效率,只有Server節點才加入跨資料中心的通信,
服務器狀態
- 領導者(Leader):領導者處理所有客戶端的互動以及日志的復制同步,在任何時候只能有一個領導者,
- 跟隨者(Follower):完全被動,不會主動發起任何RPC呼叫,只能對其他服務器發起的RPC呼叫做出回應,
- 候選者(Candidate):是處于領導者(Leader)與跟隨者(Follower)之間的一種狀態,只在選舉新領導者的程序中臨時出現,
Raft演算法
Raft通過選舉出一個Leader,接受所有請求并將變更同步給其他Follower,從而達到資料一致性,當Leader無法正常提供服務時啟動崩潰恢復流程進行重新選舉,新Leader將資料同步給到Follower,
Follower節點選舉時會將自己的狀態切換為Candidate,然后向集群中其它Follower節點發送請求,詢問其是否選舉自己成為Leader,當收到來自集群中過半數節點的接受投票后,節點即成為Leader,開始接收Client的事務處理和查詢并向其它的Follower節點同步事務,Leader節點會定時向Follower發送心跳來保持其地位,
Raft演算法詳解
Gossip協議
Gossip協議是為了解決分布式環境下監控和事件通知的瓶頸,Gossip協議中的每個Agent會利用Gossip協議互相檢查在線狀態,分擔了服務器節點的心跳壓力,通過Gossip廣播的方式發送訊息,
所有的Agent都運行著Gossip協議,服務器節點和普通Agent都會加入這個Gossip集群,收發Gossip訊息,每隔一段時間,每個節點都會隨機選擇幾個節點發送Gossip訊息,其他節點會再次隨機選擇其他幾個節點接力發送訊息,這樣一段時間過后,整個集群都能收到這條訊息,
基于Raft演算法,Consul提供強一致性的注冊中心服務,但是由于Leader節點承擔了所有的處理作業,勢必加大了注冊和發現的代價,降低了服務的可用性,通過Gossip協議,Consul可以很好地監控Consul集群的運行,同時可以方便通知各類事件,如Leader選擇發生、Server地址變更等,
ps:Agent是Consul中的核心程式,它將以守護行程的方式在各個節點運行,有Client和Server啟動模式,每個Agent維護一套服務和注冊發現以及健康資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/271424.html
標籤:區塊鏈
下一篇:CodeCraft-21 and Codeforces Round #711 (Div. 2) D. Bananas in a Microwave(列舉+數學)
