Golang 語言微服務的服務註冊與發現組件 Consul

01 介紹

在 2016 年底,我開始接觸 Golang 語言和微服務,在過去的 5 年中,微服務架構變得越來越流行,目前中型及以上規模的公司幾乎已經全部拋棄單體架構。

本文我們主要介紹 Golang 語言微服務的服務註冊與發現組件 consul。在介紹 Consul 之前,我們先簡單瞭解一下服務註冊與發現和 CAP 定理。

02  服務註冊與發現

微服務架構與單體架構不同,微服務架構按照業務需求拆分爲多個微服務,每個微服務都可以動態部署。

服務註冊與發現組件負責管理拆分的各個微服務,其中服務註冊是指微服務實例啓動時,將其信息註冊到服務註冊與發現組件;服務發現是指微服務實例通過請求服務註冊與發現組件,獲取其需要遠程調用的其他微服務實例的信息。

服務註冊與發現組件的功能包括管理當前註冊到服務註冊與發現組件的微服務實例;心跳檢測註冊到服務註冊與發現組件的微服務實例;爲調用方的微服務實例提供被調用的微服務實例的信息。

03 CAP 定理

CAP 定理由加州大學柏克萊分校的 Eric Brewer 教授提出,它是描述分佈式系統下節點數據同步的基本定理。

其核心是告訴我們,在分佈式系統中有三方面需要彼此權衡,分別是一致性(consistency)、可用性(availability)和分區容忍性(partition tolerance),CAP 定理告訴我們,以上三個指標最多隻能滿足其中兩個指標。

其中,一致性是當訪問多個節點時能得到同樣的值;可用性意味着每個請求都能獲得響應;分區容忍性是指集羣中的某些節點在無法通信後,集羣整體還能繼續提供服務。

微服務架構實際上就是分佈式系統的一種落地實踐。

04  Consul

目前業界已經開源出很多服務註冊與發現組件,例如 Java 語言開發的致力於爲分佈式系統提供一致性服務的 zookeeper,使用 Golang 語言開發的主要用於服務發現與配置共享的 etcd 和 consul。

其中,Consul 是以服務發現與配置作爲主要功能目標,附帶提供了 Key/Value 存儲,僅從服務註冊與發現組件的需求考慮,Consul 更適合。

Consul 是一個服務網格解決方案,滿足 CAP 定理中的 CP,提供服務發現和配置共享的功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以構建完整的服務網格。

Consul 附帶了一個簡單的內置代理,因此一切都開箱即用,但也支持第三方代理集成,如 Envoy。

Consul 主要特性:

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 的服務註冊與發現組件有哪些。

參考資料:
https://zh.wikipedia.org/wiki/CAP 定理
https://www.consul.io/docs/intro

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/gTXSjd6tNgPc0d5hema6Kg