一、什么是服務(wù)發(fā)現(xiàn)?
服務(wù)發(fā)現(xiàn)是一種允許在分布式系統(tǒng)中自動(dòng)檢測和追蹤網(wǎng)絡(luò)中的各個(gè)服務(wù)實(shí)例,它主要解決的問題是服務(wù)的動(dòng)態(tài)注冊、查找和負(fù)載均衡。
二、服務(wù)發(fā)現(xiàn)的類型
通常來說服務(wù)發(fā)現(xiàn)有兩種主要類型:客戶端發(fā)現(xiàn)和服務(wù)器端發(fā)現(xiàn)。
1.客戶端發(fā)現(xiàn)
在客戶端發(fā)現(xiàn)中,服務(wù)使用者負(fù)責(zé)查詢服務(wù)注冊表以查找可用的服務(wù)實(shí)例,然后在這些實(shí)例之間對請求進(jìn)行負(fù)載均衡。
優(yōu)勢:易于實(shí)施和理解。減少中央負(fù)載均衡器上的負(fù)載。
缺點(diǎn):
使用者需要實(shí)現(xiàn)發(fā)現(xiàn)邏輯。
注冊表協(xié)議中的更改需要客戶端中的更改。
比如,Netflix Eureka就是一個(gè)客戶端服務(wù)發(fā)現(xiàn)的注冊中心。
2.服務(wù)器端發(fā)現(xiàn)
在服務(wù)器端發(fā)現(xiàn)中,服務(wù)使用者向中介(負(fù)載均衡器或 API 網(wǎng)關(guān))發(fā)出請求,然后中介查詢服務(wù)注冊表并將請求路由到相應(yīng)的服務(wù)實(shí)例。
優(yōu)勢:
集中發(fā)現(xiàn)邏輯,降低使用者的復(fù)雜性。
更易于管理和更新發(fā)現(xiàn)協(xié)議。
缺點(diǎn)
引入了一個(gè)額外的網(wǎng)絡(luò)躍點(diǎn)。
負(fù)載均衡器可能成為單點(diǎn)故障。
比如,AWS Elastic Load Balancer(ELB)與 AWS服務(wù)注冊表集成,以實(shí)現(xiàn)服務(wù)器端發(fā)現(xiàn)。
三、服務(wù)發(fā)現(xiàn)如何工作?
1.三個(gè)組件
服務(wù)發(fā)現(xiàn)包含三個(gè)重要的組件:服務(wù)提供者、服務(wù)使用者和服務(wù)注冊表,它們之間的關(guān)系如下圖:
服務(wù)提供者(Service Provider):服務(wù)提供者在進(jìn)入系統(tǒng)時(shí)向服務(wù)注冊中心注冊,并在離開系統(tǒng)時(shí)取消注冊。
服務(wù)使用者(Service Consumer):服務(wù)使用者從服務(wù)注冊表中獲取提供者的信息,然后連接到服務(wù)提供者。
服務(wù)注冊表(Service Registry):服務(wù)注冊表是保存服務(wù)提供者的相關(guān)信息,當(dāng)服務(wù)提供者有變更時(shí),注冊表也能感知,以便客戶端可以通過從服務(wù)注冊表獲取最新數(shù)據(jù)。
2.工作原理
服務(wù)注冊:每個(gè)服務(wù)實(shí)例在啟動(dòng)時(shí)會(huì)向一個(gè)服務(wù)注冊中心(Service Registry)注冊自己,包括服務(wù)名、實(shí)例ID、IP地址、端口號(hào)等信息。
服務(wù)發(fā)現(xiàn):客戶端需要訪問某個(gè)服務(wù)時(shí),會(huì)先查詢服務(wù)注冊中心以獲取可用的服務(wù)實(shí)例列表,然后選擇一個(gè)實(shí)例進(jìn)行調(diào)用。
健康檢查:服務(wù)注冊中心定期對注冊的服務(wù)實(shí)例進(jìn)行健康檢查,確保只有健康的實(shí)例在列表中,故障實(shí)例會(huì)被移除。
負(fù)載均衡:在客戶端從服務(wù)注冊中心獲取服務(wù)實(shí)例列表后,通常會(huì)使用某種負(fù)載均衡策略(如輪詢、隨機(jī)、最小連接數(shù)等)來選擇具體的服務(wù)實(shí)例進(jìn)行請求。
四、服務(wù)發(fā)現(xiàn)的重要性
減少手動(dòng)配置:服務(wù)可以動(dòng)態(tài)發(fā)現(xiàn)并相互連接,無需手動(dòng)配置和硬編碼網(wǎng)絡(luò)位置。
改進(jìn)的可擴(kuò)展性:隨著新服務(wù)實(shí)例的添加或刪除,服務(wù)發(fā)現(xiàn)可確保其他服務(wù)能夠無縫適應(yīng)不斷變化的環(huán)境。
增強(qiáng)的容錯(cuò)能力:服務(wù)發(fā)現(xiàn)機(jī)制通常包括運(yùn)行狀況檢查,使系統(tǒng)能夠自動(dòng)將流量從失敗的服務(wù)實(shí)例中重新路由出去。
簡化管理:擁有中央服務(wù)注冊表可以更輕松地監(jiān)視、管理和排除整個(gè)系統(tǒng)的故障。