服務(wù)治理機(jī)制
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),珙縣企業(yè)網(wǎng)站建設(shè),珙縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,珙縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,珙縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。我們來(lái)進(jìn)一步了解一下Eureka 基礎(chǔ)架構(gòu)中各個(gè)元素的一些通信行為, 以此來(lái)理解基于Eureka 實(shí)現(xiàn)的服務(wù)治理體系是如何運(yùn)作起來(lái)的。以下圖為例, 其中有這樣幾個(gè)重要元素:

? "服務(wù)注冊(cè)中心-1" 和“ 服務(wù)注冊(cè)中心-2", 它們互相注冊(cè)組成了高可用集群。
? "服務(wù)提供者” 啟動(dòng)了兩個(gè)實(shí)例, 一個(gè)注冊(cè)到“ 服務(wù)注冊(cè)中心-1" 上, 另外一個(gè)注冊(cè)到“ 服務(wù)注冊(cè)中心-2" 上。
? 還有兩個(gè)“ 服務(wù)消費(fèi)者“, 它們也都分別只指向了一個(gè)注冊(cè)中心。
一、服務(wù)提供者
1.服務(wù)注冊(cè)
“服務(wù)提供者” 在啟動(dòng)的時(shí)候會(huì)通過(guò)發(fā)送REST請(qǐng)求的方式將自己注冊(cè)到Eureka Server上, 同時(shí)帶上了自身服務(wù)的一些元數(shù)據(jù)信息。Eureka Server接收到這個(gè)REST請(qǐng)求之后,將元數(shù)據(jù)信息存儲(chǔ)在一個(gè)雙層結(jié)構(gòu)Map中, 其中第一層的key是服務(wù)名, 第二層的key是具體服務(wù)的實(shí)例名。(我們可以回想一下之前在實(shí)現(xiàn)Ribbon負(fù)載均衡的例子中, Eureka信息面板中一個(gè)服務(wù)有多個(gè)實(shí)例的清況, 這些內(nèi)容就是以這樣的雙層Map形式存儲(chǔ)的。)
在服務(wù)注冊(cè)時(shí), 需要確認(rèn)一下eureka.cli ent.register-with-eureka=true參數(shù)是否正確, 該值默認(rèn)為true。若設(shè)置為false將不會(huì)啟動(dòng)注冊(cè)操作。
2.服務(wù)同步
如架構(gòu)圖中所示, 這里的兩個(gè)服務(wù)提供者分別注冊(cè)到了兩個(gè)不同的服務(wù)注冊(cè)中心上,也就是說(shuō), 它們的信息分別被兩個(gè)服務(wù)注冊(cè)中心所維護(hù)。此時(shí), 由于服務(wù)注冊(cè)中心之間因互相注冊(cè)為服務(wù), 當(dāng)服務(wù)提供者發(fā)送注冊(cè)請(qǐng)求到一個(gè)服務(wù)注冊(cè)中心時(shí), 它會(huì)將該請(qǐng)求轉(zhuǎn)發(fā)給集群中相連的其他注冊(cè)中心, 從而實(shí)現(xiàn)注冊(cè)中心之間的服務(wù)同步。通過(guò)服務(wù)同步,兩個(gè)服務(wù)提供者的服務(wù)信息就可以通過(guò)這兩臺(tái)服務(wù)注冊(cè)中心中的任意一臺(tái)獲取到。
3.服務(wù)續(xù)約
在注冊(cè)完服務(wù)之后,服務(wù)提供者會(huì)維護(hù)一個(gè)心跳用來(lái)持續(xù)告訴EurekaServer: "我還活著”, 以防止Eureka Server 的“ 剔除任務(wù)” 將該服務(wù)實(shí)例從服務(wù)列表中排除出去, 我們稱該操作為服務(wù)續(xù)約(Renew)。
關(guān)于服務(wù)續(xù)約有兩個(gè)重要屬性,我們可以關(guān)注并根據(jù)需要來(lái)進(jìn)行調(diào)整:
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
eureka.instance.lease-renewal-interval-in-seconds 參數(shù)用于定義服務(wù)續(xù)約任務(wù)的調(diào)用間隔時(shí)間,默認(rèn)為30秒。
eureka.instance.lease-expiration-duration-in-seconds參數(shù)用于定義服務(wù)失效的時(shí)間,默認(rèn)為90秒。
二、服務(wù)消費(fèi)者
1.獲取服務(wù)
到這里, 在服務(wù)注冊(cè)中心已經(jīng)注冊(cè)了一個(gè)服務(wù), 并且該服務(wù)有兩個(gè)實(shí)例。當(dāng)我們啟動(dòng)服務(wù)消費(fèi)者的時(shí)候, 它會(huì)發(fā)送一個(gè)REST請(qǐng)求給服務(wù)注冊(cè)中心,來(lái)獲取上面注冊(cè)的服務(wù)清單。為了性能考慮, Eureka Server會(huì)維護(hù)一份只讀的服務(wù)清單來(lái)返回給客戶端,同時(shí)該緩存清單會(huì)每隔30秒更新一次。
獲取服務(wù)是服務(wù)消費(fèi)者的基礎(chǔ),所以必須確保eureka.client.fetch-registry=true參數(shù)沒(méi)有被修改成false, 該值默認(rèn)為true。若希望修改緩存清單的更新時(shí)間,可以通過(guò)eureka.client.registry-fetch-interval-seconds=30參數(shù)進(jìn)行修改,該參數(shù)默認(rèn)值為30, 單位為秒。
2.服務(wù)調(diào)用
服務(wù)消費(fèi)者在獲取服務(wù)清單后,通過(guò)服務(wù)名可以獲得具體提供服務(wù)的實(shí)例名和該實(shí)例的元數(shù)據(jù)信息。因?yàn)橛羞@些服務(wù)實(shí)例的詳細(xì)信息, 所以客戶端可以根據(jù)自己的需要決定具體調(diào)用哪個(gè)實(shí)例,在ribbon中會(huì)默認(rèn)采用輪詢的方式進(jìn)行調(diào)用,從而實(shí)現(xiàn)客戶端的負(fù)載均衡。
對(duì)于訪問(wèn)實(shí)例的選擇,Eureka中有Region和Zone的概念, 一個(gè)Region中可以包含多個(gè)Zone, 每個(gè)服務(wù)客戶端需要被注冊(cè)到一個(gè)Zone中, 所以每個(gè)客戶端對(duì)應(yīng)一個(gè)Region和一個(gè)Zone。在進(jìn)行服務(wù)調(diào)用的時(shí)候, 優(yōu)先訪問(wèn)同處一個(gè)Zone 中的服務(wù)提供方, 若訪問(wèn)不到,就訪問(wèn)其他的Zone。
3.服務(wù)下線
在系統(tǒng)運(yùn)行過(guò)程中必然會(huì)面臨關(guān)閉或重啟服務(wù)的某個(gè)實(shí)例的情況, 在服務(wù)關(guān)閉期間,我們自然不希望客戶端會(huì)繼續(xù)調(diào)用關(guān)閉了的實(shí)例。所以在客戶端程序中, 當(dāng)服務(wù)實(shí)例進(jìn)行正常的關(guān)閉操作時(shí), 它會(huì)觸發(fā)一個(gè)服務(wù)下線的REST請(qǐng)求給Eureka Server, 告訴服務(wù)注冊(cè)中心:“我要下線了”。服務(wù)端在接收到請(qǐng)求之后, 將該服務(wù)狀態(tài)置為下線(DOWN), 并把該下線事件傳播出去。
三、服務(wù)注冊(cè)中心
1.失效剔除
有些時(shí)候, 我們的服務(wù)實(shí)例并不一定會(huì)正常下線, 可能由于內(nèi)存溢出、網(wǎng)絡(luò)故障等原因使得服務(wù)不能正常工作, 而服務(wù)注冊(cè)中心并未收到“服務(wù)下線” 的請(qǐng)求。為了從服務(wù)列表中將這些無(wú)法提供服務(wù)的實(shí)例剔除, Eureka Server在啟動(dòng)的時(shí)候會(huì)創(chuàng)建一個(gè)定時(shí)任務(wù),默認(rèn)每隔一段時(shí)間(默認(rèn)為60秒) 將當(dāng)前清單中超時(shí)(默認(rèn)為90秒)沒(méi)有續(xù)約的服務(wù)剔除出去。
2.自我保護(hù)
當(dāng)我們?cè)诒镜卣{(diào)試基于Eureka的程序時(shí), 基本上都會(huì)碰到這樣一個(gè)問(wèn)題, 在服務(wù)注冊(cè)中心的信息面板中出現(xiàn)類似下面的紅色警告信息:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.RENEWALS ARE LESSER TH邸THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPI邸D JUST TO BE SAFE.
實(shí)際上, 該警告就是觸發(fā)了EurekaServer的自我保護(hù)機(jī)制。之前我們介紹過(guò), 服務(wù)注冊(cè)到EurekaServer之后,會(huì)維護(hù)一個(gè)心跳連接,告訴EurekaServer自己還活著。EurekaServer在運(yùn)行期間,會(huì)統(tǒng)計(jì)心跳失敗的比例在15分鐘之內(nèi)是否低于85%, 如果出現(xiàn)低于的情況(在單機(jī)調(diào)試的時(shí)候很容易滿足, 實(shí)際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致), Eureka Server會(huì)將當(dāng)前的實(shí)例注冊(cè)信息保護(hù)起來(lái), 讓這些實(shí)例不會(huì)過(guò)期, 盡可能保護(hù)這些注冊(cè)信息。但是, 在這段保護(hù)期間內(nèi)實(shí)例若出現(xiàn)問(wèn)題, 那么客戶端很容易拿到實(shí)際已經(jīng)不存在的服務(wù)實(shí)例, 會(huì)出現(xiàn)調(diào)用失敗的清況, 所以客戶端必須要有容錯(cuò)機(jī)制, 比如可以使用請(qǐng)求重試、斷路器等機(jī)制。
由于本地調(diào)試很容易觸發(fā)注冊(cè)中心的保護(hù)機(jī)制, 這會(huì)使得注冊(cè)中心維護(hù)的服務(wù)實(shí)例不那么準(zhǔn)確。所以, 我們?cè)诒镜剡M(jìn)行開(kāi)發(fā)的時(shí)候, 可以使用eureka.server.enableself-preservation=false 參數(shù)來(lái)關(guān)閉保護(hù)機(jī)制, 以確保注冊(cè)中心可以將不可用的實(shí)例正確剔除。
Eureka常用配置
1.Eureka服務(wù)監(jiān)控
添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
注意:服務(wù)端已經(jīng)存在該依賴,可以不用添加。
# info自定義 info.build.name=@project.name@ info.build.description=@project.description@ info.build.groupId=@project.groupId@ info.build.artifact=@project.artifactId@ info.build.version=@project.version@ # 狀態(tài)頁(yè)面自定義訪問(wèn)鏈接 eureka.instance.status-page-url-path=/info

