服务注册发现概念
在传统的系统部署中,服务运行在固定的IP和端口上,可以通过地址直接调用。但是在虚拟化或容器化的环境中,服务实例的启动和销毁很频繁,服务地址在动态变化,如果需要将请求发送到动态的服务实例上需要以下两个步骤:
- 服务注册:存储服务的主机和端口信息。
- 服务发现:允许其他用户发现服务注册阶段存储的信息。
什么是Eureka
Eureka是Spring Cloud的服务注册发现组件,Eureka采用C-S架构,Eureka客户端连接到Eureka服务端,并保持心跳,这样Eureka服务端就可以监控各个微服务是否正常运行。
Eureka和Zookeeper的区别
-
Eureka遵守AP原则,Zookeeper遵守CP原则。
-
Zookeeper会因网络问题使得master节点丢失,剩余节点需要重新选举leader,在选举期间整个集群是不可用状态。
-
Eureka每个节点都是平等的,几个节点挂掉不会印象其他节点的工作,Eureka客户端在向某个Eureka请求服务时,如果连接失败,会自动切换到其他节点,只有还有一台Eureka节点在就能提供服务,不过信息可能不是最新的。
服务注册
-
Eureka客服端启动时,会启动一个心跳定时任务,定时向服务端发送心跳信息,如果服务端返回NOT_FOUND,表示服务端没有该客户端的服务信息,客户端会向服务端发送注册请求,注册请求包括服务名、ip、端口、唯一实例ID等信息。
-
Eureka服务端收到注册信息之后会将客户端的信息保存到
ConcurrentHashMap
服务发现
Eureka客户端通过定时任务从Eureka拉去服务列表,每次拉取后刷新本地已保存的信息,需要时从本地直接获取。
Eureka集群
Eureka服务端节点会向其他服务注册中心祖册自己,这样就能形成一组相互祖册的服务注册中心,从而同步服务列表。
服务剔除
- 当服务正常关闭时,会触发一个服务下线的请求给Eureka服务端,服务端收到后会将该服务设置为下线。
- 对于不能正常的客户端,Eureka服务端会启动一个定时任务,定时从服务列表中剔除心跳超时的服务。
Eureka自我保护机制
Eureka自我保护机制是针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加健壮稳定。
Eureka自我保护机制进入条件:如果在15分钟内超过85%的客户端都没有正常的心跳,那么Eureka就认为客户端与服务端的网络发生故障,Eureka自动进入自我保护机制。
自我保护模式下服务端的行为:
- 不再从注册列表中移除因为长时间没有收到心跳而应该过期的服务。
- 继续接受新服务的注册和查询请求,但是不会同步到其他节点上,保证当前节点依然可用。
- 当网络可用时,当前Eureka服务端新的注册信息会同步到其他节点。