一、基本概念

springboot整合eureka客户端 eureka spring_Server

在spring cloud框架中,eureka的核心作用是服务的注册和发现,并实现服务治理

二、基本组成

由三部分组成:
Eureka Server:提供服务注册和发现,多个Eureka Server之间会同步数据,做到状态一致(最终一致性)
Service Provider:服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
Service Consumer:服务消费方,从Eureka获取注册服务列表,从而能够消费服务

三、主要调用过程

1.服务生产者

1)服务注册
由服务生产者发送一个post请求给Eureka Server,请求内容包括:提供服务的名称和地址;
2)服务续约
服务续约(renew)会由服务提供者定期调用,类似于心跳,用来告知注册中心 Eureka Server 自己的状态,避免被 Eureka Server 认为服务失效将其剔除下线。服务续约就是发送一个 PUT 请求(30s);
3)服务下线
当服务提供者停止服务时,会发送请求告知注册中心 Eureka Server 进行服务剔除下线操作,防止服务消费者从注册中心调用到不存在的服务。服务下线就是发送一个 DELETE 请求;

2.服务消费者

1)获取服务列表,服务消费者启动时,会全量拉取服务列表信息,同时本地缓存一份;
2)更新服务列表,增量拉取。获取到全量服务列表后,服务消费者会定期到注册中心Eureka server获取服务的最新配置, 然后比较更新本地缓存,更新时间默认30s

3.Eureka Server

1)服务剔除
服务剔除是注册中心 Eureka Server 在启动时就启动一个守护线程 evictionTimer 来定期(默认为 60 秒)执行检测服务的,判断标准就是超过一定时间没有进行 Renew 的服务,默认的失效时间是 90 秒,也就是说当一个已注册的服务在 90 秒内没有向注册中心 Eureka Server 进行服务续约(Renew),就会被从注册中心剔除下线;
2)自我保护模式
当Eureka Server在短时间内丢失过多客户端时(可能发生了网络分区故障),过期的服务数量比例超过阈值(可配置,默认为0.85)时,那么eureka就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。它的架构哲学是宁可同时保留所有微服务(健康和不健康的),也不盲目注销任何健康的微服务,使用自我保护模式,可用让eureka更加健壮、稳定。

4.Eurka 工作流程

我们来整体梳理一下 Eureka 的工作流程:
1)Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息
2)Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务
3)Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常
4)当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例
5)单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端
6)当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式
7)Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地
8)服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存
9)Eureka Client 获取到目标服务器信息,发起服务调用
10)Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除

四、Eureka server集群

1.集群基本概念

为了保证高可用,在生产环境都会搭建eureka集群。Eureka Server 集群相互之间通过 Replicate 来同步数据,相互之间不区分主节点和从节点,所有的节点都是平等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。

2.集群间消息同步

Eureka Server之间会互相进行注册,构建Eureka Server集群,不同Eureka Server之间会进行服务同步,采用异步任务的方式,用来保证服务信息的一致性。当服务提供者发送注册请求到一个服务注册中心时, 它会将该请求转发给集群中相连的其他注册中心, 从而实现注册中心之间的服务同步。 在CAP中,Eureka 满足了AP,对C只满足的弱一致性(最终一致性),牺牲了强一致性保证了高可用性。如果同步过程中,出现了异常,这时会根据异常信息做对应的处理,如果是读取超时或者网络连接异常,则稍后重试;如果其他异常则打印错误日志不再后续处理。