注意:
1、 服務(wù)監(jiān)控依賴于 spring-boot-starter-actuator 這個(gè) jar
2、 注意 management.context-path 的定義
3、 注意 server.servlet-path 的定義
4、 可以直接定義 eureka.instance.status-page-url=http://www.roncoo.com,這個(gè)優(yōu)先級(jí)高
2.Eureka客戶端的常用配置
# server
server.port=8888
# spring
spring.application.name=spring-cloud-consumer
# eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#自定義訪問(wèn)路徑
eureka.instance.status-page-url-path=/info
#自定義實(shí)例ID
eureka.instance.instanceId=${spring.application.name}:${random.value}
#顯示IP地址
eureka.instance.prefer-ip-address=true
#設(shè)置拉取服務(wù)注冊(cè)信息時(shí)間,默認(rèn)60s
eureka.client.registry-fetch-interval-seconds=30
#指定續(xù)約更新頻率,默認(rèn)是30s
eureka.instance.lease-renewal-interval-in-seconds=15
#設(shè)置過(guò)期剔除時(shí)間,默認(rèn)90s
eureka.instance.lease-expiration-duration-in-seconds=453.Eureka服務(wù)端的常用配置
# server (eureka 默認(rèn)端口為:8761)
server.port=8761
# spring
spring.application.name=spring-cloud-server
# eureka
# 是否注冊(cè)到eureka
eureka.client.register-with-eureka=false
# 是否從eureka獲取注冊(cè)信息
eureka.client.fetch-registry=false
# eureka服務(wù)器的地址(注意:地址最后面的 /eureka/ 這個(gè)是固定值)
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
# info自定義,讀取pom文件中的內(nèi)容
info.build.name=@project.name@
info.build.description=@project.description@
info.build.groupId=@project.groupId@
info.build.artifact=@project.artifactId@
info.build.version=@project.version@
# 指定環(huán)境
eureka.environment=dev
#指定數(shù)據(jù)中心
eureka.datacenter=roncoo
# 關(guān)閉自我保護(hù)模式
eureka.server.enable-self-preservation=false
#設(shè)置清理無(wú)效節(jié)點(diǎn)的時(shí)間間隔,默認(rèn)60000,即是60s
eureka.server.eviction-interval-timer-in-ms=5000Eureka服務(wù)認(rèn)證
1.指定注冊(cè)中心
在配置文件中指定注冊(cè)中心,主要通過(guò)eureka.client.serviceUrl 參數(shù)實(shí)現(xiàn)。該參數(shù)的定義如下所示,它的配置值存儲(chǔ)在HashMap 類型中,并且設(shè)置有一組默認(rèn)值, 默認(rèn)值的key 為defaultZone、value 為http://localhost:8761/eureka/。
private Map<String, String> serviceUrl = new HashMap<> (); this.serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL); public static丘nal String DEFAULT_URL = "http://localhost:8761" + DEFAULT_PREFIX + "/"; public static final String DEFAULT_ZONE = "defaultZone";
所以我們做了如下配置, 來(lái)將應(yīng)用注冊(cè)到對(duì)應(yīng)的Eureka 服務(wù)端中。
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
當(dāng)構(gòu)建了高可用的服務(wù)注冊(cè)中心集群時(shí), 我們可以為參數(shù)的value 值配置多個(gè)注冊(cè)中心的地址(通過(guò)逗號(hào)分隔)。比如下面的例子:
eureka.client.serviceUrl.defaultZone=http://peerl:8761/eureka/, http://peer2:8762/eureka/
另外, 為了服務(wù)注冊(cè)中心的安全考慮, 很多時(shí)候我們都會(huì)為服務(wù)注冊(cè)中心加入安全校驗(yàn)。這個(gè)時(shí)候,在配置serviceUrl 時(shí), 需要在value 值的URL 中加入相應(yīng)的安全校驗(yàn)信息, 比如http://<username>:<password>@localhost:1111/eureka。其中,<username>為安全校驗(yàn)信息的用戶名, <password>為該用戶的密碼。
2.服務(wù)認(rèn)證
1、服務(wù)端添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2、服務(wù)端添加配置
# 服務(wù)認(rèn)證 security.basic.enabled=true security.user.name=qb security.user.password=123456
3、修改服務(wù)端和客戶端的配置
eureka.client.serviceUrl.defaultZone=http://qb:123456@localhost:8761/eureka/
建議:能在內(nèi)網(wǎng)的,盡量在內(nèi)網(wǎng),這樣既可以保障安全,也能降低復(fù)雜度。
Eureka高可用集群配置

