Consul快速入門(一):Consul初探

1、Consul是什麼

Consul官網:https://www.consul.io/

Consul是HashiCorp公司推出的開源產品,用於實現分佈式系統的服務發現、服務配置、服務隔離,這些功能中的每一個都可以根據需要單獨使用,也可以同時使用所有功能。
與其它分佈式服務註冊與發現的方案相比,Consul的方案更“一站式”,內置了服務註冊與發現框架、分佈一致性協議實現、健康檢查、Key/Value存儲、多數據中心方案,不再需要依賴其它工具(比如ZooKeeper等)。Consul本身使用go語言開發,具有跨平臺、運行高效等特點,也非常方便和 Docker 配合使用。

2、功能特性

  • 服務發現: Consul 提供了通過 DNS 或者 HTTP 接口的方式來註冊服務和發現服務。一些外部的服務通過 Consul 很容易的找到它所依賴的服務

  • 健康檢查:Consul客戶端會定期發送一些健康檢查數據和服務端進行通訊,判斷客戶端的狀態、內存使用情況是否正常,用來監控整個集羣的狀態,防止服務轉發到故障的服務上面。

  • Key/Value存儲:Consul提供簡單易用的HTTP接口實現鍵值存儲。可用於實現動態配置、功能標記、服務協調、Leader選舉等等功能

  • 安全服務通訊:Consul可以爲服務生成和分發TLS證書以建立相互的TLS連接可以使用intentions定義允許哪些服務進行通信。可以使用intentions輕鬆管理服務隔離,而不是使用複雜的網絡拓撲和靜態防火牆規則。

  • 多數據中心:Consul支持開箱即用的多數據中心,這意味着用戶不需要擔心需要建立額外的抽象層讓業務擴展到多個區域。

3、基礎架構

官網介紹:Consul Architecture

3.1、架構圖

consul-arch.png

3.2、圖解

首先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端口完成。

Consul 集羣間使用了 Gossip 協議通信和 raft 一致性算法

3.3、相關名詞解釋

  • Gossip :Gossip protocol 也叫 Epidemic Protocol (流行病協議),實際上它還有很多別名,比如:“流言算法”、“疫情傳播算法”等。 這個協議的作用就像其名字表示的意思一樣,非常容易理解,它的方式其實在我們日常生活中也很常見,比如電腦病毒的傳播,森林大火,細胞擴散等等。

  • Client :一個 Client 是一個轉發所有 RPC 到 server 的代理。這個 client 是相對無狀態的。client 唯一執行的後臺活動是加入 LAN gossip 池。這有一個最低的資源開銷並且僅消耗少量的網絡帶寬。

  • Server :一個 server 是一個有一組擴展功能的代理,這些功能包括參與 Raft 選舉,維護集羣狀態,響應 RPC 查詢,與其他數據中心交互 WAN gossip 和轉發查詢給 leader 或者遠程數據中心。

  • DataCenter : 雖然數據中心的定義是顯而易見的,但是有一些細微的細節必須考慮。例如,在 EC2 中,多個可用區域被認爲組成一個數據中心。我們定義數據中心爲一個私有的,低延遲和高帶寬的一個網絡環境。這不包括訪問公共網絡,但是對於我們而言,同一個 EC2 中的多個可用區域可以被認爲是一個數據中心的一部分。

  • Consensus : 一致性,使用 Consensus 來表明就 leader 選舉和事務的順序達成一致。爲了以容錯方式達成一致,一般有超過半數一致則可以認爲整體一致。Consul 使用 Raft 實現一致性,進行 leader 選舉,在 consul 中的使用 bootstrap 時,可以進行自選,其他 server 加入進來後 bootstrap 就可以取消。

  • LAN Gossip : 它包含所有位於同一個局域網或者數據中心的所有節點。

  • WAN Gossip : 它只包含 Server。這些 server 主要分佈在不同的數據中心並且通常通過因特網或者廣域網通信。

  • RPC :遠程過程調用。這是一個允許 client 請求 server 的請求/響應機制。

4、服務註冊發現原理

consul-discovery.png

1、當Producer啓動的時候,會向Consul發送一個post請求,告訴Consul自己的IP和Port

2、Consul接收到Producer的註冊後,每隔10s(默認)會向 Producer發送一個健康檢查的請求,檢驗Producer是否健康

3、當Consumer發送GET方式請求/api/address到Producer時,會先從Consul中拿到一個存儲服務IP和Port的臨時表,從表中拿到Producer的IP和Port後再發送GET方式請求/api/address

4、該臨時表每隔10s會更新,只包含有通過了健康檢查的Producer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章