nacos与zk对比(浅议)

这篇具有很好参考价值的文章主要介绍了nacos与zk对比(浅议)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下仅仅整理了个人理解后的观点,如有疑问欢迎咨询讨论。
当前因精力有限,仅收集了一些浅显的内容,后续会逐步补充完整。

前言

平时用的主要是配置中心和服务注册中心,所以主要从这两点进行对比。

zk是比较经典的服务注册中心组件。国内早期受Dubbo默认推荐的影响,被认为是RPC服务框架下注册中心的最佳选择。但随着Dubbo的不断更新,及各种注册中心的诞生,已经有逐步丢弃zk的趋势。但毕竟之前的辉煌还未走远,在微服务体系中zk仍有不小的分量。

特性对比

Nacos ZK Eureka Consul CoreDNS
一致性协议 AP,可改CP CP AP CP /
健康检查 TCP/HTTP/MySql/Client Beat Client Beat Client Beat TCP/HTTP/gRPC/cmd /
负载均衡 权重/DSL/metabase/CMDB / Ribbon Fabio RR
雪崩保护 支持 不支持 支持 不支持 不支持
自动注销实例 支持 支持 支持 不支持 不支持
访问协议 HTTP/DNS/UDP TCP HTTP HTTP/DNS DNS
监听支持 支持 支持 支持 支持 不支持
多数据中心 支持 不支持 支持 支持 不支持
跨注册中心 支持 不支持 不支持 支持 不支持
SpringCloud集成 支持 不支持 支持 支持 不支持
Dubbo集成 支持 支持 不支持 不支持 不支持
K8S集成 支持 不支持 不支持 支持 支持

参考原图

nacos

一致性协议

nacos一致性协议为AP,也可以修改配置变CP。
AP重在服务的可用上,即使拿到的数据已过时,也比没有强。

在保障服务可用上,nacos采用类似多级缓存的方式。数据持久化在内存或mysql中,并在服务端用户目录下缓存一组文件,在客户端拉取到之后会在本地用户目录下同样存储一份自己需要的文件。
这样当服务器出现重启后,可以从本地缓存文件中加载之前的信息,并通过心跳健康检测查看哪些客户端还在。
如果客户端启动时服务端无法连接,至少还有本地缓存的信息可以用,不至于使得客户端服务无法启动。

注册中心与配置中心

nacos虽然融注册中心和配置中心为一体,但实际是两套独立代码实现。所以很多时候讲nacos的存储和逻辑时,需要区分来看。这点和zk不同

nacos作为注册中心,数据存储非持久化Raft协议,选举leader存储,并遵循过半机制),和非持久化hash分片存在各节点内存中

nacos作为配置中心,数据存储在mysql中.

zookeeper

nacos与zk对比(浅议)
zk主要采用push-pull来做数据更新,通过其树形叶子节点来储存信息,当有节点变动时会通过事件触发通知,告诉客户端有变动,然后客户端再向zk获取最新数据。

zk集群一致性方式为CP,即以保证数据一致性为主。
CP的特性,重在数据一致性,要么失败,要么拿到的肯定是最新最全的数据。但在重选主节点时可能耗时30~120秒不等,期间一切访问都是失败的。

集群间数据同步:ZAB

集群各节点数据的同步方式,最主要的就是ZAB(消息广播和崩溃回复)协议。
消息广播:数据更新时,先通过leader节点将消息广播给其它follower节点,采用简单的两阶段提交模式(commit -> ack -> commit),当超过一般follower节点响应,就可以提交更新。
崩溃恢复:当leader挂了或超过半数投票得出leader不可用,就出重新选举,选举期间zk服务不可用,通过最新的xid来选举新的leader(每次拿到最新数据后当前节点xid会加1,可通过xid最大判断是否数据最新),然后将新leader的数据发给超半数的follower节点,zk才可恢复对外服务。

leader选举

。。。

数据特点

支持节点短暂存在,会话创建节点后,每隔一段时间需要发送心跳给zk。如果该服务下线则立即删除节点。同时zk使用了ZAB协议保证了数据的强一致性。

数据同步

持久化使用Raft协议选举master节点,同时采用过半机制将数据存储在leader节点中。
非持久化直接存在nacos运行内存中,且服务节点采用去中心化方式,使用hash分片策略存储注册信息(有点像redis的cluster集群分片)。

一致性协议(CAP)

作为注册中心,P要保证,C和A权衡取其一。

如果选择 一致性 ,必须在某节点写入时,数据同步到其他节点后才算成功。旨在保证无论从哪个节点看到的数据都是一致的。
常见一致性协议有paxos、raft,他们都是强一致性协议(CP)

反之选择 可用性 ,必须保证请求必须及时响应结果,哪怕是过期的数据。与一致性冲突!

Nacos

默认AP(弱一致性协议distro),也可通过修改配置改为CP。

zk

CP

数据储存与集群间同步

nacos分注册中心和配置中心。

nacos的配置中心数据存储在mysql中,当有数据变动时,先存入mysql做持久化,再通过异步广播所有服务节点更新本地缓存后,再通知客户端节点数据变化。

nacos的注册中心有持久化与非持久化两种模式:

  • 持久化使用Raft协议选举master节点,同样采用过半机制存储在leader节点。
  • 非持久化直接存储在nacos服务节点的内存中,并使用hash分片方式实现去中心化的思想。

