- 極簡(jiǎn)Spring Cloud實(shí)戰(zhàn)
- 胡勁寒
- 1261字
- 2019-10-10 18:57:58
第2章 服務(wù)發(fā)現(xiàn):Eureka
服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)中的一個(gè)重要概念。試想當(dāng)系統(tǒng)服務(wù)之間的依賴越來(lái)越多,A服務(wù)可能需要調(diào)用B、C、D等服務(wù),同時(shí)被調(diào)用方也就是服務(wù)提供方可能為了保證自身高可用,還需要同時(shí)以集群的模式部署B(yǎng)1、B2、C1、C2等,想象一下A的配置文件該有多復(fù)雜。將服務(wù)提供方的地址寫(xiě)死在配置文件中,那么服務(wù)提供方如果橫向擴(kuò)展增加實(shí)例,是不是還需要修改作為服務(wù)調(diào)用方的A的配置文件?這時(shí)我們就迫切需要一種服務(wù)發(fā)現(xiàn)的機(jī)制。所有的服務(wù)提供方啟動(dòng)時(shí)向注冊(cè)中心報(bào)告自身的信息,包括自己的地址、端口,以及提供哪些服務(wù)等相關(guān)信息。當(dāng)服務(wù)調(diào)用方需要調(diào)用服務(wù)時(shí),只需要問(wèn)注冊(cè)中心是誰(shuí)提供了相關(guān)的服務(wù),注冊(cè)中心返回哪些提供方提供了這些服務(wù),調(diào)用方就可以自己根據(jù)注冊(cè)中心返回的信息去請(qǐng)求了。Eureka就提供了這樣一種能力,同時(shí)自身作為注冊(cè)中心的同時(shí)也提供了高可用的支持,支持集群部署時(shí)各個(gè)節(jié)點(diǎn)之間的注冊(cè)數(shù)據(jù)同步復(fù)制。
Eureka是Netflix開(kāi)源的一款提供服務(wù)注冊(cè)和發(fā)現(xiàn)的產(chǎn)品,提供了完整的服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)實(shí)現(xiàn),也是Spring Cloud體系中最重要、最核心的組件之一。
通俗講,Eureka就是一個(gè)服務(wù)中心,將所有可以提供的服務(wù)都注冊(cè)到它這里來(lái)管理,其他各調(diào)用者需要的時(shí)候去注冊(cè)中心獲取,然后服務(wù)調(diào)用方再向服務(wù)提供方發(fā)起調(diào)用,避免了服務(wù)之間的直接調(diào)用,方便后續(xù)的水平擴(kuò)展、故障轉(zhuǎn)移等。
所以,服務(wù)中心這么重要的組件一旦宕機(jī)將會(huì)影響全部服務(wù),因此需要搭建Eureka集群來(lái)保持高可用性,建議生產(chǎn)中最少配備兩臺(tái)。隨著系統(tǒng)流量的不斷增加,需要根據(jù)情況來(lái)擴(kuò)展某個(gè)服務(wù),Eureka內(nèi)部提供均衡負(fù)載的功能,只需要增加相應(yīng)的服務(wù)端實(shí)例即可。那么在系統(tǒng)的運(yùn)行期間某個(gè)實(shí)例宕機(jī)怎么辦?Eureka提供心跳檢測(cè)機(jī)制,如果某個(gè)實(shí)例在規(guī)定的時(shí)間內(nèi)沒(méi)有進(jìn)行通信則會(huì)被自動(dòng)剔除掉,避免了某個(gè)實(shí)例掛掉而影響服務(wù)。
因此,使用Eureka就自動(dòng)具有了注冊(cè)中心、負(fù)載均衡、故障轉(zhuǎn)移的功能。
它主要包括兩個(gè)組件。
? Eureka Client:一個(gè)Java客戶端,用于簡(jiǎn)化與Eureka Server的交互(通常就是微服務(wù)中的客戶端和服務(wù)端)。
? Eureka Server:提供服務(wù)注冊(cè)和發(fā)現(xiàn)的能力(通常就是微服務(wù)中的注冊(cè)中心)。
各個(gè)微服務(wù)啟動(dòng)時(shí),會(huì)通過(guò)Eureka Client向Eureka Server注冊(cè)自己,Eureka Server會(huì)存儲(chǔ)該服務(wù)的信息,如圖2-1所示。

圖2-1 服務(wù)注冊(cè)與獲取的交互流程
也就是說(shuō),每個(gè)微服務(wù)的客戶端和服務(wù)端都會(huì)注冊(cè)到Eureka Server,這就衍生出了微服務(wù)相互識(shí)別的話題。
? 同步:每個(gè)Eureka Server同時(shí)是Eureka Client(邏輯上的),多個(gè)Eureka Server之間通過(guò)復(fù)制的方式完成服務(wù)注冊(cè)表的同步,從而實(shí)現(xiàn)Eureka的高可用。
? 識(shí)別:Eureka Client會(huì)在本地緩存Eureka Server中的信息。
即使所有Eureka Server節(jié)點(diǎn)都宕掉,服務(wù)消費(fèi)方仍可使用本地緩存中的信息找到服務(wù)提供方。
? 續(xù)約:微服務(wù)會(huì)周期性(默認(rèn)30s)地向Eureka Server發(fā)送心跳以續(xù)約(Renew)自己的信息(類似于heartbeat機(jī)制)。
? 續(xù)期:Eureka Server會(huì)定期(默認(rèn)60s)執(zhí)行一次失效服務(wù)檢測(cè)功能,它會(huì)檢查超過(guò)一定時(shí)間(默認(rèn)90s)沒(méi)有續(xù)約的微服務(wù),發(fā)現(xiàn)則會(huì)注銷該微服務(wù)節(jié)點(diǎn)。
當(dāng)一個(gè)注冊(cè)器客戶端通過(guò)Eureka進(jìn)行注冊(cè)時(shí),它會(huì)帶上一些描述自己情況的元數(shù)據(jù),如地址、端口、健康指示器地址、主頁(yè)等。Eureka會(huì)接收每一個(gè)服務(wù)實(shí)例發(fā)送的心跳包。如果心跳包超過(guò)配置的間隔時(shí)間,則這個(gè)服務(wù)實(shí)例就會(huì)被移除。
- Intel FPGA/CPLD設(shè)計(jì)(基礎(chǔ)篇)
- 電腦常見(jiàn)故障現(xiàn)場(chǎng)處理
- 電腦維護(hù)365問(wèn)
- Learning Game Physics with Bullet Physics and OpenGL
- VCD、DVD原理與維修
- 分布式系統(tǒng)與一致性
- Practical Machine Learning with R
- 單片機(jī)技術(shù)及應(yīng)用
- Hands-On Deep Learning for Images with TensorFlow
- 筆記本電腦芯片級(jí)維修從入門到精通(圖解版)
- 單片機(jī)原理與技能訓(xùn)練
- Istio實(shí)戰(zhàn)指南
- Angular 6 by Example
- Deep Learning with Keras
- Arduino案例實(shí)戰(zhàn)(卷Ⅳ)