Eureka

作者: 升空的焰火 | 来源:发表于2019-06-13 08:55 被阅读0次

一.简介

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

相关文章

网友评论

      本文标题:Eureka

      本文链接:https://www.haomeiwen.com/subject/smgfgqtx.html