Golang 語言微服務的服務發現組件之Consul 的系統架構
01介紹
在上篇文章「Golang 語言微服務的服務注冊與發現組件 Consul」中,我們已經介紹服務注冊與發現是什么,Golang 語言微服務架構為什么需要使用服務注冊與發現組件,Golang 語言開發的服務注冊與發現組件 Consul 的主要特性和基本介紹。
本文我們介紹 Consul 的系統架構,讀者朋友們閱讀完本文可以了解 Consul 的工作原理。
02Consul 術語
在介紹 Consul 系統架構之前,我準備先介紹幾個 Consul 術語,目的是讓讀者朋友們更容易理解 Consul 系統架構的介紹內容。
- Datacenter 數據中心
- Cluster 集群
- Server 服務器
- Client 客戶端
- Agent 代理
Consul 原生支持多數據中心,數據中心中包含 Consul 集群,集群由客戶端、服務器或客戶端和服務器混合體的節點組成。
多個部署和運行 Agent 的節點組成 Consul Cluster,集群中包含 Client、Server 或 Client 和 Server 的混合體。
如果節點運行的 Agent 開啟 Server 模式,那么該節點為 Server。
如果節點運行的 Agent 未開啟 Server 模式,那么該節點為 Client。
Agent 是 Consul 集群中所有節點都運行的一個守護進程,負責維護成員身份信息、注冊服務、運行健康檢查、響應查詢等。
03Consul 系統架構
Consul 官方為我們提供了一張 Consul 系統架構圖,在這張圖中,我們可以看到包含兩個數據中心,分別標記為 DATACENTER 1 和 DATACENTER 2。由此可見,Consul 原生支持多數據中心。
在每個數據中心中都包含一個 Consul 集群,DATACENTER 1 中的集群由 6 個部署并運行 Agent 的節點組成,其中三個是以 Server 模式運行的,另外三個是以 Client 模式運行的。
而 DATACENTER 2 中的集群由 3 個部署并運行 Agent 的節點組成,并且這三個節點都是以 Server 模式運行的。
由此可以得出一個結論,DATACENTER 中的集群可以是包含 Client 和 Server 的混合體,也可以是僅包含 Server 節點。
需要注意的是,每個 Consul 數據中心中的集群,官方建議 Server 模式運行的節點控制在 3 至 5 個,因為 3 至 5 個 Server 節點發生故障時,就可以提供一致性和可用性,并且 Server 節點是以 Raft 協議選舉 Leader,Server 節點越多,Leader 選舉越慢。而 Client 節點的數量沒有限制,它是輕量級進程,我們甚至可以創建成千上萬個 Client 節點。
Server 負責基于 Raft 協議選舉 Leader,維護集群狀態,響應 RPC 查詢,與其他 DATACENTER 交換 WAN Gossip,將查詢請求轉發給 Leader 或遠程 DATACENTER。
Client 是無狀態的,負責將所有查詢請求轉發給 Server,而且 Client 不需要與其他 DATACENTER 交換 WAN Gossip,只需參與 LAN Gossip,資源開銷很小,只消耗少量網絡帶寬。
04總結
本文我們介紹 Consul 的系統架構,我們先從宏觀上了解 Consul 的工作原理,也就是先抓住綱,然后再詳細學習 Consul 的各個組件。