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 節點才加入跨數據中心的通信。
集群內的節點通過 gossip 協議維護成員關系,某個節點需了解集群內還有其他哪些節點,這些節點是 Client 還是 Server。單個數據中心的 gossip 協議同時使用 TCP 和 UDP 通信,並且都使用 8301端口。跨數據中心的 gossip 協議也同時使用 TCP 和 UDP 通信,端口使用 8302。
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