ZooKeeper 架构设计与角色分工

栏目: 后端 · 发布时间: 6年前

内容简介:本篇文章阅读时间4分钟左右zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同时作为分布式系统的它是怎么保证扩展性的?问题很多,读完接下来的内容你会有答案。

本篇文章阅读时间4分钟左右

ZooKeeper 架构设计与角色分工

zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同时作为分布式系统的它是怎么保证扩展性的?问题很多,读完接下来的内容你会有答案。

ZooKeeper 架构设计与角色分工

上图来自zookeeper的官方文档,我解释下这张图的各个角色(observer在上图中可以理解为特殊的follower)

ZooKeeper 架构设计与角色分工

另外 :follower和observer同时均为learner(学习者)角色,learner的分工是同步leader的状态。

zookeeper的读写

ZooKeeper 架构设计与角色分工 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点需要分析的

  1. 节点多了会导致写数据延时非常大(需要半数以上follower写完提交),因为需要多个节点同步.

  2. 节点多了Leader选举非常耗时, 就会放大网络的问题. 可以通过引入 observer节点缓解这个问题.

zookeeper在CAP问题上做的取舍

严格地意义来讲zk把取舍这个问题抛给了开发者即用户。

为了协调CA(一致性和可用性),用户可以自己选择是否使用Sync()操作。使用则保证所有节点强一致,但是这个操作同步数据会有一定的延迟时间。反过来若不是必须保证强一致性的场景,可不使用sync,虽然zookeeper同步的数据很快,但是 此时是没有办法保证各个节点的数据一定是一致的 ,这一点用户要注意。实际的开发中就要开发者根据实际场景来做取舍了,看更关注一致性还是可用性。

为了协调AP(一致性和扩展性),用户可以自己选择是否添加obsever以及添加个数,observer是3.3.0 以后版本新增角色,它不会参加选举和投票过程,目的就是提高集群扩展性。因为follower的数量不能过多, follower需要参加选举和投票,过多的话选举的收敛速度会非常慢,写数据时的投票过程也会很久 。observer的增加可以提高可用性和扩展性,集群可接受client请求的点多了,可用性自然会提高,但是一致性的问题依然存在,这时又回到了上面CA的取舍问题上。

作为分布式集群,系统是如何保证各台机器间的状态是一致的?下一篇讲下paxos协议和一致性。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员第二步

程序员第二步

尹华山 / 人民邮电出版社 / 2013-11 / 45.00元

这本书是写给程序员和项目经理的。作者结合自身的丰富成长历程,通俗易懂地讲述了一名程序员如何才能成为一名优秀的项目经理。内容涉及职业规划、学习方法、自我修炼、团队建设、项目管理等,书中理清了项目管理领域中典型的误区及具有迷惑性的观点,并对项目中的难点问题提出了针对性的解决方法。 全书行文流畅,严谨中带着活泼,理智中透着情感,给读者带来轻松愉快的阅读感受。书中诸多富有创见的观点,让人耳目一新,引......一起来看看 《程序员第二步》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码