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