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