1、服务治理三个核心点、服务提供者、服务消费者、服务注册中心
结合Ribbon 服务治理图
image.png
服务治理时序图
image.png服务提供者功能:
1、服务注册
2、服务同步
3、服务续约
4、..
服务注册:
服务提供者在启动时候通过rest请求 、将自己注册到Eureka Server上、同时携带自身服务的一些元数据信息、
Eureka Server接收到这个rest请求后 将这些元数据存储到一个双层结构Map中、其中第一层map 的key是服务名字、第二层key是具体服务实例名、
相关配置:
eureka.client.register-with-eureka=true 【默认 true】
服务同步:
情景:两个相同的服务提供者实例、注册到了不同的服务注册中心、那么由于两个服务注册中心互相注册、服务注册中心会将服务注册信息发送给Eureka-server的其他机器、【还有一种说法是eureka-server 有信息服务功能、server与server之间 有消息同步、不确定这两种说法那个是真是的底层机制、后者是官方的说法、前者是 翟永超书里的说法、也就是说服务同步是由Eureka-server来完成的】
服务续约:
服务注册后、会维持一个心跳来维持服务不被剔除
相关配置:
eureka:
instance:
status-page-url-path: /info //服务信息
health-check-url-path: /health //服务健康状态
lease-expiration-duration-in-seconds: 90 //服务失效时间
lease-renewal-interval-in-seconds: 30 //服务续约持续调用时间
服务消费者功能:
1、获取服务
2、服务调用
3、服务下线
4、..
获取服务:
服务消费者会发送一个rest请求获取一个服务列表、Eureka-server会发给client一个只读的服务列表、且该列表会30s刷新一次
相关配置:
eureka:
client:
fetch-registry: true //默认为true 设为false则无法获取服务
registry-fetch-interval-seconds: 30 //服务清单刷新时间
服务调用:
集成Ribbon后、默认会使用轮询机制来调取服务实例信息
对于实例选择、在eureka中会有Region和Zone概念
一个Region会有很多Zone、每个服务都需要被注册到一个Zone中、所以每个client对应一个Region和一个Zone、服务调用时候会优先访问Zone下列表、没有在访问同一个Region不同Zone下的服务、
服务下线:
当服务实例jinx你给正常的关闭时、client会给server发送一个server、告知 "我要下线了"
服务注册中心功能:
1、失效剔除
2、自我保护
3、..
失效剔除:server会每隔一段时间【默认90s】剔除不正常实例【主要是没有续约的】
自我保护:如果同一时间段内由于网络原因大量服务都没有续约、server会继续保持服务列表、而不丢弃这个服务清单列表、也就是触发自我保护机制
其主要应对是网络忽然中断、大量服务都被剔除导致服务不可访问危险【牺牲了服务高可用性、zookeeper是全部剔除的 zk是服务强高可用性】
相关配置:
eureka.server.enable-self-preservation=false //可关闭自我保护机制
关于版本升级
1.0升级2.0 添加了获取感兴趣服务实例列表功能、毕竟在几千台服务注册中心上、有些服务实例也不是100%用到、节省了client服务实例清单的内存消耗、
还优化一些获取服务算法、
image.png
网友评论