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




































