一.简介
eureka主要是一个服务发现,服务注册的一个管理服务器。
包括两个端:
Eureka Server:注册中心服务端,用于维护和管理注册服务列表。
Eureka Client:注册中心客户端,向注册中心注册服务的应用都可以叫做Eureka Client(包括Eureka Server本身)
整个架构图是:

那个思考一下问题:
1.服务如何发现
2.服务如何注册
3.集群环境如何同步,高可用
答:先不看eureka的具体实现,自己针对架构假想一下。
1.服务发现:client启动后定期向server发送心跳,server来保存这个心跳服务。
2.服务注册:client启动后给server发送一条注册请求。
3.集群服务同步:当存在单个server里保存的服务集合发生变化时,向其他server发送同步消息。
下面来看看eureka的实现方式:
同区域的服务注册与调用过程
us-east-1c区域代表了同区域内的服务注册与调用过程。
Application Service启动后向Eureka Server注册中心注册服务,包括IP、Port、服务名等信息。
Application Client启动后从Eureka Server拉取注册列表。
Application Client发起远程调用的时候优先调用本区域内的Application Service。如果本区内没有可用的Application Service,才会发起对其他区内的Service调用。
三个区域us-east-1c,us-east-1d,us-east-1e结合在一起代表了不同区域内的服务注册与调用过程。
us-east-1c内的Application Service启动后,向本区内的Eureka Server注册服务信息。并跟本区内的Eureka Server维持心跳续约。
Eureka Server会将服务信息同步至相邻的us-east-1d的Eureka Server以及us-east-1e的Eureka Server
us-east-1e内的Application Service启动后,向本区内的Eureka Server注册服务信息。并跟本区内的Eureka Server维持心跳续约。
Eureka Server会将服务信息同步至相邻的us-east-1d的Eureka Server以及us-east-1c的Eureka Server
us-east-1d内的Application Client启动后,从本区内的Eureka Server拉取注册列表。
us-east-1d内的Application Client发起远程调用时,会先检索本区有没有可用的Application Service,如果没有就会通过某种算法调用us-east-1c或us-east-1e中的Application Service服务。
服务续约、下线、剔除
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服务器会将该服务实例从服务注册列表删除,即服务剔除。
服务通讯方式
服务间使用标准的REST方式通讯,所以Eureka服务注册中心并不仅适用于Java平台,其他平台也可以纳入到服务治理平台里面。只不过其他平台需要根据协议实现不同的客户端。目前已知实现的有net、nodejs、python。
Eureka 的自我保护模式
当一个新的Eureka Server出现时,它尝试从相邻节点获取所有实例注册表信息。如果从Peer节点获取信息时出现问题,Eureka Serve会尝试其他的Peer节点。如果服务器能够成功获取所有实例,则根据该信息设置应该接收的更新阈值。如果有任何时间,Eureka Serve接收到的续约低于为该值配置的百分比(默认为15分钟内低于85%),则服务器开启自我保护模式,即不再剔除注册列表的信息。
这样做的好处就是,如果是Eureka Server自身的网络问题,导致Eureka Client的续约不上,Eureka Client的注册列表信息不再被删除,也就是Eureka Client还可以被其他服务消费。
源码分析可看:https://blog.csdn.net/forezp/article/details/73017664
网友评论