微服務(wù)之服務(wù)治理

? ? ? ? 在微服務(wù)架構(gòu)中,一個單體應(yīng)用可以拆分為多個微服務(wù)(單一責(zé)職),每個小服務(wù)運行在不同的進程中,服務(wù)與服務(wù)之間采用http 輕量協(xié)議(比如流行的restful)傳輸數(shù)據(jù),每個服務(wù)所擁有的功能具有獨立性強、高內(nèi)聚的特點,這樣的設(shè)計就實現(xiàn)了單個服務(wù)的高內(nèi)聚,服務(wù)與服務(wù)之間的低耦合效果,這一個一個的小服務(wù)就是微服務(wù)。由于服務(wù)拆分粒度更細,有利于資源重復(fù)利用,提高系統(tǒng)可維護性。

微服務(wù)有兩個核心:

? 微:服務(wù)的粒度要細,即服務(wù)要細化到API

? 服務(wù):提供好服務(wù),要讓用戶感到好用

? ? ? ? 微服務(wù)架構(gòu)的缺點中最主要的就是由于微服務(wù)數(shù)量眾多導(dǎo)致維護成本巨大,服務(wù)治理為解決此問題而產(chǎn)生的。服務(wù)治理的作用是讓維護人員從人工維護中解放出來,由服務(wù)自維護,微服務(wù)作為服務(wù)提供方主動向服務(wù)治理中心注冊,服務(wù)的消費方通過服務(wù)治理中心查詢需要的服務(wù)并進行調(diào)用。

圖片來自網(wǎng)絡(luò)
Spring Cloud Eureka

? ? ? ? Spring Cloud Eureka 是對Netflix公司的Eureka的二次封裝,它實現(xiàn)了服務(wù)治理的功能,Spring Cloud Eureka提供服務(wù)端與客戶端,服務(wù)端即是服務(wù)注冊中心,客戶端完成服務(wù)的注冊與發(fā)現(xiàn)。

官方架構(gòu)圖
圖片來自網(wǎng)絡(luò)

? ? 解釋說明:

1.Application Service 服務(wù)提供者;

2.Application Client 服務(wù)消費者;

3.Make Remote Call,可以簡單理解為調(diào)用RESTful的接口;

4.us-east-1c、us-east-1d等是zone,它們都屬于us-east-1這個region;

? ? ? ? 由圖可知,Eureka包含兩個組件:Eureka Server 和 Eureka Client。

? ? ? ? Eureka Server提供服務(wù)注冊服務(wù),各個節(jié)點啟動后,會在Eureka Server中進行注冊,這樣Eureka Server中的服務(wù)注冊表中將會存儲所有可用服務(wù)節(jié)點的信息,服務(wù)節(jié)點的信息可以在界面中直觀的看到。

? ? ? ? Eureka Client是一個Java客戶端,用于簡化與Eureka Server的交互,客戶端同時也具備一個內(nèi)置的、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器。

? ? ? ? 在應(yīng)用啟動后,將會向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)。如果Eureka Server在多個心跳周期內(nèi)沒有接收到某個節(jié)點的心跳,Eureka Server將會從服務(wù)注冊表中把這個服務(wù)節(jié)點移除(默認(rèn)90秒)。

圖片來自網(wǎng)絡(luò)

? ? ? ? Eureka還提供了客戶端緩存的機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務(wù)的API。

? ? ? ? 綜上,Eureka通過心跳檢測、健康檢查、客戶端緩存等機制,確保了系統(tǒng)的高可用性、靈活性和可伸縮性。

? ? ? ? 下圖顯示了Eureka Server與Eureka Client的關(guān)系:

圖片來自網(wǎng)絡(luò)
服務(wù)注冊

? ? ? ? 在服務(wù)治理框架中,通常都會構(gòu)建一個注冊中心,每個服務(wù)單元向注冊中心登記自己提供的服務(wù),將主機與端口號、版本號、通信協(xié)議等一些附加信息告知注冊中心,注冊中心按照服務(wù)名分類組織服務(wù)清單,服務(wù)注冊中心還需要以心跳的方式去監(jiān)控清單中的服務(wù)是否可用,若不可用需要從服務(wù)清單中剔除,達到排除故障服務(wù)的效果。

圖片來自網(wǎng)絡(luò)
服務(wù)發(fā)現(xiàn)

? ? ? ? 服務(wù)間的調(diào)用不再通過指定具體的實例地址來實現(xiàn),而是通過向服務(wù)名發(fā)起請求調(diào)用實現(xiàn)。服務(wù)發(fā)現(xiàn)有兩種方式:

1.客戶端發(fā)現(xiàn) - 客戶端或者API網(wǎng)關(guān)通過查詢服務(wù)注冊中心或者服務(wù)的位置信息。


圖片來自網(wǎng)絡(luò)

2.服務(wù)端發(fā)現(xiàn) - 客戶端/API網(wǎng)關(guān)把請求發(fā)送到已知位置信息的組件(比如負(fù)載均衡器)。組件去訪問注冊中心,找到微服務(wù)的位置信息。(服務(wù)的發(fā)現(xiàn)邏輯對客戶端是透明的。客戶只需簡單的向load balancer發(fā)送請求就可以了)

圖片來自網(wǎng)絡(luò)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容