当前位置: 首页 > news >正文

Zookeeper和Nacos的区别

Zookeeper和Nacos的区别

在分布式系统中,注册中心充当着重要角色,是服务发现、客户端负载均衡中不可缺少的一员。注册中心除了能够实现基本的功能外,他的稳定性、可用性和健壮性对整个分布式系统的流畅运行影响重大。zookeeper和nacos可能是最常使用的方式。

Zookeeper

  • Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高。
  • Zookeeper的功能主要是它的树形节点来实现的。当有数据变化的时候或者节点过期的时候,会通过事件触发通知对应的客户端数据变化了,然后客户端再请求zookeeper获取最新数据,采用push-pull来做数据更新。服务注册和消费信息直接存储在zk树形节点上,集群下采用过半机制保证服务节点间一致性。
  • **Zookeeper主要是用来协调服务的,不用来存储业务数据。**ZNode的数据大小最大是1M
  • **消息广播:**集群中zk在数据更新的时候,通过leader节点将将消息广播给其他follower节点,采用简单的两阶段提交模式,先request->ack->commit,当超过一半的follower节点响应可以提交就更新代码。
  • 崩溃恢复: 当leader不可用时,或者超半数follower投票得出leader不可用,那么会重新选举,这段期间zk服务是不可用的。通过最新的 xid来选举出新的leader,选举出来后需要将新的leader中的数据更新给超过半数的follower节点才能对外提供服务。
  • zookeeper是个CP系统,强一致性。(集群leader挂了会重新选举,此时暂停对外服务)。Zookeeper是通过TCP的心跳判断服务是否可用。

Nacos

  • Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。Nacos 是 Dubbo 生态系统中重要的注册中心实现。
  • Nacos的配置中心和注册中心实现的是两套代码。Nacos依赖Mysql数据库做数据存储,当有数据更新的时候,直接更新数据库的数据,然后将数据更新的信息异步广播给Nacos集群中所有服务节点数据变更,在由Nacos服务节点更新本地缓存,然后将通知客户端节点数据变化。
  • Nacos支持两种方式的注册中心,持久化和非持久化存储服务信息
  • 非持久直接存储在nacos服务节点的内存中,并且服务节点间采用去中心化的思想,服务节点采用hash分片存储注册信息。
  • 持久化使用Raft协议选举master节点,同样采用过半机制将数据存储在leader节点上。
  • Nacos保证了P,官方推荐使用A,即AP,保证其高可用
  • AP模式下服务以临时实例注册,CP模式下服务以永久实例注册,Nacos集成了配置中心的功能。
  • Nacos同时实现CP以及AP两种数据的一致性策略,其实在一个组件中,同时实现两种数据一致性策略,这样在做服务注册中心选型时,就不必操心AP选什么组件,CP选什么组件,直接采用nacos就好了,同时满足你AP以及CP的数据一致性需求,即直接在一个组件中,享受Zookeeper以及Eureka组件的服务,避免了需要同时维护两种不同的组件的运维代价,只需要根据自己的实例需求,选择不同的注册模式即可。

关于C、A、P三者的定义:

  • Consistency : Every read receives the most recent write or an error
    Availability : Every request receives a (non-error) response – without the guarantee that it contains the most recent write
    Partition tolerance : The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes
    
  • ①一致性:对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确。

  • ②可用性:任何客户端的请求都能得到响应数据,不会出现响应错误。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错。

  • ③分区容忍性:由于分布式系统通过网络进行通信,网络是不可靠的。当任意数量的消息丢失或延迟到达时,系统仍会继续提供服务,不会挂掉。换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉。

http://www.lryc.cn/news/111050.html

相关文章:

  • O3DE的Pass
  • 如何建立含有逻辑删除字段的唯一索引
  • C语言基础知识点一
  • Python 潮流周刊#14:Lpython 高性能编译器、Python 与 JavaScript 实现互通
  • JVM深入 —— JVM的体系架构
  • dialog => :before-close的属性应用
  • <van-empty description=““ /> 滚动条bug
  • 使用swiper实现图片轮播功能
  • Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime
  • Modbus TCP转Profinet网关modbus tcp转以太网
  • 笔记 | P4387 【深基15.习9】验证栈序列 题解
  • PyTorch中nn-XXX与F-XXX的区别
  • zookeeper集群和kafka的相关概念就部署
  • 第4集丨Vue 江湖 —— 计算属性
  • Docker 容器化学习
  • springboot第34集:ES 搜索,nginx
  • 微信小程序中的分包使用介绍
  • 【云原生】K8S二进制搭建二:部署CNI网络组件
  • 【iOS】—— 离屏渲染
  • 基于人工智能的中医图像分类系统设计与实现
  • spring security + oauth2 使用RedisTokenStore 以json格式存储
  • css position: sticky;实现上下粘性布局,中间区域滚动
  • 解密HTTP代理爬虫中的IP代理选择与管理策略
  • pytorch入门
  • Redis | 主从模式
  • C# Blazor 学习笔记(8):row/col布局开发
  • 金融供应链智能合约 -- 智能合约实例
  • 论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读
  • K8S 部署 RocketMQ
  • [Docker]入门之docker-compose