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