二:ZooKeeper术语概念
一:Zookeeper的设计目标
三:zookeeper的基本概念
介绍Zookeeper的几个核心概念,这些概念贯穿于本书之后对ZooKeeper更深入的讲解,因此有必要预先了解这些概念。●集群角色
一:集群角色
通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最典型的集群模式就是Master/Slave模式(主备模式)。在这种模式中,我们把能够处理所有写操作的机器称为Master机器,把所有通过异步复制方式获取最新数据,并提供读服务的机器称为Salve机器。
而在ZooKeeper中,这些概念就被颠覆了。它没有沿用传统的Master/Slave概念,而是引入Leader,Follower和Observer三种角色。ZooKeeper集群中的所有机器通过一个Leader选举过程来选定一台被称为“Leader”的机器,Leader服务器为客户端提供读和写服务。除Leader外,其他机器包括Follower和Observer.Follower和Observer都能够提供读服务,唯一的区别在于,Observer机器不参与Leader选举过程,也不参与写操作的“过半写成功”策略。因此Observer可以在不影响写性能的情况下提升集群的读性能。
--->Leader
(1)Leader服务器是整个Zookeeper集群工作机制的核心
--->Follower
(1)Follower服务器是Zookeeper集群状态的跟随者
--->Observer
(1)Observer服务器充当一个观察者的角色
--->两种设计模式
(1)Leader,Follower设计模式
(2)Observer观察者设计模式
二:会话
--->会话是指客户端和ZooKeeper服务器的连接。Zookeeper中的会话叫Session,客户端与服务器建立一个TCP的长连接来维持一个Session,客户端在启动的时候首先会与服务器建立一个TCP连接,通过这个连接,客户端 能够通过心跳检测与服务器保持有效会话,也能向ZK集群服务器发送请求并获得响应。
--->ZooKeeper对外的服务端口默认是2181
--->通过TCP链接,客户端能够通过心跳检测与服务器保持有效会话,也能够向ZK集群发送请求并接受响应,同时还能够通过该链接接受来自服务器的Watch事件通知。
--->Session的sessionTimeout来设置一个客户端会话的超时时间。当由于服务器压力太大,网络故障或是客户端主动断开链接等各种原因导致客户端链接断开时,只要在sessionTimeout规定的时间内能够重新链接上集群中任意一台服务器,那么之前创建的会话仍然有效。
三:数据节点
--->ZooKeeper集群中有两类节点
--->一种节点:集群中的一台机器称之为一个节点,称为机器节点。
--->另一种节点:数据模型中的数据单元Znode,又分为持久节点和临时节点。
●持久节点
●临时节点
--->Zookeeper的数据模型是一棵树,树的节点就是Znode,Znode中可以保存信息。(数据内容和一系列属性信息)
--->Zookeeper的数据模型
--->持久节点:一旦这个ZNode被创建了,除非主动进行ZNode的删除操作,否则这个ZNode将一直保存在ZooKeeper上。
--->临时节点:它的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被删除。
--->Zookeeper还允许用户为每个节点添加一个特殊的属性,SEQUENTIAL。一旦节点被标记上这个属性,那么在这个节点被创建时,ZooKeeper会自动在其节点名字后面加上一个整型数字,这个整型数字是一个由父节点维护的自增数字。
四:版本
--->版本用来寄来记录节点数据,或者节点的子节点列表,或者是权限信息的修改次数
--->版本类型和说明,对于ZNode,Zookeeper都会为其维护一个叫做Stat的数据结构
● version(当前数据节点数据内容的版本号)
● cversion(当前数据节点子节点的版本号)
● aversion(当前数据节点ACL变更版本号)
--->利用版本来实现分布式的锁服务
--->锁分为悲观锁和乐观锁
悲观锁:又叫悲观并发锁,是数据库中一种非常严格的锁策略,具有强烈的排它性,能够避免不同事务对同一数据并发更新造成的数据不一致性,在上一个事务没有完成之前,下一个事务不能访问相同的资源,适合数据更新竞争非常激烈的场景
乐观锁:相比悲观锁,乐观锁使用场景更多,悲观锁认为事务访问相同数据的时候一定会出现相互干扰,所以简单粗暴的使用排它访问方式,而乐观锁认为不同事务访问相同资源是很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制,当然
乐观锁也是锁,它还是会有并发控制。对于数据库我们通常的做法是在每个表中增加一个version的版本字段,事务修改数据前先读取数据,当然版本号也顺势读取出来,然后把这个读取出来的版本号加入到更新语句的条件中,比如,读取出来的版本号是1,我们修改数据的语句可以这样写,update某某表 set 字段=某某 where id=某某 and version=1.那么如果更新失败了说明当时并发情况下已经有其他事务对数据已经修改过了,那么系统需要抛出错误给客户端,让客户端自行处理,客户端可以选择重试。
五:watcher
--->事件监听器。
--->Zookeeper集群允许用户在指定的节点上注册Watcher(事件监听器),当数据节点变化的时候,Zookeeper服务器会把这个变化的通知发送给感兴趣的客户端。客户端收到这个变化通知,可以再回到Zookeeper中去取得数据的详细信息。
六:ACL权限控制
--->ACL是Access Control Lists的简写,Zookeeper采用ACL策略来进行权限控制
--->ACL拥有以下五种权限类型
●CREATE:创建子节点的权限
●READ:获取节点数据和子节点列表的权限
●WRITE:更新节点数据的权限
●DELETE:删除子节点的权限
●ADMIN:设置节点ACL的权限
二:ZooKeeper术语概念的更多相关文章
- SQLite入门与分析(二)---设计与概念(续)
SQLite入门与分析(二)---设计与概念(续) 写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...
- 学习MQ(二)基本概念
学习MQ(二)基本概念 这次简单罗列一下MQ的基本概念,还有我对它们的理解 1.queue manager 队列管理器,这是MQ系统中最上层的一个概念.每一个queue manager都有一个侦听器, ...
- 1、ZooKeeper 基本概念、使用方法、实践场景
ZooKeeper 基本概念 ZooKeeper 是面向分布式应用的协调服务,其实现了树形结构的数据模型(与文件系统类似),并且提供了简洁的编程原语.ZooKeeper 能够作为基础,用于构建更高层级 ...
- JVM 内部原理(二)— 基本概念之字节码
JVM 内部原理(二)- 基本概念之字节码 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Enviro ...
- ZooKeeper 基本概念并介绍RPC中Netty和Zookeeper的使用
前言 ZooKeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper提供一个类似Linux文件系统的属性结构,每个节点可存储少量的内存文件,并提供每 ...
- 大数据入门第十四天——Hbase详解(二)基本概念与命令、javaAPI
一.hbase数据模型 完整的官方文档的翻译,参考:https://www.cnblogs.com/simple-focus/p/6198329.html 1.rowkey 与nosql数据库们一样, ...
- ZooKeeper 系列(一)—— ZooKeeper核心概念详解
一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念 3.1 集群角色 3.2 会话 3.3 数据节点 3.4 节点 ...
- Networking 基本术语/概念
目录 文章目录 目录 基本概念 冲突域(Collision Domain) 广播域(Broadcast Domain) 冲突域与广播域的区别 IP 网络数据传输方式 物理网络设备 发展简述 中继器(R ...
- storm基础系列之二----zookeeper的作用
在storm集群中,我们常常使用zookeeper作为协调者.那么具体发挥的是什么作用呢? 概括来说,zookeeper是nimbus和supervisor进行交互的中介.具体来说有二: 1.nimb ...
随机推荐
- linux下关于gz和bz2压缩格式的常用操作技巧
.gz和.bz2都是linux下压缩文件的格式,有点类似windows下的.zip和.rar文件..bz2和.gz的区别在于,前者比后者压缩率更高,后者比前者花费更少的时间. 也就是说同一个文件,压缩 ...
- volatile 关键字的复习
今天早上看何登成的微博(http://hedengcheng.com/?p=725) 对volatile 关键字语意进行了深入分析. 看完之后,用自己的话总结如下: 1.c/c++ volatile中 ...
- PowerMockito(PowerMock用法)
网络上大部分是powermock 的用法, PowerMock有两个重要的注解: –@RunWith(PowerMockRunner.class) –@PrepareForTest( { YourCl ...
- three.js 简介
What is Three.js? Let's try to describe it briefly: Three.js is a library that makes WebGL - 3D in t ...
- mq_notify
NAME mq_notify - 通知进程可以接收一条消息 (REALTIME) SYNOPSIS #include <mqueue.h> int mq_notify(mqd_t mqde ...
- PHP组合模式、策略模式
一.问题 模拟不同课程有不同的收费方式,并且能灵活改变(新增或删减),如讲座可以固定收费也可改为按时收费,研讨会也是. 二.模式简介及关键点 1.在父类代码中使用条件语句是一种退倒,可以用多态来代替条 ...
- Action的执行
异步Action的定义 两种异步Action方法的定义 xxxAsync/xxxCompleted 这种形式的异步只能定义在实现了AsyncController的Controller中.针对Task的 ...
- [c/c++]指针数组 pk 数组指针
首先强调 指针数组归根结底是个数组:数组指针归根结底是个指针. 数组指针 以int (*int)[10]为例 ()的优先级大于[],因此首先它是一个指针,它指向一个数组,数组的维数是10.因此数组指针 ...
- poj 1180 斜率优化dp
这个题目要是顺着dp的话很难做,但是倒着推就很容易退出比较简单的关系式了. dp[i]=min(dp[u]+(sum[u-1]-sum[i-1]+s)*f[i]);dp[i]代表从i到结尾需要花费的代 ...
- 深入理解Java内存模型(三)——顺序一致性
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码 ...