服務(wù)發(fā)現(xiàn)和注冊


我們有了兩個服務(wù)。服務(wù)A的IP地址是192.168.0.1,端口9001,服務(wù)B的IP地址192.168.0.2,端口9002。我們的客戶端需要調(diào)用服務(wù)A和服務(wù)B,我們只需要在配置文件中寫上服務(wù)A和服務(wù)B的IP地址即可。

此時,服務(wù)A的服務(wù)器負(fù)載有點(diǎn)高,我們需要臨時增加服務(wù)A的實(shí)例,IP192.168.0.3,端口9001。但是我們的客戶端要怎么才能調(diào)用新的實(shí)例?

常規(guī)來說,我們可以有以下幾種方法:

  • 網(wǎng)絡(luò)代理方式
    如果是http方式通信的服務(wù),可以增加一個nginx做反向代理,轉(zhuǎn)發(fā)到兩個服務(wù)A的實(shí)例上。
    如果是RPC服務(wù)則可以增加一個LVS或HAProxy或者ESB之類的網(wǎng)絡(luò)代理,客戶端配置網(wǎng)絡(luò)代理地址。
    服務(wù)B我們再來一套一樣的配置,這時候又來了服務(wù)C、服務(wù)D、服務(wù)E...,好吧我們好還要再多維護(hù)同樣多的網(wǎng)絡(luò)代理。此外,所有的服務(wù)調(diào)用服務(wù)調(diào)用都必須經(jīng)過網(wǎng)絡(luò)代理,我們還必須保證代理的高可用。最后,陷入運(yùn)維災(zāi)難。

  • DNS方式
    給服務(wù)A配置一個域名,然后通過配置兩個A記錄分別指向兩個服務(wù)A的實(shí)例,客戶端只要配置服務(wù)A的域名即可。
    這種方式也存在問題,首先DNS沒有辦法管理端口,我們的端口還是只能寫在每個客戶端的配置文件中。此外DNS輪詢負(fù)載均衡能力太弱,可能會導(dǎo)致客戶端負(fù)載的不均衡。

現(xiàn)在有了服務(wù)發(fā)現(xiàn)和注冊機(jī)制,我們可以更合理的解決這個問題。

服務(wù)發(fā)現(xiàn)和注冊,參考字面意思很容易理解,其核心部分可以理解為一個服務(wù)注冊表。服務(wù)啟動時,將自己的信息注冊到注冊表中。注冊表需要每一定時間訪問下已經(jīng)注冊的服務(wù),將沒有響應(yīng)的服務(wù)從注冊表中刪除。最終讓客戶端拿到正常運(yùn)行的服務(wù)地址。

此時,我們的服務(wù)注冊表必須具備分布式、高可用、強(qiáng)一致性等特點(diǎn)。

目前,業(yè)界開源的服務(wù)發(fā)現(xiàn)和注冊產(chǎn)品有很多,比較流行的主要有:ZooKeeper,Etcd,Consul,Eureka等。

下面介紹下今天的主角,Consul。

Consul


Consul是一個服務(wù)發(fā)現(xiàn)和注冊的工具,其具有分布式、高擴(kuò)展性能特點(diǎn)。

Consul主要包含如下功能:

  • 服務(wù)發(fā)現(xiàn): 支持 http 和 dns 兩種協(xié)議的服務(wù)注冊和發(fā)現(xiàn)方式。

  • 監(jiān)控檢查: 支持多種方式的健康檢查。

  • Key/Value存儲: 支持通過HTTP API實(shí)現(xiàn)分布式KV數(shù)據(jù)存儲。

  • 多數(shù)據(jù)中心支持:支持任意數(shù)量數(shù)據(jù)中心。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

上圖是官網(wǎng)提供的一個事例系統(tǒng)圖,圖中的Server是consul服務(wù)端高可用集群,Client是consul客戶端。consul客戶端不保存數(shù)據(jù),客戶端將接收到的請求轉(zhuǎn)發(fā)給響應(yīng)的Server端。Server之間通過局域網(wǎng)或廣域網(wǎng)通信實(shí)現(xiàn)數(shù)據(jù)一致性。每個Server或Client都是一個consul agent。Consul集群間使用了

網(wǎng)友評論