Eureka

客户端实现原理

主要实现了 ImportSelector
image.png
image.png
image.png

服务端实现原理

image.png
image.png
image.png

注册中心比较

比较点 Eureka Zookeeper Consul Nacos
一致性 AP(最终一致性) CP(强一致性) CP CP+AP
时效性 服务注册心跳时间
注册表检查时间
readwrite 同步到 readonly时间
消费方拉取readonly注册表时间
快,强一致性 快,强一致性 CP 快
AP 慢
适用规模 20K~30K实例(节点) 10K~20K实例(节点) < 3K实例(节点)
通信方式 Http Rest 自定义协议 Http Rest HTTP/DNS
集群模式 Peer 2 Peer(服务器之间) leader 读/写
follower 读
Agent 监听的方式
性能问题 简单的更新机制,
设计复杂(扩容麻烦)
扩容麻烦,
规模较大时GC频繁
3K节点以上,
更新列表缓慢
运维熟悉度 相对陌生 熟悉 更陌生
一次性协议 http定时轮询 ZAB RAFT

为什么推荐使用 ZK 作为 Spring Cloud 的基础设施

一致性模型

维护相对熟悉

配置中心饿服务注册中心单一化

尽可能用@EnableDiscoveryClient

他支持多种注册中心。@EnableEurekaClient只支持 eureka
image.png

注册中心重复节点问题

问题

3节点 重启,注册服务中心没有来得及删除节点。
然后3节点又注册过来,注册了新的节点,同时老节点还在。
image.png

解决办法

  1. 注册增加service Id计算(不太懂)
  2. 获取节点应该去重

    解决注册服务中心 可以支持高节点

    读取

  3. 网关读取注册服务和服务实例列表

  4. 持久化到db或者放到redis缓存中
  5. 网关定时拉取注册中心的服务信息。
  6. 客户端获取服务信息直接可从网关获取服务信息

    注册

  7. 客户端服务正常注册到注册中心

image.png