Eureka是Netflix开发的一个服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS(Amazon Web Services )域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将其集成在自己的子项目Spring Cloud Netflix中,以实现Spring Cloud的服务发现功能。
Eureka 的服务发现包含两大组件:服务端发现组件(Eureka Server)和客户端发现组件(Eureka Client)。服务端发现组件也被称之为服务注册中心,主要提供了服务的注册功能,而客户端发现组件主要用于处理服务的注册与发现。Eureka的服务发现机制如图4-2所示。
Eureka的服务发现机制
从上图中可以看出,当客户端服务通过注解等方式嵌入到程序的代码中运行时,客户端发现组件就会向注册中心注册自身提供的服务,并周期性地发送心跳来更新服务(默认时间为30s,如果连续三次心跳都不能够发现服务,那么Eureka就会将这个服务节点从服务注册表中移除)。与此同时,客户端发现组件还会从服务端查询当前注册的服务信息并缓存到本地,即使 Eureka Server出现了问题,客户端组件也可以通过缓存中的信息调用服务节点的服务。各个服务之间会通过注册中心的注册信息以Rest方式来实现调用,并且可以直接通过服务名进行调用。
Eureka 的服务发现机制包含了 3 个角色:服务注册中心、服务提供者和服务消费者。这 3个角色之间的关系如下图所示。
Eureka中的角色
上图中,服务注册中心即Eureka Server,而服务提供者和服务消费者是Eureka Client。这里的服务提供者是指提供服务的应用,可以是Spring Boot应用,也可以是其他技术平台且遵循Eureka通信机制的应用,应用在运行时会自动地将自己提供的服务注册到Eureka Server以供其他应用发现。
服务消费者就是需要服务的应用,该服务在运行时会从服务注册中心获取服务列表,然后通过服务列表知道去何处调用其他服务。服务消费者会与服务注册中心保持心跳连接,一旦服务提供者的地址发生变更时,注册中心会通知服务消费者。
需要注意的是,Eureka 服务提供者和服务消费者之间的角色是可以相互转换的,因为一个服务既可能是服务消费者,同时也可能是服务提供者。