Zookeeper的几个概念:(接下来将从这几个概念书写Zookeeper的内部工作流程)

  • 数据模型
  • 节点特性
  • 版本
  • Watcher
  • ACL 

<1> 数据模型

  Zookeeper的视图很热Unix文件系统很像。但没有引入文件和文件目录相关概念;而是使用“数据节点”概念,称为ZNode;

  ZNode是ZK中最小的数据单元,每个ZNode上可以保存数据,也可以挂载子节点;即形成了一种层次化空间树;

     事务ID : ZK中,事务是指能够改变zk服务器状态的操作,一般包括数据节点创建与删除,数据节点内容更新和客户端会话创建与失效等操作;对于每一个事务请求,zk都会为其分配一个全局唯一的事务ID,用ZXID表示,是一个64位的数字;每一个ZXID对应一个事务操作;

<2> 节点特性:

  ZK中每个数据节点都是有生命周期;具体取决于数据节点的类型;

  节点类型可以分为:持久节点,临时节点,顺序节点;

  在节点的创建过程中,可以组合使用,于是有以下四种组合:

    (1)持久节点:该节点一旦被创建,就会一直存在于ZK服务器上,直到有删除操作来主动清除这个节点;

    (2)持久顺序节点:ZK中,每个父节点会为其第一级子节点维护一份顺序,用于记录下每个节点的先后顺序。

    (3)临时节点:临时节点生命周期和客户端会话绑定在一起,客户端会话失效,这个节点被自动清理掉。(客户端失效非TCP连接断开,另外不能基于临时节

            点创建子节点)。

    (4)临时顺序节点:特性和持久顺序节点类似;

     状态信息:zk上的数据节点进行数据的写入子节点创建两个动作;一些状态说明:

      <1> czxid :Create ZXID :表示数据节点被创建时的事务ID;

      <2> mzxid: Modified ZXID :表示该节点最后一次被更新时的事务;

      <3> ctime : 节点创建时间。

        version,cversion,aversion等状态属性后续继续介绍

<3> 版本:(保分布式数据原子性操作)

  zk引入版本概念:每个数据节点都有三种类型的版本信息:

    (1)version :当前结点的数据内容版本号;

    (2)cversion:当前数据子节点的版本号;

    (3)aversion:当前数据节点ACL变更的版本号;

    以version为例:一个数据节点 /zk 被创建之后,节点的version值是0,代表 节点自创建以来被更新过 0 次

     分布式领域-锁:一个乐观锁的事务控制分为三个阶段:数据读取,写入校验,数据写入;其中写入校验是整个乐观锁控制的关键所在。在写入校验阶段,事务会检查数据在读取阶段是否有其他事务对数据进行修改,确保数据的一致性;在zk中,使用这种版本号version来实现这种。通过获取当前version和version对比,保证两个版本匹配;

<4> Watcher 和 <5> ACL 内容较多,后续章节继续介绍!

  

Zookeeper内部实现分布式数据一致性(底层系统模型)(一)的更多相关文章

  1. 【分布式】Zookeeper系统模型

    一.前言 前面已经讲解了Zookeeper的一些应用场景,但是并没有深入到Zookeeper内部进行分析,本篇将讲解其系统模型. 二.系统模型 2.1 数据模型 Zookeeper的数据节点称为ZNo ...

  2. zookeeper系列(六)zookeeper的系统模型(数据树)

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6072597.html尊重作者原创,奇文共欣赏,大家共同学 ...

  3. 分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

    1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景 ...

  4. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  5. 透过CAT,来看分布式实时监控系统的设计与实现

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  6. Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

    参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分 ...

  7. Zookeeper 如何保证分布式系统数据一致性

    写在前面 分布式架构出现后,越来越多的分布式系统会面临数据一致性的问题.目前,ZooKeeper 是在解决分布式数据一致性上最成熟稳定且被大规模应用的工业级解决方案. ZooKeeper 保证 分布式 ...

  8. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  9. [源码解析] PyTorch分布式优化器(3)---- 模型并行

    [源码解析] PyTorch分布式优化器(3)---- 模型并行 目录 [源码解析] PyTorch分布式优化器(3)---- 模型并行 0x00 摘要 0x01 前文回顾 0x02 单机模型 2.1 ...

随机推荐

  1. Spring Security (CORS)跨域资源访问配置

    1.CORS介绍 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源(协议 + 域名 + 端口)服务 ...

  2. 【POJ - 2431】Expedition(优先队列)

    Expedition 直接中文 Descriptions 一群奶牛抓起一辆卡车,冒险进入丛林深处的探险队.作为相当差的司机,不幸的是,奶牛设法跑过一块岩石并刺破卡车的油箱.卡车现在每运行一个单位的距离 ...

  3. 【CodeForces - 1200C】Round Corridor (数论gcd)

    Round Corridor  Descriptions Amugae位于一个非常大的圆形走廊中.走廊由两个区域组成.内部区域等于nñ扇区,外部区域等于m米部门.在相同区域(内部或外部)的每对扇区之间 ...

  4. Nacos(二):SpringCloud项目中接入Nacos作为注册中心

    前言 通过上一篇文章:Nacos介绍简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心 上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持 ...

  5. sqoop与PG库导入导出数据

    导入数据到Hive sqoop import --connect jdbc:postgresql://172.66.6.666/radar5g4h --username postgres --pass ...

  6. Java基础及JavaWEB以及SSM框架学习笔记Xmind版

    Java基础及JavaWEB以及SSM框架学习笔记Xmind版 转行做程序员也1年多了,最近开始整理以前学习过程中记录的笔记,以及一些容易犯错的内容.现在分享给网友们.笔记共三部分. JavaSE 目 ...

  7. 谈自由,ASP.NET Core才是未来?

    首先我要说一下自己对自由的理解: 自由是我可以选择不干什么,但我要保留我可以干什么的可能性. 比如说我现在只有一个码农的角色,但我仍然要保留我可以扮演其他角色的可能, 比如成为一个作者,当我写下文章的 ...

  8. 基础部分之System、Object、Calendar、StringBuffer

    System.out.println(obj)和 System.out.println(obj.toString())区别 public static void main(String[] args) ...

  9. SpringIoC和SpringMVC的快速入门

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ Spring的优势? 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器 ...

  10. js中的数据类型,以及如何检测数据类型

    基本数据类型:string,number,boolean,null,undefined,symbol 引用数据类型:object(array,function...) 常用的检测数据类型的方法一般有以 ...