Spring Cloud Eureka

Eureka是Netflix(没错,网飞,电视剧相当棒)开发的,一个基于REST 服务的,服务注册与发现的组件,主要包括两个模块:

  • Eureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)
  • Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)

架构图

Spring Cloud Eureka

各个微服务启动时,会通过Client向Server注册自己,Server会存储该服务的信息,也就是说,每个微服务的客户端和服务端,都会注册到Server,这就衍生出了微服务相互识别的话题

  • 同步:每个Eureka Server同时也是Eureka Client(逻辑上的),多个Eureka Server之间通过复制的方式完成服务注册表的同步,形成Eureka的高可用
  • 识别:Eureka Client 会缓存 Eureka Server 中的信息,即使所有Eureka Server节点都宕掉,服务消费者仍可使用缓存中的信息找到服务提供者
  • 续约:微服务会周期性(默认30s)地向Eureka Server发送心跳以Renew(续约)信息(类似于heartbeat)
  • 续期:Eureka Server会定期(默认60s)执行一次失效服务检测功能,它会检查超过一定时间(默认90s)没有Renew的微服务,发现则会注销该微服务节点
些许认识
  • Eureka Server自带管理页面,可以查看每个Client的运行状态,借助Spring Boot Actuator还可以查看更详细的信息,如:JVM、HTTP请求、Log日志等
  • 被标记为Eureka Server后,此实例除了作为注册中心之外似乎没有其他用途了
  • 2.X版本不再开源,Alibaba Cloud Nacos或许是比较好的替代产品

缺陷

  • 集群中的每个Eureka实例都包含了全部的服务注册表,当有服务注册/下线时会同步转发给集群内的其他实例,实现集群数据同步。这种同步操作是异步的,采用最终一致性协议,这将导致集群内的其他实例无法在服务发生变化的第一时间做出反应。
  • 由于每个Eureka实例都包含了全部的服务注册表,当服务实例数量超过单机内存支撑极限(几十万实例)时,引引发连锁反应。

类似Hadoop设计架构中的数据分片思想可以解决这个问题,一个注册表数据分片就在一台机器上,由这台机器负责提供服务的注册和发现,那么此时就可以实现强一致的效果。

什么值得看

相关文章: