這篇文章主要介紹“eureka服務(wù)治理的概念和用法是什么”,在日常操作中,相信很多人在eureka服務(wù)治理的概念和用法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”eureka服務(wù)治理的概念和用法是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為渾源企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,渾源網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
[TOC]
分布式是現(xiàn)在互聯(lián)網(wǎng)架構(gòu)的首選。在分布式中我們會(huì)有三方理論簡(jiǎn)稱CAP
簡(jiǎn)稱 | 全稱 | 解釋 |
---|---|---|
C | Consistency | 數(shù)據(jù)一致性 |
A | Availability | 可用性,性能 |
P | Partition tolerance | 分區(qū)容錯(cuò)性 |
今天我們就來看看分布式中關(guān)于服務(wù)治理這塊的服務(wù)
在多個(gè)服務(wù)之間相互調(diào)用的時(shí)候比較零散,管理起來比較麻煩。當(dāng)被調(diào)用者有所改動(dòng)可能都會(huì)牽扯到調(diào)用者的修改。所以服務(wù)治理應(yīng)運(yùn)而生。
spring cloud的Eureka實(shí)現(xiàn)了服務(wù)注冊(cè)、服務(wù)調(diào)用、負(fù)載均衡、容錯(cuò)。這也是服務(wù)治理模塊通用功能。
服務(wù)注冊(cè)和服務(wù)調(diào)用在eureka看來都是客戶端。eureka服務(wù)是服務(wù)端。所以他是一種典型的CS架構(gòu)。eureka客戶端需要與eureka服務(wù)保持心跳機(jī)制。這樣eureka服務(wù)才會(huì)認(rèn)為客戶端沒有宕機(jī)。
上述的架構(gòu)圖可以清楚的看出,eureka服務(wù)端可集群化,服務(wù)提供者可以集群化。客戶端就沒必要集群化。就算集群化對(duì)于eureka服務(wù)來說也是單機(jī)的consumer。
service provider啟動(dòng)時(shí)會(huì)將自己服務(wù)的信息封裝后注冊(cè)到eureka注冊(cè)中心上。service consumer已provider注冊(cè)名去注冊(cè)中心尋找到真實(shí)地址并進(jìn)行調(diào)用。
針對(duì)service provider的管理對(duì)于service consumer來說不需要知道service provider的具體信息。只需要知道service provider的注冊(cè)名就行了。在我們集群化后也不用擔(dān)心provider我們具體的調(diào)用地址。負(fù)載均衡也是eureka幫我分配了。我們客戶端只負(fù)責(zé)接口的調(diào)用。
這里我們不做spring其他的解釋,詳細(xì)請(qǐng)看git分支詳細(xì)代碼
點(diǎn)我下載源碼
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
在我們新建的項(xiàng)目中pom文件中新增如上gva。就會(huì)將eureka服務(wù)端功能注入。下面我們只需要添加一些配置啟動(dòng)就行了。
添加依賴后我們?cè)趕pringboot項(xiàng)目中yml中添加如下配置
eureka: instance: hostname: localhost client: register-with-eureka: false #表示該模塊作為eureka服務(wù),自己是不需要想自己注冊(cè)的,注冊(cè)了只是徒增煩惱 fetch-registry: false # 表示自己就是注冊(cè)中心。自己是管理者不是被管理者。 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
最后我們?cè)趕piringboot啟動(dòng)類上開啟eurekaserver就行了。@EnableEurekaServer
能夠訪問說明我們的eureka服務(wù)正常啟動(dòng)?,F(xiàn)在沒有客戶端注冊(cè)上來。所以現(xiàn)在看到DS Replicas列表是空的。
上面我們已經(jīng)單機(jī)啟動(dòng)了eureka服務(wù)。下面我們看看服務(wù)注冊(cè)是否可以。我們已之前payment模塊為例。
pom中添加client坐標(biāo)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
yml中填入地址
eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka
主啟動(dòng)類上添加注解@EnableEurekaClient
現(xiàn)在我們多開幾個(gè)payment進(jìn)行注冊(cè)
因?yàn)槲覀兪窃趇dea中開發(fā)的。還沒有打成jar包。也是為了方便調(diào)試這里通過idea直接復(fù)制的payment項(xiàng)目
現(xiàn)在我們看看我們本地idea啟動(dòng)項(xiàng)目的情況 , payment已經(jīng)有兩個(gè)了分別是8001,8002
現(xiàn)在我們看到eureka服務(wù)上也出現(xiàn)了8001,8002了
還記得我們的feature/cloud-pre上order模塊是如何調(diào)用payment的嗎。是的我們通過resetTemplate進(jìn)行http方式調(diào)用的?,F(xiàn)在我們還是通過他進(jìn)行調(diào)用只不過調(diào)用地址是payment注冊(cè)在eureka上的服務(wù)名。
這里客戶端如何注冊(cè)和payment配置一樣的。因?yàn)殡m然是order調(diào)用payment,但是對(duì)于eureka來說payment和order都是客戶端。所以配置都是一樣的。
現(xiàn)在在單機(jī)的eureka上我們看到了單機(jī)的order服務(wù)和集群的payment服務(wù)。下面我們order調(diào)用payment的地方做如下修改
只是調(diào)用跟地址進(jìn)行了修改。當(dāng)然前提是restTemplate支持了負(fù)載均衡。
下面結(jié)果如何讀者可以自行測(cè)試了。http://localhost/order/getpayment/123
針對(duì)這個(gè)接口調(diào)用多次。會(huì)發(fā)現(xiàn)返回結(jié)果里的服務(wù)端口會(huì)不斷的8001,8002切換。因?yàn)閞estTemplate默認(rèn)是輪詢的。而我們這里payment提供了兩個(gè)服務(wù)。到這里我們就實(shí)現(xiàn)了eureka單機(jī)版的服務(wù)注冊(cè)及調(diào)用
上面是單機(jī)的eurake。下面我們看看eurake集群如何配置。對(duì)于eureka客戶端來說注冊(cè)到eureka集群上來說非常簡(jiǎn)單。
eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka,http://www.eureka2/eureka
像上述一樣defaultZone后面直接追加eureka服務(wù)就行了。正常集群都是布置在不同機(jī)器上的。所以域名或者ip都是不同的。如果讀者在一臺(tái)機(jī)器上部署可以通過nginx將不同服務(wù)分配到不同域名下。因?yàn)樵趀ureka服務(wù)端上配置需要用到域名。
客戶端是直接追加。eureka服務(wù)端改動(dòng)也不是很多只需要將hostname配置唯一就行了。
eureka: instance: hostname: www.zxhtom1.com #eureka服務(wù)端的實(shí)例名字 client: register-with-eureka: false #表識(shí)不向注冊(cè)中心注冊(cè)自己 fetch-registry: false #表示自己就是注冊(cè)中心,職責(zé)是維護(hù)服務(wù)實(shí)例,并不需要去檢索服務(wù) service-url: defaultZone: http://eureka7002.com:7002/eureka/
所以說如果是單機(jī)部署集群,我們就需要通過nginx轉(zhuǎn)發(fā)下。這里不贅述
剛才在部署集群的時(shí)候?yàn)榱朔奖阊菔?。我們借助idea啟動(dòng)多個(gè)實(shí)例。在里面分配不同的端口。但是在部署eureka集群是就沒法搞了。因?yàn)樾枰淖兣渲梦募?nèi)容。我們可以在啟動(dòng)的時(shí)候指定外部配置文件
上面我們發(fā)現(xiàn)有兩個(gè)8002的payment。為什么會(huì)出現(xiàn)如此奇怪的問題呢。排查發(fā)現(xiàn)一開始我通過idea啟動(dòng)了8001,8002。然后我又通過引入外部配置文件的方式重新啟動(dòng)了8002。這個(gè)時(shí)候原來的8002實(shí)例其實(shí)已經(jīng)掛了。這個(gè)時(shí)候eureka會(huì)認(rèn)為出現(xiàn)50%的客戶端沒有準(zhǔn)時(shí)發(fā)送心跳。50<85 這個(gè)時(shí)候eureka認(rèn)為大批客戶端可能因?yàn)榫W(wǎng)絡(luò)波動(dòng)導(dǎo)致沒有及時(shí)回復(fù)。eureka會(huì)開啟自我保護(hù)機(jī)制。
雖然上面是個(gè)反面列子。也恰恰說明了為什么需要自我保護(hù)。加入這個(gè)時(shí)候8002在其他機(jī)器上因?yàn)榫W(wǎng)絡(luò)延遲被踢出就會(huì)出現(xiàn)冤假錯(cuò)案。所以這也解釋了為什么上述出現(xiàn)兩個(gè)8002.
自我保護(hù)的功能是默認(rèn)開啟的。eureka.server.enable-self-preservation: false
我們通過此屬性設(shè)置false就是關(guān)閉自我保護(hù)。
其實(shí)上面兩個(gè)8002是一種意外。我們無意中觸發(fā)了自我保護(hù)。
自我保護(hù)機(jī)制條件 : 最近一分鐘收到心跳數(shù)線程占總線程85%以下。
低于85%說明沒有指定活躍數(shù)進(jìn)行心跳回復(fù),所以認(rèn)為是網(wǎng)絡(luò)波動(dòng)了。
自我保護(hù)的臨界值= renews(last min)/renews(threshold)
通過計(jì)算我們知道是75% 。 如果不算上正常的8002 。 那就是50% 。 所以不管怎么樣都會(huì)觸發(fā)自我保護(hù)的。
自我保護(hù)也滿足的開篇提到的CAP原理中的A理論。eureka滿足了高可用性原則。及時(shí)客戶端真的宕機(jī)了也要留下。寧可多留也不錯(cuò)殺。這樣就會(huì)導(dǎo)致數(shù)據(jù)不一致的情況。
到此,關(guān)于“eureka服務(wù)治理的概念和用法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
分享題目:eureka服務(wù)治理的概念和用法是什么
本文來源:http://www.rwnh.cn/article6/ippoig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、域名注冊(cè)、面包屑導(dǎo)航、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)