搞懂分布式技术3:初探分布式协调服务zookeeper

时间:2022-09-04 23:24:56

搞懂分布式技术3:初探分布式协调服务zookeeper

1.Zookeepr是什么

Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知。集群管理,Master选举,分布式锁和分布式队列等功能。

2.zookeeper可以保证的分布式一致性

a.顺序一致性

从一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到zookeeper中去

b.原子性

所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的。

c.单一视图

任意客户端看到的服务器数据模型都是一致的

d.可靠性

一旦服务成功的应用了一个事务,并完成对客户端响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非另一个事务又对其进行变更

e.实时性

Zookeeper仅仅保证在一定时间内,客户端最终一定能够从服务器上读取到最新的数据状态。

3.zookeeper的设计目标

目标一:简单的数据模型

Zookeeper可以让分布式程序能通过一个共享的、树型结构的名字空间来进行相互协调(和windows系统的文件结构相同,是有一系列的ZNode节点之间的层级关系构成)

目标二:可构建集群

3到5台机器就可以组成一个可用的zookeeper集群

目标三:顺序访问

对于来自客户端的每一个更新请求,zookeeper都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序。

目标四:高性能

Zookeeper把所有的节点数据都存储在内存中(提高了服务器吞吐、减少了延迟),并直接服务于客户端所有非事务请求,因此尤其适用于以读操作为主的应用场景。

4.zookeeper的基本概念

集群角色

在 zookeeper 集群中,各个节点总共有三种角色,分别是:leader,follower,observer

而不是Master/slave(主备机模式)

会话(session)

Session是指客户端的会话,Zookeeper对外的端口默认2181,可以通过sessionTimeout设置会话超时时间,由于服务器压力、网络原因或客户端主动断开等原因使客户端链接断开,只要在sessionTimeout规定时间内就能够重新链接上集群的任意一台服务器,之前的会话仍然有效。

数据节点(ZNode)

ZNode保存在zookeeper内存中,数据模型是一个树(ZNode Tree)由(/)进行分割路径

版本

每个节点都会存储数据,zookeeper会为其维护一个Stat的数据结构,其中包括三个版本信息

cversion= 0 子节点的版本号

aclVersion= 0 表示acl的版本号,修改节点权限

dataVersion= 1 表示的是当前节点数据的版本号

Watcher

Watcher(事件监听器),非常重要的特性。Zookeeper允许用户在指点节点上注册一些Watcher,并在一些特定的事件触发的时候,通知客户端(可实现分布式协调服务)

Zookeeper的Watcher VS JVM?

从某种角度来说,可以这样对比(个人看法,可以讨论),ZooKeeper对等于JVM,ZooKeeper包含状态对象(ZNode)和分布式进程的底层执行引擎Zab,而JVM内部包含堆(多线程共享的大量对象存放区域)和多线程执行正确性约束规范JMM(Java内存模型),JMM确保了多线程的执行顺序是正确的。Zab协议使得ZooKeeper的内部修改状态操作直接是有序串行的,而JVM内部则是乱序并行的,需要添加额外的机制才能保证时序(内存屏障、处理器原子指令),而状态读取时,JVM和ZooKeeper都存在直接读取时读到旧数据,但ZooKeeper有Watch机制使得响应式读取更高效,而JVM只能使用底层的内存屏障刷新共享状态,以便其他线程再次读取时获得正确的新数据。

ZooKeeper提供的接口使得所有的分布式进程的执行都是异步非阻塞的(WaitFree算法),内部是基于Version的CAS操作,而JVM提供了阻塞的和非阻塞的多种接口,有Synchronized、Volatile、AtomicOperations。基于接口之上构建线程或分布式进程之间更复杂的同步或协调功能时,Java并发库直接提供了闭锁、循环栅栏、信号量等同步工具以及基础的抽象队列同步器,而ZooKeeper则需要用户基于接口自行构建各种分布式协调功能(分布式锁、分布式发布订阅、集群成员关系管理)

对比:

        ZooKeeper                       JVM

共享状态对象: ZNode 堆中对象

底层执行模式: Zab顺序执行 多处理器并发执行(内存屏障、原子机器指令)

API接口: Get、Watch_Get、Cas_Set、Exist Synchronized、volatile、final、Atomic

协调或同步功能: 分布式发布订阅、锁、读写锁 并发库同步工具、基于抽象队列同步器构建的同步组件

Zookepper的Watcher架构?

客户端先向ZooKeeper服务端成功注册想要监听的节点状态,同时客户端本地会存储该监听器相关的信息在WatchManager中,当ZooKeeper服务端监听的数据状态发生变化时,ZooKeeper就会主动通知发送相应事件信息给相关会话客户端,客户端就会在本地响应式的回调相关Watcher的Handler

