专栏首页Java职业技术分享zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
原创

zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》

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

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

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

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点需要分析的

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

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

zookeeper在CAP问题上做的取舍

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

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

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

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

给大家推荐一个程序员学习交流群:863621962。群里有分享的视频,还有思维导图

群公告有视频,都是干货的,你可以下载来看。主要分享分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 别怕,手把手带你撕、拉、扯下SpringMVC的外衣

    这是一个最经典的SpringMVC执行流程图,相信做Java开发的都看过,其中有三个核心的地方,分别是HandlerMapping、HandlerAdapter...

    Java知音
  • 史上最全Redis高可用技术解决方案大全

    Redis 单副本,采用单个Redis节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

    Java知音
  • Spring Boot 面试题精华

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.

    Java知音
  • kettle使用命令行来运行ktr和kjb

    1.ktr的运行:运行transformation文件是通过Pan.bat来运行的。

    用户5640963
  • 【项目源码】C语言模拟彩票系统(VC6环境)

    各位,今天继续给大家放C语言的源码,这次是用C语言实现的模拟彩票系统,很好玩哦~看图: ? 功能选择: ? 用户可以选择机选还是自选,完成选号,然后可以兑奖~...

    编程范 源代码公司
  • MySQL explain命令详解

    explain显示了MySQL如何使用索引来处理SELECT语句以及连接表。在分析慢查询时,可以帮助选择更好的索引和写出更优的查询语句。

    JouyPub
  • 因为真实,感动了我,忍不住一遍一遍的回味

    5位年过80岁的老人,相聚在昔日好友的追悼会上,对着大家年轻时候在海边的照片,勾起了他们骑摩托车环岛旅行的梦想。虽然在照片中的7个人里面,有2人已经离开了人世。...

    用户4361942
  • 神经网络图的简介(基本概念,DeepWalk以及GraphSage算法)

    近来,图神经网络(GNN)在各个领域广受关注,比如社交网络,知识图谱,推荐系统以及生命科学。GNN在对图节点之间依赖关系进行建模的强大功能使得与图分析相关的研究...

    AI研习社
  • 总理记者会上传递的五大互联网信号

    文/田甜、刘金松   3月16日上午,十二届全国人大四次会议在人民大会堂举行记者会,李克强总理在金色大厅会见中外记者并回答记者提问。   今年的记者会上,共有1...

    腾讯研究院
  • 彻底搞懂红黑树

    红黑树性质 1、每个结点或是红色的,或是黑色的 2、根节点是黑色的 3、每个叶结点(NIL)是黑色的 4、如果一个节点是红色的,则它的两个儿子都是...

    大闲人柴毛毛

扫码关注云+社区

领取腾讯云代金券