eureka、zookepeer、nacos三者的关系

eureka、zookepeer、nacos 简单对比

  1. eureka

image.png

eureka:服务的注册中心,主要是保存服务的信息,可以进行搭建集群来提高注册中心的高可用


提供者:将自己的服务信息注册到eureka上面供消费者消费,同时也将获取注册表信息到本地


消费者:在eureka上面拉取服务,然后通过httpclient进行调用服务,同时也将自己的信息注册到eureka上面

image.png

 

分析上图的注册过程:
1、先读eureka server的配置信息,从而知道eureka server在哪,以便后面进行注册
2、接着再读取自己的配置信息,然后将自己的信息封装在InstanceInfo实例中,等下将实例发送到eureka server中
3、通过上面步骤已经知道eureka server的地址了,此时先把注册拉取到本地缓存起来
4、将上面封装的InstanceInfo实例发送到eureka server进行注册,然后初始化心跳检测以及缓存刷新(这些都是通过开启后台线程完成的)
5、再次拉取注册表更新本地注册表信息

  1.3、eureka服务续约
1、Eureka Client通过发送心跳进行续约
2、默认情况下每30秒发送一次心跳
3、如90秒内Eureka Server未收到续约,则进行服务剔除

  1.4、eureka服务剔除
1、Eureka Client优雅退出时会发送cancel命令
2、Eureka Server收到cancel命令时会删除该节点

  1.5、eureka自我保护
1、Eureka Server会自动更新续约更新阀值
2、Eureka Server续约更新频率低于阈值则进入保护模式
3、自我保护模式下Eureka Server不会剔除任何注册信息

 

2、zookepper简单介绍
定义:简单的说zookepper=文件系统+监听通知机制

  3.1、文件系统
上面我们说了zookepper是文件系统的类型,下面我们来一起看下

image.png


每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的

有四种类型的znode:
  1、PERSISTENT-持久化目录节点
  指client和zookepper断开链接之后,client在zookepper上面创建的节点不会被zookepper删除,还会继续保留
  2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
  比如,一个user模块部署了多台服务器,在zookepper上面进行注册自己服务,zookepper会对user模块进行创建持久性顺序节点,当第一个节点宕机之后,会按照顺序取下一个节点
  3、EPHEMERAL-临时目录节点
  client在zookepper上面进注册自己的服务,当服务宕机之后,zookepper会进行删除创建的节点
  4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
  第四种情况和第二种情况很像,只不过,服务宕机之后就会剔除服务,不会永久保留

  3.2、监听通知机制
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

nacos简单介绍

 

主要的核心功能

1、服务注册:每个服务客户端通过rest方式向服务端进行注册自己的信息
2、服务心跳:每个服务客户端都会维护一个定时心跳,向服务到证明自己是健康的,默认5s发送一次
3、服务同步:服务器集群之间相互进行通讯来保证服务信息的一致性同时提高注册中心的高可用
4、服务发现:客户端有一个定时任务,定时的去注册中心拉取各个服务的信息列表到本地
5、服务健康检查:注册中心定时检查各个服务的健康状态

  4.2、可视化界面配置的功能

1、雪崩保护:通过给每个服务实例进行配置阈值,从而实现雪崩保护
2、临时实例:当服务宕机时,注册中心会进行删除注册的服务实例
3、永久实例:即使服务宕机了,服务实例也不会被删除,和前面我们一起讨论的zookepper的持久性节点很像

 

image.png