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


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

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

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

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

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

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

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

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

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式