說(shuō)明:?jiǎn)?dòng)3個(gè)注冊(cè)中心,我們將cloudtest1、cloudtest2、cloudtest3 各自都將serviceUrl 指向另外兩個(gè)節(jié)點(diǎn),即是 cloudtest1、cloudtest2、cloudtest3 是兩兩互相注冊(cè)的。
步驟:
1、設(shè)置 hosts:C:\Windows\System32\drivers\etc\hosts;
# Cluster hosts 127.0.0.1 cloudtest1 127.0.0.1 cloudtest2 127.0.0.1 cloudtest3
2、修改配置
每個(gè)服務(wù)都需要相應(yīng)的修改,服務(wù)-01
spring.application.name=spring-cloud-server-01 eureka.instance.hostname=cloudtest1 eureka.client.serviceUrl.defaultZone=http://qb:123456@cloudtest2:8762/eureka/,http://qb:123456@cloudtest3:8763/eureka/
同理:服務(wù)-02,服務(wù)-03 都做相對(duì)應(yīng)的修改
3、配置修改
#這里是為了測(cè)試,生產(chǎn)應(yīng)該保持默認(rèn)值:30s eureka.instance.lease-renewal-interval-in-seconds=5 #剔除失效服務(wù)的檢測(cè)時(shí)間,默認(rèn)值:60000,即 60s eureka.server.eviction-interval-timer-in-ms=5000
聲明:"服務(wù)治理機(jī)制"這部分是截取《springcloud微服務(wù)實(shí)戰(zhàn)(翟永超)》,我本人覺(jué)得他講解的很到位,也很容易理解;至于常用配置、服務(wù)認(rèn)證、高可用注冊(cè)是經(jīng)過(guò)實(shí)踐總結(jié)的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站名稱:springcloud——Eureka深入-創(chuàng)新互聯(lián)
分享URL:http://chinadenli.net/article28/cegpcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、企業(yè)網(wǎng)站制作、用戶體驗(yàn)、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容