Spring Cloud - Eureka
-
服務註冊: 服務單元向服務註冊中心登記自己提供的服務,註冊中心按服務名分類組織服務清單
-
服務發現: 服務調用方向服務註冊中心諮詢服務,獲取該服務的註冊清單,根據本身負載策略選擇服務節點
Eureka Server
高可用、強一致性、集羣式、單片故障,自我保護模式
-
IP 地址形式註冊
eureka: server: enable-self-preservation: true #自我保護 eviction-interval-timer-in-ms: 10000 #健康檢查 10s instance: #hostname: eureka-register-1 prefer-ip-address: true # ip地址形式註冊 ip-address: 192.168.0.1 instance-id: ${eureka.instance.ip-address}:${server.port} client: registerWithEureka: true # 服務註冊 (eureka相互註冊) fetchRegistry: true # 服務發現 (獲取註冊表信息) serviceUrl: defaultZone: http://192.168.0.1:8761/eureka/
-
自我保護:統計心跳失敗比例低於限定範圍(15分鐘內 85%) 的註冊信息,保護起來,延遲過期
-
集羣式 相互註冊,服務同步
-
註冊中心 雙層Map 結構存儲註冊清單 第一層 key = service-name; 第二層 key = instanceid
private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry = new ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>();
Eureka Client
週期性心跳 維持 註冊中心中註冊服務信息且週期性續約,並將註冊清單緩存到本地進行週期性刷新;
DiscoveryClient 啓動後,會啓動3個定時任務 :服務註冊、服務續約、服務發現
-
IP地址形式註冊
eureka: client: serviceUrl: defaultZone: http://192.168.0.1:8761/eureka/ instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 10 #health-check-url-path: /actuator/health #健康監測 prefer-ip-address: true instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
-
服務續約 (renewal)- 服務單元向註冊中心續約自身服務
eureka: instance: lease-renewal-interval-in-seconds: 30 #續約任務的間隔時間 lease-expiration-duration-in-seconds: 90 #服務失效剔除時間
-
服務獲取 - 服務單元緩存清單更新
eureka: client: registry-fetch-interval-seconds:30