Consul是一個複雜的系統,它有不少不一樣的可組裝的部分。爲了幫助Consul的用戶和開發者造成一個它如何工做的運轉模型,本文介紹它的系統架構。html
注意:本文覆蓋了Consul的內部技術細節。高效的操做和使用Consul並不須要你知道這些細節。這些細節記錄在這裏是爲了方便那些但願學些Consul,可是並無去探尋源碼的人的。因爲每一個節點都必須運行一個agent,緩存
在描述架構以前,這裏提供了一些術語來幫助聲明正在探討的東西:安全
從一萬英尺的高空俯視Consul的架構就像這樣:網絡
讓咱們分解這張圖並描述每一個部分。首先,咱們能看到有兩個數據中心,標記爲「1」和「2」。Consul對多數據中心有一流的支持而且但願這是一個常見的狀況。架構
在每一個數據中心,client和server是混合的。通常建議有3-5臺server。這是基於有故障狀況下的可用性和性能之間的權衡結果,由於越多的機器加入達成共識越慢。然而,並不限制client的數量,它們能夠很容易的擴展到數千或者數萬臺。分佈式
同一個數據中心的全部節點都必須加入gossip協議。這意味着gossip協議包含一個給定數據中心的全部節點。這服務於幾個目的:第一,不須要在client上配置server地址。發現都是自動完成的。第二,檢測節點故障的工做不是放在server上,而是分佈式的。這是的故障檢測相比心跳機制有更高的可擴展性。第三:它用來做爲一個消息層來通知事件,好比leader選舉發生時。性能
每一個數據中心的server都是Raft節點集合的一部分。這意味着它們一塊兒工做並選出一個leader,一個有額外工做的server。leader負責處理全部的查詢和事務。做爲一致性協議的一部分,事務也必須被複制到全部其餘的節點。由於這一要求,當一個非leader得server收到一個RPC請求時,它將請求轉發給集羣leader。優化
server節點也做爲WAN gossip Pool的一部分。這個Pool不一樣於LAN Pool,由於它是爲了優化互聯網更高的延遲,而且它只包含其餘Consul server節點。這個Pool的目的是爲了容許數據中心可以以low-touch的方式發現彼此。這使得一個新的數據中心能夠很容易的加入現存的WAN gossip。由於server都運行在這個pool中,它也支持跨數據中心請求。當一個server收到來自另外一個數據中心的請求時,它隨即轉發給正確數據中想一個server。該server再轉發給本地leader。spa
這使得數據中心之間只有一個很低的耦合,可是因爲故障檢測,鏈接緩存和複用,跨數據中心的請求都是相對快速和可靠的。3d
這裏咱們已經覆蓋了Consul的高層次架構,可是每一個子系統還有不少的細節。一致性協議的詳細文檔是gossip協議。使用的安全模型和協議的文檔也是可用的。
其餘的細節,這麼經過查閱代碼,在線詢問或者發送郵件。