Eureka:Spring Cloud服务注册和发现组件
Eureka:Spring Cloud服务注册和发现组件
问题总结
- Eureka 两大组件?
- Eureka 服务注册与发现?
- Eureka Server 集群?
- Eureka 自我保护机制?
问题答案
- Eureka 两大组件
- Eureka Server:Eureka 服务注册中心。当微服务启动时,会将自己的服务注册到Eureka Server。Eureka Server维护了一个可用服务列表,存储了所有注册到Eureka Server的可用服务。
- Eureka Client:Eureka 客户端,微服务系统中的各个微服务。Eureka Client会向Eureka Server发送心跳(默认30s)。Eureka Server在多个心跳周期没有收到Eureka Client的心跳,将其从服务列表中移除(默认90s)。
- Eureka 服务注册与发现
图1:
- 服务注册中心(Register Service):Eureka Server,提供服务注册和发现功能。
- 服务提供者(Provider Service):Eureka Client,提供服务。将自己注册到Register Service,以供服务消费者发现。
- 服务消费者(Consumer Service):Eureka Client,提供消费服务。从Register Service获取服务列表,调用所需服务。
Eureka流程:
- 搭建一个Eureka Server作为服务中心;
- 服务提供者Eureka Client启动时,将当前服务器的信息以服务名(spring.application.name)的方式注册到服务注册中心;
- 服务消费者Eureka Client启动时,向服务注册中心注册;
- 服务消费者获取一份可用服务列表,包含了所有注册到服务注册中心的服务信息(包括服务提供者和自身的信息);
- 服务消费者通过HTTP或消息中间件远程调用服务提供者提供的服务。
- Eureka Server 集群
- Eureka Server A 和 Eureka Server B,将A作为一个服务注册到B上,B注册一个服务到A上。形成一个相互注册的Eureka Server集群,当服务提供者发送注册请求到Eureka Server时,Eureka Server会将请求转发给集群中与之相连的Eureka Server上,形成Eureka Server之间的服务同步。
- 服务消费者可以在集群中的任意一台Eureka Server上获取服务提供者的服务。当集群中某个服务注册中心发生故障,服务消费者仍然可以从集群中其他Eureka Server获取服务信息并调用,而不会导致系统的整体瘫痪。(高可用)
- Eureka 自我保护机制
- 在实际的分布式微服务中,健康的服务(Euraka Client)可能因为网络故障而无法与Eureka server正常通讯。若此时Eureka Server因为没有接受心跳而误将健康的服务从服务列表中移除,这显然不合理。
- Eureka Server在一段时间内没有接收到Eureka Client的心跳,那么Eureka开启自我保护机制,将所有Eureka Cilent的注册信息保护起来。一但网络恢复,这些Eureka Client提供的服务能够继续被服务消费者消费。
- 弊端:在Eureka自我保护机制触发期间,服务提供者提供的服务出现问题,那么服务消费者就很容易获取到已经不存在的服务从而出现调用失败的情况。(通过Ribbon:负载均衡+Hystrix:流量控制、熔断机制)