zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
本篇文章阅读时间5分钟左右


zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同时作为分布式系统的它是怎么保证扩展性的?问题很多,读完接下来的内容你会有答案。
上图来自zookeeper的官方文档,我解释下这张图的各个角色(observer在上图中可以理解为特殊的follower)
| 角色 | 分工 | 数量 |
|---|---|---|
| client客户端 | 请求发起方 | 不限 |
| observer观察者 | 接受用户读写请求,写转发给leader,读直接返回(选主过程不参加投票) | 不限 |
| follower跟随者 | 接受用户读写请求,写转发给leader,读直接返回(选主过程参加投票) | 奇数个(不可过多) |
| leader领导者 | 负责提议,更新系统状态 | 1个 |
另外:follower和observer同时均为learner(学习者)角色,learner的分工是同步leader的状态。
zk的读写

zookeeper的各个复制集节点(follower,leader,observer)都包含了集群所有的数据且存在内存中,像个内存数据库。更新操作会以日志的形式记录到磁盘以保证可恢复性,并且写入操作会在写入内存数据库之前序列化到磁盘。
每个ZooKeeper服务器都为客户端服务。客户端只连接到一台服务器以提交请求。读取请求由每个服务器数据库的本地副本提供服务。更改服务状态,写请求的请求由zab协议处理。
作为协议协议的一部分,来自客户端的所有写入请求都被转发到称为leader的单个服务器。其余的ZooKeeper服务器(称为followers)接收来自领导者leader的消息提议并同意消息传递。消息传递层负责替换失败的leader并将followers与leader同步。
ZooKeeper使用自定义原子消息传递协议zab。由于消息传递层是原子的,当领导者收到写入请求时,它会计算应用写入时系统的状态,并将其转换为捕获此新状态的事务。
zk的CAP原则
cap原则是指作为一个分布式系统,一致性,可用性,分区容错性这三个方面,最多只能任意选择两种。就是必定会要有取舍。
- 一致性C
Zookeeper是强一致性系统,同步数据很快。但是在不用sync()操作的前提下无法保证各节点的数据完全一致。zookeeper为了保证一致性使用了基于paxos协议且为zookeeper量身定做的zab协议。这两个协议是什么东西之后的文章会讲。
- 可用性A(高可用性和响应能力)
Zookeeper数据存储在内存中,且各个节点都可以相应读请求,具有好的响应性能。Zookeeper保证了可用性,数据总是可用的,没有锁.并且有一大半的节点所拥有的数据是最新的,实时的。
- 分区容忍性P
有2点需要分析的
- 节点多了会导致写数据延时非常大(需要半数以上follower写完提交),因为需要多个节点同步.
- 节点多了Leader选举非常耗时, 就会放大网络的问题. 可以通过引入 observer节点缓解这个问题.
zk在CAP问题上做的取舍
严格地意义来讲zk把取舍这个问题抛给了开发者即用户。
为了协调CA(一致性和可用性),用户可以自己选择是否使用Sync()操作。使用则保证所有节点强一致,但是这个操作同步数据会有一定的延迟时间。反过来若不是必须保证强一致性的场景,可不使用sync,虽然zookeeper同步的数据很快,但是此时是没有办法保证各个节点的数据一定是一致的,这一点用户要注意。实际的开发中就要开发者根据实际场景来做取舍了,看更关注一致性还是可用性。
为了协调AP(一致性和扩展性),用户可以自己选择是否添加obsever以及添加个数,observer是3.3.0 以后版本新增角色,它不会参加选举和投票过程,目的就是提高集群扩展性。因为follower的数量不能过多,follower需要参加选举和投票,过多的话选举的收敛速度会非常慢,写数据时的投票过程也会很久。observer的增加可以提高可用性和扩展性,集群可接受client请求的点多了,可用性自然会提高,但是一致性的问题依然存在,这时又回到了上面CA的取舍问题上。
作为分布式集群,系统是如何保证各台机器间的状态是一致的?下一篇讲下paxos协议和一致性。
推荐阅读:
评论不能及时回复可直接加公众号提问或交流,知无不答,谢谢 。
zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》的更多相关文章
- zookeeper核心-zab协议-《每日五分钟搞定大数据》
上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...
- HDFS-异常大全-《每日五分钟搞定大数据》
点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...
- zookeeper-操作与应用场景-《每日五分钟搞定大数据》
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- zookeeper-如何修改源码-《每日五分钟搞定大数据》
本篇文章仅仅是起一个抛砖迎玉的作用,举一个如何修改源码的例子.文章的灵感来自 ZOOKEEPER-2784. 提一个问题先 之前的文章讲过zxid的设计,我们先复习下: zxid有64位,分成两部分: ...
- zookeeper-监控与优化-《每日五分钟搞定大数据》
本文的命令和配置都是基于zookeeper-3.4.6版本.优化很多时候都是基于监控的,所以把这两个内容写在了一起,慢慢消化. 监控 简单地说,监控无非就是获取服务的一些指标,再根据实际业务情况给这些 ...
- zookeeper-分布式锁的代码实现-【每日五分钟搞定大数据】
本文涉及到几个zookeeper简单的知识点,永久节点.有序节点.watch机制.比较基础,熟悉的就别看了跳过这篇吧 每个线程在/locks节点下创建一个临时有序节点test_lock_0000000 ...
- redis- info调优入门-《每日五分钟搞定大数据》
本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011 ...
- 五分钟搞定Go.js
五分钟搞定Go.js 1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...
- 五分钟搞定Linux容器
[TechTarget中国原创] Linux容器针对特定工作负载提供了全新的灵活性与可能性.存在很多解决方案,但是没有一个解决方案能够像systemd容器那样进行快速部署.给我五分钟,本文将介绍如何使 ...
随机推荐
- LRU(最近最少使用淘汰算法)基本实现
LRU(Least Recently Used) 出发点:在页式存储管理中,如果一页很长时间未被访问,则它在最近一段时间内也不会被访问,即时间局部性,那我们就把它调出(置换出)内存. 为了实现LRU ...
- 编程经验点滴----巧妙解决 Oracle NClob 读写问题
最近一个新项目中,尝试在 Oracle 数据库中使用 NCLOB 来保存大的 xml 字符串. 在代码自动生成工具(通过 JDBC 驱动程序,读数据库表结构,自动生成对应的 java 代码,包含增加. ...
- MySQL状态变量Aborted_connects与Aborted_clients浅析
关于MySQL的状态变量Aborted_clients & Aborted_connects分别代表的意义,以及哪些情况或因素会导致这些状态变量变化呢?下文通过实验测试来验证一下,首先我们来看 ...
- [转载] erp开发-数据查询优化方法
系统运行环境:MSSQL 2008随着公司业务快速发展,各种业务数据如火箭般的高速增长,出现一个又一个千万行数据的表,往往大表之间的关联,耗费系统大量的磁盘io,并且会影响正常的实时业务的操作,所以我 ...
- 【Git学习二】深入了解git checkout命令
检出命令(git checkout)是Git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区.检出命令的用法如下: 用法一:git checkout[-q][<commit& ...
- python——虚拟环境之virtualenvwrapper-win(windows10,64位)
1 问题描述 当M个项目需要N个版本的python环境配置时(M>N)时,我们没有必要对每个项目都创建一个虚拟环境,只需要创建N个虚拟环境即可.这样节省了大量存储空间(特别是当M远大于N时).但 ...
- LeetCode算法题-Best Time to Buy and Sell Stock
这是悦乐书的第172次更新,第174篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第31题(顺位题号是121).假设有一个数组,其中第i个元素是第i天给定股票的价格.如果 ...
- 强大的Notepad++,竟然还是自由使用的
这么好用的工具,竟然还是可以自由使用的的,当然就不用去找某些软件的破解版了. 除了本身很好用,还有插件功能,插件许多也是自由使用的,利用插件就可以实现程序员需要的一个手工编辑器了.
- 设计模式のObserver Pattern(观察者模式)----行为模式
一.问题产生背景 又被称为订阅发布模式. 最初流传最广的一个面试题:有一只猫咪,猫咪叫了一声,老鼠跑了,老人惊醒了,男主人骂,小偷吓得不敢动了....这就产生一个问题的模型,当对象间存在一对多关系时, ...
- 利用ENVI FX从RGB提取建筑物轮廓
在QQ热线或者技术咨询会问到:"我有一副RGB的栅格图,想从上面提取相关的一些信息.能不能提取?精度有保证吗?"等等诸如此类的问题.本专题就採用我们经常使用的栅格地图进行建 ...