zk本身并不区分注册或配置中心

使用类似文件系统目录的树形结构存储,所有数据存储在叶子节点,其数据存储在硬盘上。
当数据变动时,采用过半机制保证各个节点数据的一致性,再通过zk的事件机制通知客户端。

这里有几点差异

  1. 数据存储位置不同。nacos存mysql,zk本身存储
  2. 数据变动的一致性。nacos先更新数据再发送异步广播,zk采用ZAB协议的过半机制保证数据一致性


怎么通知客户端的?顺序和保证机制

配置中心实现

nacos的注册和配置中心的实现是两套代码(虽然只有一个服务)

zk可借助叶子节点数据变动时通知客户端,然后客户端再来获取最新数据的机制,可以实现配置中心的动态配置功能

扩展

CAP理论

CAP理论指出,一个分布式系统不可能同时满足一致性、可用性、分区容错性,鱼和熊掌不可兼得!

  • C(Consistency):一致性。在分布式集群部署中的所有数据备份,在同一时刻是否同样的值
  • A(Availability):可用性。只要收到用户请求,服务器就一定会给出成功或失败响应,不会让用户一直等在那直到超时
  • P(Partition tolerance):分区容错性。由于分布式系统通过网络通讯,但网络是不可靠的。当出现消息丢失或延迟时,程序能正常处理,而不会挂掉或未知异常(未捕获)

本文主要参考下列文章文章来源地址https://www.toymoban.com/news/detail-418215.html

  • 服务注册发现与注册中心对比(NACOS 和 ZK)
  • Nacos和Zookeeper对比
  • 轻松理解CAP理论

推荐阅读

  • [荐] 阿里巴巴为什么不用 ZooKeeper 做服务发现?

到了这里,关于nacos与zk对比(浅议)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zookeeper与Nacos的对比分析

    Zookeeper 和 Nacos 都是分布式系统中常用的配置管理和服务发现工具。Zookeeper 是一个开源的分布式协调服务,提供一致性、可靠性和原子性等特性。Nacos 是一个云原生的配置管理和服务发现平台,提供动态配置和服务发现等功能。 在本文中,我们将从以下几个方面对比分析 Z

    2024年02月19日
    浏览(26)
  • 离散数学笔记整理(个人向)

    1.1. 概念 等势:A、B两集合间存在一一对应的关系,则称A与B等势,记为 A ~ B。 可数集合:与自然数集合N等势的集合。集合基数为阿列夫零。包括:正奇数集合,质数集合,有理数集合Q。 不可数集合:与开区间(0, 1)等势的集合。集合基数为阿列夫。 集合A的基数记为card A 1

    2023年04月08日
    浏览(29)
  • Zookeeper、Eureka、Consul、Nacos对比

    Zookeeper 是⼀款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长⼀段时间里,它是国人在提起 RPC 服务注册中心时心里想到的唯⼀选择。 Eureka 借着微服务概念的流行,与 SpringCloud 生态的深度结合,也获取了大量的用户。 Consul 在设计上把很多分布式服务治

    2024年02月16日
    浏览(25)
  • 【个人记录 | UNet | 整理ing】

      Github地址、 CSDN、bili主页、阿喆学习小记   【读后感】 对于网络中一些参数的设置及其设置原因解说的比较详细清晰;再自定义数据读取中,对如何读取每一个具体的文件也解说的很清晰。 需要注意的是,博主在论文原始Decoder的上采样输出channel中做了修改,以及用bili

    2024年02月05日
    浏览(25)
  • es个人整理的相关面试题

    1、搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch; 2、在初始查询阶段时,查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。 PS:在搜索的时候是会查询 Filesystem Cache 的,但

    2024年02月10日
    浏览(30)
  • FPGA面试试题(附个人整理答案)

    一、什么是FPGA,内部资源构成?        答:FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种可以通过编程来配置的半导体设备。FPGA由成千上万个 可配置逻辑块 (CLB)和 可编程的互联资源 组成,可以实现复杂的数字计算功能。与其他类型的集成电路相比,如专用

    2024年04月11日
    浏览(40)
  • 在Github搭建个人博客-详细步骤整理

    去年就有在 Github 搭建博客的想法,但是因为工作太忙搁置了,昨天想起来这事儿,于是网上各种查阅资料,感觉虽然搭建方式比较多,但都不是很全,走了很多弯路,折腾了我一天,才终于搭建好了自己的 GIthub 博客,在此记录梳理一下,希望可以帮到大家,欢迎交流! 博

    2024年02月15日
    浏览(34)
  • Leetcode hot100题 个人整理版

    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 给定两个大小分别为 m m m 和 n

    2024年02月11日
    浏览(36)
  • Nacos vs. Eureka:微服务注册中心的对比

    Nacos vs. Eureka:微服务注册中心的对比 前言: 欢迎来到本篇博客,今天我们将深入研究两个常用的微服务注册中心:Nacos 和 Eureka。微服务架构的兴起使得服务注册中心成为整个体系中不可或缺的一部分,而选择一个适合自己项目的注册中心显得尤为重要。 1. Nacos 和 Eureka 简介

    2024年02月03日
    浏览(34)
  • 图论相关题-pta-个人整理-含有解析

    例题1 7-1 邻接矩阵表示法创建无向图 分数 20 作者 王东 单位 贵州师范学院 采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度。 输入格式: 输入第一行中给出2个整数i(0i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包