您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Eureka如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Eureka如何使用”吧!
治理中心
服務(wù)注冊
服務(wù)發(fā)現(xiàn)
心跳機制
以上都可以通過 Eureka 可以實現(xiàn)
Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 組件來實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)。
在Eureka的架構(gòu)中有兩個角色:服務(wù)注冊中心 Eureka Server 和 服務(wù)客戶端 Eureka Client
Eureka注冊中心 Eureka Server
Eureka Server 作為服務(wù)注冊功能的服務(wù)器,是服務(wù)注冊中心。系統(tǒng)中的其他微服務(wù),使用 Eureka 的客戶端連接到 Eureka Server并維持心跳連接。這樣系統(tǒng)的維護(hù)人員就可以通過 Eureka Server 來監(jiān)控系統(tǒng)中各個微服務(wù)是否正常運行。
Eureka客戶端 Eureka Client
EurekaClient是一個Java客戶端,用于簡化Eureka Server的交互
在應(yīng)用啟動后,將會向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)。如果Eureka Server在多個心跳周期內(nèi)沒有接收到某個節(jié)點的心跳,EurekaServer將會從服務(wù)注冊表中把這個服務(wù)節(jié)點移除(默認(rèn)90秒)
Eureka Client會緩存服務(wù)注冊表中的信息。這種方式有一定的優(yōu)勢首先可以降低Eureka Server的壓力,其次當(dāng)所有的Eureka Server宕機,服務(wù)調(diào)用方依然可以完成調(diào)用
在Project中創(chuàng)建module
導(dǎo)入依賴
<!-- 引入SpringCloud Eureka server的依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
啟動類上加注解
配置文件
server: port: 8800 eureka: client: # eureka.client. register-with-eureka:由于該應(yīng)用為注冊中心,所以設(shè)置為false,代表不向注冊中心注冊自己 registerWithEureka: false # 不主動發(fā)現(xiàn)別人 fetchRegistry: false # 聲明注冊中心的地址 serviceUrl: defaultZone: http://localhost:8800/eureka/ #給當(dāng)前應(yīng)用起個服務(wù)名稱 不能通過路徑訪問的 這個服務(wù)名稱 在微服務(wù)中使用代表當(dāng)前服務(wù) spring: application: name: eureka-server
啟動注冊中心 訪問注冊中心的監(jiān)控頁面 http://localhost:8800
以用戶服務(wù)為例
創(chuàng)建項目
![image-20200420164741922](../07班之前SpringCloud H版本/https://gitee.com/bingqilinpeishenme/blogimg/raw/master/img/image-20200420164741922.png)
導(dǎo)入相關(guān)依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
啟動類上加注解
配置文件
server: port: 8804 #指定當(dāng)前服務(wù)的名稱 這個名稱會注冊到注冊中心 spring: application: name: cloud-user-8804 # 指定 服務(wù)注冊中心的地址 eureka: client: serviceUrl: defaultZone: http://localhost:8800/eureka
通過以上四步 就完成了一個 Eureka客戶端的搭建 直接啟動項目 通過Eureka的注冊中心可以看到
按照上述步驟,將商品服務(wù)和訂單服務(wù)改造為Eureka客戶端。
目前,大型網(wǎng)站幾乎都是分布式的,分布式系統(tǒng)的最大難點,就是各個節(jié)點的狀態(tài)如何同步。CAP 定理是這方面的基本定理,也是理解分布式系統(tǒng)的起點。
1998年,加州大學(xué)的計算機科學(xué)家 Eric Brewer 提出,分布式系統(tǒng)有三個指標(biāo)。
Consistency 一致性
Availability 可用性
Partition tolerance 分區(qū)容錯性
它們的第一個字母分別是 C、A、P。
Eric Brewer 說,這三個指標(biāo)不可能同時做到。這個結(jié)論就叫做 CAP 定理。
分區(qū)容錯性
大多數(shù)分布式系統(tǒng)都分布在多個子網(wǎng)絡(luò)。每個子網(wǎng)絡(luò)就叫做一個區(qū)(partition)。分區(qū)容錯的意思是,區(qū)間通信可能失敗。比如,一臺服務(wù)器放在中國,另一臺服務(wù)器放在美國,這就是兩個區(qū),它們之間可能無法通信。
Node1 和 Node2 是兩臺跨區(qū)的服務(wù)器。Node1 向 Node2 發(fā)送一條消息,Node2可能無法收到。系統(tǒng)設(shè)計的時候,必須考慮到這種情況。
一般來說,分區(qū)容錯無法避免,因此可以認(rèn)為 CAP 的 P 總是成立。CAP 定理告訴我們,剩下的 C 和 A 無法同時做到。
數(shù)據(jù)一致性
由于系統(tǒng)問題,Node1 的數(shù)據(jù)不能即時同步給Node2,此時如果獲取數(shù)據(jù),會獲取到不一致的數(shù)據(jù),所有為了保證分布式系統(tǒng)對外的數(shù)據(jù)一致性,選擇不返回任何數(shù)據(jù)【或者所有節(jié)點不響應(yīng)任何請求】。
可用性
要求系統(tǒng)內(nèi)的節(jié)點在接受到請求的時候能夠即時給出響應(yīng),具體來說就是:一方面需要在合理的時間內(nèi)給出響應(yīng),另一方面即便是部分節(jié)點宕機,那么其他未宕機的節(jié)點也需要能夠正常處理請求,即時返回的數(shù)據(jù)有問題。
一致性和可用性,為什么不可能同時成立?
答案很簡單,因為可能通信失敗(即出現(xiàn)分區(qū)容錯),所以,對于分布式系統(tǒng),我們只能能考慮當(dāng)發(fā)生分區(qū)錯誤時,如何選擇一致性和可用性。
需要強調(diào)的是:C 和 A 的抉擇是發(fā)生在有分區(qū)問題的時候,正常情況下系統(tǒng)就應(yīng)該有完美的數(shù)據(jù)一致性和可用性
例子:
比如,我們有個分布式系統(tǒng),由三個節(jié)點 a、b、c 組成。其中節(jié)點 a 存放了 A 表的數(shù)據(jù),b 存放了 B 表的數(shù)據(jù),c 存放了 C 表的數(shù)據(jù)。
如果有一個業(yè)務(wù),它的意圖是想往 A 表插入一條新數(shù)據(jù),在 B 表刪除一條已有數(shù)據(jù),在 C 表更新一條老數(shù)據(jù),這個分布式系統(tǒng)該怎么處理這種業(yè)務(wù)?
技術(shù)上我們對這種一個意圖想做多件事的情況往往會包裝成一個事務(wù)。當(dāng)我們包裝成一個事務(wù)以后,我們可能會通過先在 a 節(jié)點執(zhí)行,然后去 b 節(jié)點執(zhí)行,最后去 c 節(jié)點執(zhí)行,等到都成功了,才會返回成功。
但是,發(fā)生了分區(qū)以后怎么辦?當(dāng)在 a、b 節(jié)點都成功了,到 c 發(fā)現(xiàn)發(fā)生了通信故障?
此時,根據(jù) CAP 定理,你有兩個選擇,要么就直接返回一個部分成功的結(jié)果給客戶端,要么直接卡死等客戶端超時或者返回失敗給客戶端。當(dāng)返回部分成功的時候,這就是選擇了可用性(A),當(dāng)卡死或者返回失敗給客戶端的時候,就是選擇了一致性(C)。
而根據(jù)一致性和可用性的選擇不同,開源的分布式系統(tǒng)往往又被分為 CP 系統(tǒng)和 AP 系統(tǒng)。
當(dāng)一套系統(tǒng)在發(fā)生分區(qū)故障后,客戶端的任何請求都被卡死或者超時,但是,系統(tǒng)的每個節(jié)點總是會返回一致的數(shù)據(jù),則這套系統(tǒng)就是 CP 系統(tǒng),經(jīng)典的比如 Zookeeper。
如果一套系統(tǒng)發(fā)生分區(qū)故障后,客戶端依然可以訪問系統(tǒng),但是獲取的數(shù)據(jù)有的是新的數(shù)據(jù),有的還是老數(shù)據(jù),那么這套系統(tǒng)就是 AP 系統(tǒng),經(jīng)典的比如 Eureka。
很多時候一致性和可用性并不是二選一的問題,大部分的時候,系統(tǒng)設(shè)計會盡可能的實現(xiàn)兩點,在二者之間做出妥協(xié),當(dāng)強調(diào)一致性的時候,并不表示可用性是完全不可用的狀態(tài),比如,Zookeeper 只是在 master 出現(xiàn)問題的時候,才可能出現(xiàn)幾十秒的不可用狀態(tài),而別的時候,都會以各種方式保證系統(tǒng)的可用性。而強調(diào)可用性的時候,也往往會采用一些技術(shù)手段,去保證數(shù)據(jù)最終是一致的。
Eureka首頁輸出警告如圖:
默認(rèn)情況下,如果Eureka Server在一定時間內(nèi)沒有接受到服務(wù)實例的心跳,Eureka將會注銷該實例(默認(rèn)90秒).但是當(dāng)網(wǎng)絡(luò)分區(qū)發(fā)生故障時,微服務(wù)客戶端和Eureka Server 無法正常通信。以上行為可能變得特別危險了,因為微服務(wù)本身是健康的,此時不能注銷該服務(wù)實例。
Eureka通過自我保護(hù)機制來解決這個問題,當(dāng)Eureka Server在短時間丟失過多的服務(wù)實例(可能發(fā)生了網(wǎng)絡(luò)分區(qū)的故障),那么Eureka Server進(jìn)入自我保護(hù)模式,一旦進(jìn)入此模式,Eureka Server將會保護(hù)服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù)(也就是不再注銷任何的服務(wù)實例),當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,Eureka Server會自動退出自我保護(hù)模式。
綜上,自我保護(hù)模式是一種應(yīng)對網(wǎng)絡(luò)故障的安全保護(hù)措施,它的架構(gòu)哲學(xué)是寧可同時保留所有的微服務(wù),也不盲目注銷任何健康的微服務(wù),使用自我保護(hù)模式可以讓Eureka,更加健壯,穩(wěn)定。
一句話:大面積出現(xiàn)客戶端失聯(lián)的時候,Eureka 注冊中心進(jìn)入自我保護(hù)模式,不注銷任何實例
在Eureka Server中配置關(guān)閉自我保護(hù)機制
#關(guān)閉自我保護(hù)機制 默認(rèn)開啟 eureka.server.enable-self-preservation=false
如果想及時剔除失效的eureka服務(wù)除了關(guān)閉自我保護(hù)機制外,可以調(diào)低eureka的心跳值
eureka-server服務(wù)端 配置文件中我們添加如下配置 #關(guān)閉保護(hù)機制,以確保注冊中心將不可用的實例正確剔除 eureka.server.enable-self-preservation=false #(代表是5秒,單位是毫秒,清理失效服務(wù)的間隔 ) eureka.server.eviction-interval-timer-in-ms=5000
客戶端 配置文件中我們添加如下配置 # 心跳檢測檢測與續(xù)約時間 # 測試時將值設(shè)置設(shè)置小些,保證服務(wù)關(guān)閉后注冊中心能及時踢出服務(wù) # 配置說明 # lease-renewal-interval-in-seconds 每間隔10s,向服務(wù)端發(fā)送一次心跳,證明自己依然”存活“ # lease-expiration-duration-in-seconds 告訴服務(wù)端,如果我20s之內(nèi)沒有給你發(fā)心跳,就代表我“死”了,將我踢出掉。 eureka.instance.lease-renewal-interval-in-seconds=10 eureka.instance.lease-expiration-duration-in-seconds=20
注冊中心集群,防止注冊中心單機故障。
創(chuàng)建一個新的注冊中心 eureka-server-8801
創(chuàng)建項目
導(dǎo)入依賴
啟動類加注解
寫配置文件
修改注冊中心 Eureka-server-8800的配置文件
修改所有的客戶端的配置,讓客戶端能夠同時向兩個注冊中心注冊
啟動所有的客戶端和注冊中心 看看能不能正常注冊
到此,相信大家對“Eureka如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。