Eureka概述
一个简单的服务注册,服务发现架构
在CAP理论中,eureka选择了ap,作为注册中心,数据可用比数据不一致更重要
逻辑架构图
Eureka特性
1.当注册中心挂了,客户端之间依然可以通过原有的注册表进行调用;注册中心重启后,客户端会继续注册进来
2.当服务提供者挂了,在关闭自我保护的情况下,注册中心在规定时间(默认是60s)内移除客户端
3.自我保护,当一个新的Eureka Server出现时,它尝试从相邻节点获取所有实例注册表信息。如果从Peer节点获取信息时出现问题,Eureka Serve会尝试其他的Peer节点。如果服务器能够成功获取所有实例,则根据该信息设置应该接收的更新阈值。如果有任何时间,Eureka Serve接收到的续约低于为该值配置的百分比(默认为15分钟内低于85%),则服务器开启自我保护模式,即不再剔除注册列表的信息。
Eureka主要功能
Register:服务注册
当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等
Renew:服务续约
Eureka客户会每隔30秒发送一次心跳来续约。 通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题。 正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。 建议不要更改续约间隔
Fetch Registries:获取注册列表信息
Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与Eureka客户端的缓存信息不同, Eureka客户端自动处理。如果由于某种原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息。 Eureka服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka客户端和Eureka 服务器可以使用JSON / XML格式进行通讯。在默认的情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息
Cancel:服务下线
Eureka客户端在程序关闭时向Eureka服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:
DiscoveryManager.getInstance().shutdownComponent()
Eviction 服务剔除
在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约,即心跳,Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除
参考资料
http://blog.csdn.net/forezp/article/details/73017664
eureka配置
Eureka客户端死了后,服务端没有移除该客户端
1.客户端与服务端的心跳时间间隔为30s
2. Eureka Server在多长时间内没有收到心跳将实例剔除的时间参数,默认为90s
官方建议这两个参数不要修改
//eureka服务端默认配置
//客户端默认配置
注册表配置缓存方案
·启动缓存
Eureka Client一启动(不是启动完成),不是立即向Eureka Server注册,它有一个延迟向服务端注册的时间,通过跟踪源码,可以发现默认的延迟时间为40秒
·Eureka Server的响应缓存
Eureka Server维护每30秒更新的响应缓存,可通过更改配置eureka.server.responseCacheUpdateIntervalMs来修改。 所以即使实例刚刚注册,它也不会出现在调用/ eureka / apps REST端点的结果中。
·Eureka Server刷新缓存
Eureka客户端保留注册表信息的缓存。该缓存每30秒更新一次(如前所述)。因此,客户端决定刷新其本地缓存并发现其他新注册的实例可能需要30秒。
·LoadBalancer Refresh
Ribbon的负载平衡器从本地的Eureka Client获取服务注册列表信息。Ribbon本身还维护本地缓存,以避免为每个请求调用本地客户端。此缓存每30秒刷新一次(可由ribbon.ServerListRefreshInterval配置)。所以,可能需要30多秒才能使用新注册的实例。
官方表示,大概需要两分钟,会更新最新的配置到客户端
Eureka操作
Eureka也支持通过rest接口来操作注册中心
比如
DELETE eureka/v2/apps/appID/instanceID
该命令可以主动下线一个已有服务
详细接口参考
https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
这个链接里有点老,当前版本的urll改成了以eureka/apps开头
默认是采用xml协议,如果想要json协议的,在http请求头中加入配置