springCloud五大组件--Eureka
Spring Cloud 支持了 Zookeeper、Consul 和 Eureka,官方推薦 Eureka。
C(一致性)A(高可用)P(分區(qū)容錯(cuò))理論,Eureka的選擇就是放棄C,選擇AP。
Eureka 采用純 Java 實(shí)現(xiàn),除實(shí)現(xiàn)了注冊(cè)中心基本的服務(wù)注冊(cè)和發(fā)現(xiàn)之外,極大的滿足注冊(cè)中心的可用性,即使只有一臺(tái)服務(wù)可用,也可以保證注冊(cè)中心的可用性。
- ZooKeeper的設(shè)計(jì)原則是 CP,即強(qiáng)一致性和分區(qū)容錯(cuò)性。他保證數(shù)據(jù)的強(qiáng)一致性,但舍棄了可用性,如果出現(xiàn)網(wǎng)絡(luò)問題可能會(huì)影響 ZK 的選舉,導(dǎo)致 ZK 注冊(cè)中心的不可用。
- Eureka 的設(shè)計(jì)原則是 AP,即可用性和分區(qū)容錯(cuò)性。他保證了注冊(cè)中心的可用性,但舍棄了數(shù)據(jù)一致性,各節(jié)點(diǎn)上的數(shù)據(jù)有可能是不一致的(會(huì)最終一致)。
服務(wù)提供者和服務(wù)的消費(fèi)者,本質(zhì)上也是 Eureka Client 角色。整體上可以分為兩個(gè)主體:Eureka Server 和 Eureka Client。
Eureka Server:注冊(cè)中心服務(wù)端
注冊(cè)中心服務(wù)端主要對(duì)外提供了三個(gè)功能:
服務(wù)注冊(cè)
服務(wù)提供者啟動(dòng)時(shí),會(huì)通過 Eureka Client 向 Eureka Server 注冊(cè)信息,Eureka Server 會(huì)存儲(chǔ)該服務(wù)的信息,Eureka Server 內(nèi)部有二層緩存機(jī)制來維護(hù)整個(gè)注冊(cè)表
提供注冊(cè)表
服務(wù)消費(fèi)者在調(diào)用服務(wù)時(shí),如果 Eureka Client 沒有緩存注冊(cè)表的話,會(huì)從 Eureka Server 獲取最新的注冊(cè)表
同步狀態(tài)
Eureka Client 通過注冊(cè)、心跳機(jī)制和 Eureka Server 同步當(dāng)前客戶端的狀態(tài)。
Eureka Client:注冊(cè)中心客戶端
Eureka Client 是一個(gè) Java 客戶端,用于簡(jiǎn)化與 Eureka Server 的交互。Eureka Client 會(huì)拉取、更新和緩存 Eureka Server 中的信息。因此當(dāng)所有的 Eureka Server 節(jié)點(diǎn)都宕掉,服務(wù)消費(fèi)者依然可以使用緩存中的信息找到服務(wù)提供者,但是當(dāng)服務(wù)有更改的時(shí)候會(huì)出現(xiàn)信息不一致。
Eurka 工作流程
1、Eureka Server 啟動(dòng)成功,等待服務(wù)端注冊(cè)。在啟動(dòng)過程中如果配置了集群,集群之間定時(shí)通過 Replicate 同步注冊(cè)表,每個(gè) Eureka Server 都存在獨(dú)立完整的服務(wù)注冊(cè)表信息
2、Eureka Client 啟動(dòng)時(shí)根據(jù)配置的 Eureka Server 地址去注冊(cè)中心注冊(cè)服務(wù)
3、Eureka Client 會(huì)每 30s 向 Eureka Server 發(fā)送一次心跳請(qǐng)求,證明客戶端服務(wù)正常
4、當(dāng) Eureka Server 90s 內(nèi)沒有收到 Eureka Client 的心跳,注冊(cè)中心則認(rèn)為該節(jié)點(diǎn)失效,會(huì)注銷該實(shí)例
5、單位時(shí)間內(nèi) Eureka Server 統(tǒng)計(jì)到有大量的 Eureka Client 沒有上送心跳,則認(rèn)為可能為網(wǎng)絡(luò)異常,進(jìn)入自我保護(hù)機(jī)制,不再剔除沒有上送心跳的客戶端
6、當(dāng) Eureka Client 心跳請(qǐng)求恢復(fù)正常之后,Eureka Server 自動(dòng)退出自我保護(hù)模式
7、Eureka Client 定時(shí)全量或者增量從注冊(cè)中心獲取服務(wù)注冊(cè)表,并且將獲取到的信息緩存到本地
8、服務(wù)調(diào)用時(shí),Eureka Client 會(huì)先從本地緩存找尋調(diào)取的服務(wù)。如果獲取不到,先從注冊(cè)中心刷新注冊(cè)表,再同步到本地緩存
9、Eureka Client 獲取到目標(biāo)服務(wù)器信息,發(fā)起服務(wù)調(diào)用
10、Eureka Client 程序關(guān)閉時(shí)向 Eureka Server 發(fā)送取消請(qǐng)求,Eureka Server 將實(shí)例從注冊(cè)表中刪除
總結(jié)
以上是生活随笔為你收集整理的springCloud五大组件--Eureka的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可转债值得投资吗?可转债的最大的风险是什
- 下一篇: REVERSE-COMPETITION-