浅谈Zookeeper、Eureka、Nacos概念及区别

一、概念

  • ZooKeeper是一个开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
    ZooKeeper包含一个简单的原语集,提供Java和C的接口。

  • Eureka 是Spring Cloud 微服务框架默认的组件,也是推荐的服务注册中心,
    由Netflix公司与2012将其开源出来,Eureka基于REST服务开发,主要用于实现AWS云的中服务定位,以实现中间层服务器的负载均衡和故障转移。
    在这里插入图片描述

  • Nacos是阿里巴巴开源的项目,提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。更敏捷和容易地构建、交付和管理微服务平台。
    Nacos支持基于DNS和基于RPC的服务发现,动态配置服务(配置中心),动态DNS服务
    在这里插入图片描述

二、Zookeeper、Eureka、Nacos区别

  • ZooKeeper客户端到Server是TCP长连接;
  • eureka是使用定时发送和服务进行联系,属于短连接;
  • nacs使用的是netty和服务直接进行连接,属于长连接;
CAP理论(A:高可用,C:一致性,P:分区容错性)
  • Zookeeper保证了CP(C:一致性,P:分区容错性)
  • Eureka保证了AP(A:高可用)
  • nacos支持CP和AP两种,根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP,即不是临时节点
Nacos提供了namespace来实现环境隔离功能。

nacos中可以有多个namespace,namespace下可以有group、service等,
不同namespace之间相互隔离,例如不同namespace的服务互相不可见,在application.yml文件的namespace配置服务名称。

Nacos的服务实例分为两种l类型:

临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
Nacos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异

Nacos与eureka的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测

区别
zookepper=文件系统+监听通知机制

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

  • eureka简单介绍
    1、几个角色:
    eureka:服务的注册中心,主要是保存服务的信息,可以进行搭建集群来提高注册中心的高可用
    提供者:将自己的服务信息注册到eureka上面供消费者消费,同时也将获取注册表信息到本地
    消费者:在eureka上面拉取服务,然后通过httpclient进行调用服务,同时也将自己的信息注册到eureka上面
    2、eureka注册原理
    1)、先读eureka server的配置信息,从而知道eureka server在哪,以便后面进行注册
    2)、接着再读取自己的配置信息,然后将自己的信息封装在InstanceInfo实例中,等下将实例发送到eureka server中
    3)、通过上面步骤已经知道eureka server的地址了,此时先把注册拉取到本地缓存起来
    4)、将上面封装的InstanceInfo实例发送到eureka server进行注册,然后初始化心跳检测以及缓存刷新(这些都是通过开启后台线程完成的)
    5)、再次拉取注册表更新本地注册表信息
  • 3、eureka服务续约
    1)、Eureka Client通过发送心跳进行续约
    2)、默认情况下每30秒发送一次心跳
    3)、如90秒内Eureka Server未收到续约,则进行服务剔除
  • 4、eureka服务剔除
    1)、Eureka Client优雅退出时会发送cancel命令
    2)、Eureka Server收到cancel命令时会删除该节点
  • 5、eureka自我保护
    1)、Eureka Server会自动更新续约更新阀值
    2)、Eureka Server续约更新频率低于阈值则进入保护模式
    3)、自我保护模式下Eureka Server不会剔除任何注册信息

Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式,临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

  • nacos主要的核心功能
    1、服务注册:每个服务客户端通过rest方式向服务端进行注册自己的信息
    2、服务心跳:每个服务客户端都会维护一个定时心跳,向服务到证明自己是健康的,默认5s发送一次
    3、服务同步:服务器集群之间相互进行通讯来保证服务信息的一致性同时提高注册中心的高可用
    4、服务发现:客户端有一个定时任务,定时的去注册中心拉取各个服务的信息列表到本地
    5、服务健康检查:注册中心定时检查各个服务的健康状态
    6、雪崩保护:通过给每个服务实例进行配置阈值,从而实现雪崩保护
    7、临时实例:当服务宕机时,注册中心会进行删除注册的服务实例
    8、永久实例:即使服务宕机了,服务实例也不会被删除,和前面我们一起讨论的zookepper的持久性节点很像
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