微服务学习笔记7

35 阅读4分钟

Eureka

Register 服务注册,当Eureka客户端向Eureka Server注册时,它提供自身的元数据,如IP地址、端口、运行状况指示符URL等信息。 

Renew 服务续约,Eureka客户端会每隔30秒发送一次心跳来进行服务续约。通过续约来告知Eureka Server该客户端仍然存在,希望服务器不要剔除自己。 

Cancel 服务下线,Eureka客户端在程序关闭时向Eureka服务器发送取消请求。发送请求后,该客户端实例信息将从服务器的实例注册列表中删除。

Eviction 服务剔除,在默认的情况下,如Eureka客户端连续90秒没有向Eureka服务器发送服务续约心跳,Eureka服务器就会将该服务实例从服务注册列表中删除,即服务剔除。 

Fetch Registries 获取服务注册列表信息,Eureka客户端从服务器获取服务注册列表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回的注册列表信息可能与 Eureka 客户端的缓存信息有所不同, Eureka客户端会自动处理两者之间的差异。

注册中心服务器

想要实现服务管理,首先必须包含服务的定义,在Eureka中使用两层Hash Map来达到服务存储的效果。第一层 HashMap 的 Key 是 App Name,也就是应用名字,而第二层Hash Map的Key是Instance Name,也就是实例名字。

面向服务注册中心的操作主要包括服务注册、服务续约和服务下线

服务续约是一个定时操作,类似于心跳(Heartbeat)。Eureka会定期(默认为每60秒)检测失效的服务,检测标准就是超过一定时间没有续约的服务。而服务下线用来把自身的服务从Eureka Server中删除,以防客户端调用不存在的服务。

注册中心服务器的另一个核心功能是提供服务列表,为了提高性能,服务列表在Eureka Server会缓存一份,同时每30秒更新一次。

服务提供者

服务提供者关注服务注册、服务续约和服务下线等功能,相对注册中心服务器,服务提供者相当于是客户端,所以它可以使用服务器提供的RESTful API(基于Jersey框架实现)完成上述操作。

服务消费者

服务消费者与服务提供者本质上是同一个客户端。

Eureka高可用

Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就形成了一组互相注册的服务中心,以实现服务列表的互相同步,达到高可用的效果。

replicate To Peers操作,该操作用来实现服务器节点之间的状态同步。通过这种方式,任意一个Eureka Server获取来自客户端的通知之后就能保证状态会在所有的Eureka Server中得到更新。具体实现方式其实很简单,就是接收到请求的Eureka Server把请求再次转发到其他的Eureka Server,调用同样的接口,传入同样的参数,唯一不同之处在于会告诉其他服务器不需要再进行复制。

我们如何知道有哪些Eureka Server节点。Eureka Server在启动后会调用EurekaClientConfig.get EurekaServerServiceUrls来获取所有的Peer节点,并且会定期更新。这个方法的默认实现是从配置文件读取,所以如果 Eureka Server节点相对固定,可以通过在配置文件中配置节点列表的方式来实现。如果在运行过程中新加入了一个节点,或者服务器重启,那么每个节点可以把自己当作是服务消费者从其他 Eureka Server 节点获取所有服务的注册信息。然后再对每个服务在自己这里执行注册操作,从而完成初始化。

Eureka区域亲和性

在Eureka存在Region和Zone的概念,我们可以简单地将Region理解为Eureka集群,Zone 理解成机房。所谓区域亲和性,就是指服务消费者在选择服务时会选择和该服务消费者在同一个Zone的服务,这样做的目的是减少服务调用的延迟。