一、核心工作流程
二、核心組件解析
1. 自動配置引擎
- 入口:@EnableEurekaServer 引入 EurekaServerMarkerConfiguration,創建標記Bean Marker
- 觸發條件:EurekaServerAutoConfiguration 檢測到 Marker 存在時激活
- 關鍵Bean初始化:
@Bean
public PeerAwareInstanceRegistry peerAwareInstanceRegistry() // 注冊表存儲
@Bean
public EurekaServerBootstrap eurekaServerBootstrap() // 啟動引導
@Bean
public PeerEurekaNodes peerEurekaNodes() // 集群節點管理
2. 注冊表管理(InstanceRegistry)
- 數據結構:雙層 ConcurrentHashMap
Map<String, Map<String, Lease<InstanceInfo>>> registry = new ConcurrentHashMap<>();
// 外層Key: appName (如USER-SERVICE)
// 內層Key: instanceId (如host:port)
- 寫操作(注冊/心跳/下線):
- 獲取 寫鎖 (lock.writeLock().lock())
- 更新后觸發 集群同步事件 (replicateToPeers())
3. 集群同步(PeerEurekaNodes)
- 同步機制:基于 HTTP Batch Replication 的異步批處理
4. 自我保護機制(Self-Preservation)
- 觸發條件:心跳丟失比例 > 閾值(默認85%)
- 實現邏輯:
if (expectedRenews > minRenewsThreshold) {preserve = true; // 進入保護模式
}
- 保護模式行為:
- 停止剔除過期實例
- 客戶端仍可注冊新實例
三、請求處理鏈路(以服務注冊為例)
四、關鍵特性實現
1、多級緩存優化
2、增量抓取(Delta)
3、租約清理(Eviction)
- 定時任務掃描過期實例(默認60s)
- 優化建議:
eureka:server:eviction-interval-timer-in-ms: 3000 # 縮短至3秒