Golang 語言微服務的服務注冊與發現組件 Consul
01介紹
在 2016 年底,我開始接觸 Golang 語言和微服務,在過去的 5 年中,微服務架構變得越來越流行,目前中型及以上規模的公司幾乎已經全部拋棄單體架構。
本文我們主要介紹 Golang 語言微服務的服務注冊與發現組件 consul。在介紹 Consul 之前,我們先簡單了解一下服務注冊與發現和 CAP 定理。
02服務注冊與發現
微服務架構與單體架構不同,微服務架構按照業務需求拆分為多個微服務,每個微服務都可以動態部署。
服務注冊與發現組件負責管理拆分的各個微服務,其中服務注冊是指微服務實例啟動時,將其信息注冊到服務注冊與發現組件;服務發現是指微服務實例通過請求服務注冊與發現組件,獲取其需要遠程調用的其他微服務實例的信息。
服務注冊與發現組件的功能包括管理當前注冊到服務注冊與發現組件的微服務實例;心跳檢測注冊到服務注冊與發現組件的微服務實例;為調用方的微服務實例提供被調用的微服務實例的信息。
03CAP 定理
CAP 定理由加州大學柏克萊分校的 Eric Brewer 教授提出,它是描述分布式系統下節點數據同步的基本定理。
其核心是告訴我們,在分布式系統中有三方面需要彼此權衡,分別是一致性(consistency)、可用性(availability)和分區容忍性(partition tolerance),CAP 定理告訴我們,以上三個指標最多只能滿足其中兩個指標。
其中,一致性是當訪問多個節點時能得到同樣的值;可用性意味著每個請求都能獲得響應;分區容忍性是指集群中的某些節點在無法通信后,集群整體還能繼續提供服務。
微服務架構實際上就是分布式系統的一種落地實踐。
04Consul
目前業界已經開源出很多服務注冊與發現組件,例如 Java 語言開發的致力于為分布式系統提供一致性服務的 zookeeper,使用 Golang 語言開發的主要用于服務發現與配置共享的 etcd 和 consul。
其中,Consul 是以服務發現與配置作為主要功能目標,附帶提供了 Key/Value 存儲,僅從服務注冊與發現組件的需求考慮,Consul 更適合。
Consul 是一個服務網格解決方案,滿足 CAP 定理中的 CP,提供服務發現和配置共享的功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以構建完整的服務網格。
Consul 附帶了一個簡單的內置代理,因此一切都開箱即用,但也支持第三方代理集成,如 Envoy。
Consul 主要特性:
- 服務發現
- 健康檢查
- KV 存儲
- 安全服務通信
- 多數據中心
Consul 是一個高可用的分布式系統,支持多數據中心部署,每個數據中心都運行一個 Consul 集群。一個 Consul 集群由部署和運行 Consul Agent 的節點組成。
Consul Agent 負責服務注冊、運行檢查和響應查詢(將查詢請求轉發到 Consul server 中進行處理),服務發現或讀寫 Key/Value 數據不需要運行 Consul Agent。
Consul 集群包含 Consul server 和 Consul client,Consul server 負責存儲和復制數據。多個 Consul server 之間基于 Raft 協議選舉一個 leader。雖然 Consul 可以只使用一個 Consul server,但官方建議使用 3 到 5 個 Consul server,以避免數據丟失。
Consul client 負責將請求轉發給同一數據中心的 Consul server 處理。當發出跨數據中心服務發現或配置請求時,本地 Consul server 會將請求轉發到遠程數據中心并返回結果。
05總結
本文我們先簡單認識一下 Consul,同時介紹了服務注冊與發現是什么,微服務作為分布式系統的一種落地實踐,也需要遵循 CAP 定理,并列舉了業界目前開源的滿足 CP 的服務注冊與發現組件有哪些。
本文轉載自微信公眾號「 Golang語言開發棧」,可以通過以下二維碼關注。轉載本文請聯系 Golang語言開發棧公眾號。