Spring cloud eureka 原理:

1.eureka server 端: 1⃣️client向server端注册,server端维护一个两层Map结构,存储注册信息(一层存服务名称,一层存ip)
2⃣️消费者调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表3⃣️集群中的server通过复制各自状态同步信息4⃣️服务剔除5⃣️自我保护

2.eureka client端:
1⃣️向server端注册2⃣️向server端发送心跳,续约2⃣️从server端拉取注册信息并缓存3⃣️定时更新列表4⃣️client端关闭时会向server端发送取消租约

3.server端和client端通信是根据http协议

4.eureka强调了CAP中的AP,即可用性和分区容错性,他与Zookeeper这类强调CP(一致性和分区容错性)最大的区别就是eureka为了实现更高的服务可用性,牺牲了一致性

Eurka 工作流程

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 没有上送心跳,比如15分钟之内有85%心跳失败,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端,所以Client客户端一定要有送错机制,比如熔断,幂等

6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式

7、Eureka Client 每30秒向Server发送一个rest请求,获取服务注册表,Server端返回一个只读的的列表,并且将获取到的信息缓存到本地

8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存

9、Eureka Client 获取到目标服务器信息,发起服务调用,具体调用哪个实例,Ribbon会采用默认的轮询策略

10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中剔除该实例

这就是Eurka基本工作流程