本文簡單介紹了 Consul 的原理,但願能吸引感興趣的朋友一塊兒探討研究。html
須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼 一零三八七七四六二六java
Consul 是一個支持多數據中心分佈式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發, 基於 Mozilla Public License 2.0 的協議進行開源. Consul 支持健康檢查,並容許 HTTP 和 DNS 協議調用 API 存儲鍵值對. 命令行超級好用的虛擬機管理軟件 vgrant 也是 HashiCorp 公司開發的產品.nginx
一致性協議採用 Raft 算法,用來保證服務的高可用. 使用 GOSSIP 協議管理成員和廣播消息, 而且支持 ACL 訪問控制.算法
Consul 的使用場景docker
docker 實例的註冊與配置共享分佈式
coreos 實例的註冊與配置共享微服務
vitess 集羣命令行
SaaS 應用的配置共享3d
與 confd 服務集成,動態生成 nginx 和 haproxy 配置文件cdn
Consul概覽
首先Consul支持多數據中心,在上圖中有兩個DataCenter,他們經過Internet互聯,同時請注意爲了提升通訊效率,只有Server節點才加入跨數據中心的通訊。
在單個數據中心中,Consul分爲Client和Server兩種節點(全部的節點也被稱爲Agent),Server節點保存數據,Client負責健康檢查及轉發數據請求到Server;Server節點有一個Leader和多個Follower,Leader節點會將數據同步到Follower,Server的數量推薦是3個或者5個,在Leader掛掉的時候會啓動選舉機制產生一個新的Leader。
集羣內的Consul節點經過gossip協議(流言協議)維護成員關係,也就是說某個節點了解集羣內如今還有哪些節點,這些節點是Client仍是Server。單個數據中心的流言協議同時使用TCP和UDP通訊,而且都使用8301端口。跨數據中心的流言協議也同時使用TCP和UDP通訊,端口使用8302。
集羣內數據的讀寫請求既能夠直接發到Server,也能夠經過Client使用RPC轉發到Server,請求最終會到達Leader節點,在容許數據輕微陳舊的狀況下,讀請求也能夠在普通的Server節點完成,集羣內數據的讀寫和複製都是經過TCP的8300端口完成。 java B2B2C 源碼 Springcloud多租戶電子商城系統