java技术--SpringCloud:Eureka概念解析(04)

1.Eureka是一个服务注册和发现模块

(1)使用Eureka实现服务治理
(2)Eureka分为服务端和客户端
(3)一个基于 REST 的服务,用于定位服务

2.Eureka的一些概念

(1)Register:服务注册
   <1>当Eureka客户端向Eureka Server注册时,它提供自身的元数据
   <2>元数据包含:IP地址、端口,运行状况指示符URL,主页等
(2)Renew:服务续约   
   <1>Eureka客户会每隔30秒发送一次心跳来续约
   <2>通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题
   <3>Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除 
(3)Fetch Registries:获取注册列表信息
   <1>Eureka客户端从服务器获取注册表信息,并将其缓存在本地
   <2>客户端会使用该信息查找其他服务,从而进行远程调用
   <3>该注册列表信息定期(每30秒钟)更新一次
   <4>每次返回注册列表信息可能与Eureka客户端的缓存信息不同,Eureka客户端自动处理
   <5>由于某种原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息   
   <6>Eureka客户端和Eureka 服务器可以使用JSON/XML格式进行通讯
   <7>在默认的情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息
(3) Cancel:服务下线
   <1>Eureka客户端在程序关闭时向Eureka服务器发送取消请求
   <2>发送请求后,该客户端实例信息将从服务器的实例注册表中删除
   <3>该下线请求不会自动完成,它需要调用以下内容:
    DiscoveryManager.getInstance().shutdownComponent();
(4)Eviction 服务剔除 
   <1>默认情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约(即心跳)
   <2>Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除

3.Eureka Client注册一个实例为什么这么慢

(1)Eureka Client一启动(不是启动完成),不是立即向Eureka Server注册
    <1>它有一个延迟向服务端注册的时间,默认的延迟时间为40秒
(2)Eureka Server的响应缓存
    <1>Eureka Server维护每30秒更新的响应缓存
    <2>所以实例刚刚注册,它不会出现在调用/eureka/apps REST端点的结果中
(3)Eureka Server刷新缓存
    <1>Eureka客户端保留注册表信息的缓存,该缓存每30秒更新一次
    <2>因此,客户端决定刷新其本地缓存并发现其他新注册的实例可能需要30秒
(4)LoadBalancer刷新Ribbon负载平衡器从本地客户端获取服务注册列表信息 
    <1>此缓存每30秒刷新一次
    <2>所以,可能需要30多秒才能使用新注册的实例     
(5)综上几个因素:
    <1>一个新注册的实例,不能马上被Eureka Server发现   
    <2>刚注册的Eureka Client也不能立即被其他服务调用 

4.Eureka 的自我保护模式

(1)当一个新的Eureka Server出现时,它尝试从相邻节点获取所有实例注册表信息
   <1>如果从Peer节点获取信息时出现问题,Eureka Serve会尝试其他的Peer节点
   <2>如果服务器能够成功获取所有实例,则根据该信息设置应该接收的更新阈值
   <3>如果Eureka Serve接收到的续约低于为该值配置的百分比
   <4>则服务器开启自我保护模式,即不再剔除注册列表的信息
发布了191 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/105537938
今日推荐