Zookeeper的Watcher机制主要包括客户端线程、客户端WatcherManager、Zookeeper服务器三部分。客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。

Zookepper的Watcher的特性?

1.Watch是一次性的,每次都需要重新注册,并且客户端在会话异常结束时不会收到任何通知,而快速重连接时仍不影响接收通知。

2.Watch的回调执行都是顺序执行的,并且客户端在没有收到关注数据的变化事件通知之前是不会看到最新的数据,另外需要注意不要在Watch回调逻辑中阻塞整个客户端的Watch回调

3.Watch是轻量级的,WatchEvent是最小的通信单元,结构上只包含通知状态、事件类型和节点路径。ZooKeeper服务端只会通知客户端发生了什么,并不会告诉具体内容

ACL

access control list

权限控制

CREATE:创建子节点的权限

READ:获取子节点数据和子节点列表的权限

WRITE:更新节点数据的权限

DELETE:删除节点数据的权限

ADMIN:设置节点ACL的权限

搞懂分布式技术3:初探分布式协调服务zookeeper的更多相关文章

  1. 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法

    搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...

  2. 搞懂分布式技术11:分布式session解决方案与一致性hash

    搞懂分布式技术11:分布式session解决方案与一致性hash session一致性架构设计实践 原创: 58沈剑 架构师之路 2017-05-18 一.缘起 什么是session? 服务器为每个用 ...

  3. 搞懂分布式技术12:分布式ID生成方案

    搞懂分布式技术12:分布式ID生成方案 ## 转自: 58沈剑 架构师之路 2017-06-25 一.需求缘起 几乎所有的业务系统,都有生成一个唯一记录标识的需求,例如: 消息标识:message-i ...

  4. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  5. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

  6. 分布式协调服务Zookeeper集群之ACL篇

    分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...

  7. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  8. 分布式协调服务ZooKeeper工作原理

    分布式协调服务ZooKeeper工作原理 原创 2016-02-19 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 大数据处理框架Hadoop.R ...

  9. 1.9 分布式协调服务-Zookeeper(一)

    前言 分布式环境的特点 分布性 并发性 程序运行过程中,并发性操作是很常见的.比如同一个分布式系统中的多个节点,同时访问一个共享资源.数据库.分布式存储 无序性 进程之间的消息通信,会出现顺序不一致问 ...

随机推荐

  1. 数量经济学推荐的Julia教程

    http://quant-econ.net/jl/learning_julia.html Julia最为号称和c媲美的运行速度,想python一下简单的语法,虽然发展还不完善,但任然值得去关注. Ju ...

  2. ASPNET 导出EXCEL表

    其实网上有很多关于Excel的例子,但是不是很好,他们的代码没有很全,读的起来还很晦涩.经过这几天的摸索,终于可以完成我想要导出报表Excel的效果了.下面是我的效果图. 一.前台的页面图 GridV ...

  3. WPF自定义空心文字

    首先创建一个自定义控件,继承自FrameworkElement,“Generic.xaml”中可以不添加样式. 要自定义空心文字,要用到绘制格式化文本FormattedText类.FormattedT ...

  4. JavaScript-也来谈--闭包

    闭包,以前研究过,可能是当初理解的不够透彻,现在又忘了,(给自己一个台阶下`-...)毕竟js一直没怎么用, 为了防止自己过段时间再忘了,写篇重要的闭包重点, 这样时不时也能温习下知识,不用每次想了解 ...

  5. Git CMD - merge: Join two or more development histories together

    命令格式 git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit] [-s <strategy>] [-X <st ...

  6. 使用html,JavaScript,ajax写一个小型实例

    //1.创建受捐单位数组 var arrOrgData = [     { "Id": 1, "OrgName": "红十字会" },    ...

  7. &lbrack;LeetCode&rsqb; Sentence Similarity II 句子相似度之二

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  8. Docker容器学习梳理 - 容器硬盘热扩容

    前面已介绍了docker很多知识点的操作记录,今天这里梳理下docker容器空间扩展的操作.默认情况下,物理机下创建的docker容器的空间是10G(虚拟机下创建的docker容器空间就是虚拟机的空间 ...

  9. Linux内核及分析 第四周 扒开系统调用的三层皮(上)

    实验过程 选择20号系统调用getpid(取得进程识别码) 在网上查询getpid函数的C语言代码以及其嵌入式汇编语句 C语言代码: #include <stdio.h> #include ...

  10. impress&period;js

    介绍一下 impress.js是一个非常炫酷的幻灯片展示框架,依靠CSS3技术. impress.js使用起来非常简单,下面就来简单介绍一下其用法. Start 首先,当然要引入impress.js. ...