1. 程式人生 > 其它 >Consul 入門實戰(1)--簡介

Consul 入門實戰(1)--簡介

Consul 是HashiCorp 公司提供一個服務網格解決方案,具有服務發現、配置管理登功能。本文主要介紹下 Consul 的基本概念。

1、Consul 的特點

服務發現(Service Discovery):客戶端在 Consul 註冊為服務,其他客戶通過 Consul 獲取服務的提供方;通過 DNS 或 HTTP 的方式,應用可以很容易的找到它所依賴的服務。
健康檢查(Health Checking):Consul 客戶端可以提供任意數量的執行狀況檢查,這些檢查可以與給定服務相關聯("Web 伺服器是否返回 200 OK"),也可以與本地節點("記憶體利用率是否低於 90%")相關聯。可以使用此資訊來監視群集執行狀況,服務發現元件可以使用此資訊將流量從執行狀況不佳的主機路由出去。
Key/Value 儲存:

應用可以將 Consul 的鍵/值儲存用於任意目的,包括動態配置、功能標記、協調、領導者選舉等;簡單的 HTTP API 使其易於使用。
安全服務通訊:Consul 可以為服務生成 TLS 證書,以建立 TLS 連線。意圖可用於定義允許哪些服務進行通訊。服務分割可以輕鬆管理,其意圖可以實時更改,而不是使用複雜的網路拓撲和靜態防火牆規則。
多資料中心:Consul 支援開箱即用的多個數據中心;這意味著 Consul 的使用者不必擔心需要構建額外的抽象層來擴充套件到多個區域。

2、Consul 架構

上圖中有兩個 DataCenter,他們通過 Internet 互聯;為了提高通訊效率,只有 Server 節點才加入跨資料中心的通訊。

在單個數據中心中,Consul 分為 Client 和 Server 兩種節點(所有的節點都是 Agent),Server 節點儲存資料,Client 負責健康檢查及轉發請求到 Server;Server 節點有一個 Leader 和多個 Follower,Leader 節點會將資料同步到 Follower,Server 的數量推薦是 3 到 5 個,在 Leader 掛掉的時候會啟動選舉機制產生一個新的 Leader。

叢集內的節點通過 gossip 協議維護成員關係,某個節點需瞭解叢集內還有其他哪些節點,這些節點是 Client 還是 Server。單個數據中心的 gossip 協議同時使用 TCP 和 UDP 通訊,並且都使用 8301埠。跨資料中心的 gossip 協議也同時使用 TCP 和 UDP 通訊,埠使用 8302。

叢集內資料的讀寫請求可以直接發到 Server,也可以通過 Client 轉發到 Server,請求最終會到達 Leader 節點;在允許資料輕微陳舊的情況下,讀請求也可以在普通的 Server 節點完成,叢集內資料的讀寫和複製都是通過 TCP 的 8300 埠完成。 相關名詞說明: Gossip:Gossip protocol 也叫 Epidemic Protocol,是基於流行病傳播方式的節點或者程序之間資訊交換的協議,在分散式系統中被廣泛使用,比如我們可以使用 gossip 協議來確保網路中所有節點的資料一樣。gossip protocol 最初是由施樂公司帕洛阿爾託研究中心(Palo Alto Research Center)的研究員艾倫·德默斯(Alan Demers)於 1987 年發明的。 Client:Client 是一個轉發所有 RPC 請求到 server 的代理,client 是相對無狀態的;client 唯一執行的後臺活動是加入 LAN gossip 池,該活動使用很低的資源且僅消耗少量的網路頻寬。 Server:Server 是一個有一組擴充套件功能的代理,這些功能包括參與 Raft 選舉,維護叢集狀態,響應 RPC 查詢,與其他資料中心互動 WAN gossip 和轉發查詢給 leader 或者遠端資料中心。 DataCenter:資料中心為一個私有的,低延遲和高頻寬的一個網路環境。 LAN Gossip:它包含所有位於同一個區域網或者資料中心的所有節點。 WAN Gossip:它只包含 Server;這些 Server 分佈在不同的資料中心並且通常通過因特網或者廣域網通訊。 RPC:遠端過程呼叫。

3、Consul 使用場景

服務發現:consul 作為註冊中心,服務地址被註冊到 consul 中以後,可以使用 consul 提供的 dns、http 介面查詢,consul支援health check。
服務隔離:consul 支援以服務為單位設定訪問策略,能同時支援經典的平臺和新興的平臺,支援 tls 證書分發,service-to-service加密。
配置管理:consul 提供 key-value 資料儲存功能,並且能將變動迅速地通知出去,藉助 Consul 可以實現配置共享。

4、Consul 服務發現原理

服務發現的指令碼原理如下:

A、在伺服器 Server1、Server2、Server3 上部署了 Consul Server,伺服器 Server4 、Server5、Server6 上部署了 Consul Client,它們組成了一個 Consul 叢集。
B、Service A、Service B、Service C 部署在 Server4 和 Server5 並註冊到 Consul 上,其他的服務可以發現這三個服務;服務部署在兩臺 Server 上,避免了單點故障。
C、Service D 需要訪問 Service B,首先訪問本機的 Consul Client,Consul Client 會將請求轉發到 Consul Server,Consul Server查詢到 Service B 的資訊返回;最終 Service D 拿到了 Service B 的所有部署的IP 和埠,然後就可以選擇其中一個發起請求了。

參考:https://juejin.cn/post/6844904003764125703