Eureka实现原理和自我保护机制简单介绍

Eureka是在Java语言上,基于Restful API开发的服务注册与发现组件,由Netflix开源。Eureka遵循AP原则。目前Eureka仅开源到1.X版本,2.X版本已经宣布闭源。

Eureka采用的是Server/Client的模式进行设计:

  • Server扮演了服务注册中心的角色,为Client提供服务注册和发现的功能,维护着注册到自身的Client的相关信息,同时提供接口给Client获取到注册表中其他服务的信息。
  • Client将有关自己的服务的信息通过一定的方式登记到Server上,并在正常范围内维护自己信息的一致性,方便其他服务发现自己,同时可以通过Server获取到自己的依赖的其他服务信息,从而完成服务调用。

Server不进行选举,没有Leader,是一种去中心化的架构,节点都是对等的,通过相互注册提高可用性,通过数据拷贝的方式实现数据的最终一致性。

在集群环境中,如果某台Server节点宕机,Client的请求会自动切换到新的Server节点上,当宕机的服务器重新恢复后,Eureka会再次将其纳入到服务器集群管理之中。

自我保护机制

默认情况下,如果Server在一定时间内没有接收到某个服务实例的心跳(默认周期为30秒),Server将会注销该实例(默认为90秒)。如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,启动自我保护机制:

  1. Eureka不再从注册表中移除因为长时间没有收到心跳而过期的服务;
  2. Eureka仍然能够接受新服务注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用);
  3. 当网络稳定时,当前实例新注册的信息会被同步到其它节点中;

自我保护机制是Eureka遵循AP原则、保证可用性的关键,只要有一台Server还在就能对外提供服务,但是不保证强一致性,Server内部数据可能不是最新的。

猜你喜欢

转载自blog.csdn.net/Anenan/article/details/115349477