点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

CAP定理:

一个分布式系统不可能在满足分区容错性(P)的情况下同时满足一致性(C)和可用性(A)。在此ZooKeeper保证的是CP,ZooKeeper不能保证每次服务请求的可用性,在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。另外在进行leader选举时集群都是不可用,所以说,ZooKeeper不能保证服务可用性。

BASE理论

BASE理论是基本可用,软状态,最终一致性三个短语的缩写。BASE理论是对CAP中一致性和可用性(CA)权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。

  1. 基本可用:基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是,这绝不等价于系统不可用。比如正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒。

  2. 软状态:软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

  3. 最终一致性:最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

ZooKeeper特点

  1. 顺序一致性:同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。

  2. 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。

  3. 单一系统映像:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。

  4. 可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

ZAB协议:

ZAB协议包括两种基本的模式:崩溃恢复和消息广播。当整个 Zookeeper 集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与 Leader 服务器保持正常通信时,所有服务器进入崩溃恢复模式,首先选举产生新的 Leader 服务器,然后集群中 Follower 服务器开始与新的 Leader 服务器进行数据同步。

当集群中超过半数机器与该 Leader 服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader 服务器开始接收客户端的事务请求生成事物提案(超过半数同意)来进行事务请求处理。

选举算法和流程:FastLeaderElection(默认提供的选举算法)

目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:

  1. 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。

  2. 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。

  3. 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为leader,服务器1,2成为follower。

  4. 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为follower。

  5. 服务器5启动,后面的逻辑同服务器4成为follower。

zk中的监控原理

zk类似于linux中的目录节点树方式的数据存储,即分层命名空间,zk并不是专门存储数据的,它的作用是主要是维护和监控存储数据的状态变化,通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,zk中的节点的数据上限时1M。

client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变等。

作者:yuanguangxin

链接:https://github.com/yuanguangxin/LeetCode

热门内容:
  • 使用Netty如何做到单机秒级接收35万个对象

  • 别再写满屏的try-catch了,真丑,全局异常处理不会吗?

  • Sentinel实现限流,竟是如此的简单!

  • 《最受欢迎的男友职业排行榜Top10》

  • CTO 写的代码,真是绝了

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)

ZooKeeper的基本原理相关推荐

  1. ZooKeeper原理及使用

    转:http://blog.csdn.net/xinguan1267/article/details/38422149 ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功 ...

  2. Zookeeper 生产实践的一些经验分享

    Zookeeper是一个分布式协调框架,有不错的性能,也经过许多公司的验证,所以在很多场景都有使用.大家一般用Zookeeper来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等.在 ...

  3. 【转】ZooKeeper原理及使用

    原文链接  http://www.wuzesheng.com/?p=2609 ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coord ...

  4. 阿里P8架构师谈:Zookeeper的原理和架构设计,以及应用场景

    什么是 Zookeeper Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如: 统一命名服务 状态同步服务 集群 ...

  5. 基于ZooKeeper的分布式锁和队列

    分布式锁的几种实现: 1.zookeeper分布式锁,基于自增节点 2.Redis分布式锁,基于setnx命令, 基于Redis实现分布式锁:http://blog.csdn.net/daiyudon ...

  6. Hadoop大数据平台搭建课程笔记

    课程介绍 大数据基本介绍 4V特征 体量大:体量庞大 高速:数据产生速度快.存储速度快.处理速度快 多样化:数据的种类和来源多样化.结构化.非结构化.半结构化数据 价值:密度低.体量庞大,有价值的数据 ...

  7. 毕业一年半拿遍所有大厂offer,我是怎么做到的?

    最近一段时间面试了几家互联网公司,陆续通过了阿里.头条.美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的offer 我的基本情况:1 ...

  8. 醍醐灌顶——我眼中的Spring Cloud

    在上一篇文章中,我谈到了自己对于Spring Boot的一些想法,并且根据观察到的现象分析了很多开发者在学习和使用Spring Boot时所存在的误区以及相应的解决方案.那么,在这篇文章中,我将来谈谈 ...

  9. 国内最全的Spring Boot系列之五

    ​历史文章(累计400多篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三& ...

最新文章

  1. jenkins自动化部署工具
  2. Myeclipse 安装svn插件
  3. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)
  4. matplotlib.pyplot常用画图方式函数封装(一)——.plot绘制折线图及设置坐标轴箭头完美解决
  5. 设计模式:依赖倒置原则
  6. java 计算 四分位,Java四分位计算方法
  7. 13、OSPF配置实验之LSA2
  8. PRML 1.6 信息论
  9. envi与arcgis文件转换_ArcGIS ENVI中土地分类格式互转、土地利用转移矩阵、变化图谱计算详解...
  10. JSP从入门到实战视频教程
  11. #天府TV#《什么是成都》爆红背后,还有上千热泪盈眶留言!
  12. 台式计算机 蓝牙,台式电脑蓝牙在哪里打开(手把手教你打开台式电脑蓝牙)...
  13. @ConfigurationProperties(prefix = )异常报错解决方案:
  14. 一说出口就被误解的离职原因,这样补救!
  15. Java实现凯撒密码、维吉尼亚密码、双换位密码、RC4算法加密
  16. python高斯噪声怎么去除_Python图像处理之Pillow--ImageFilter介绍
  17. 一个很好的Git操作指南
  18. 2013年4月TIOBE编程语言排行榜:Objective-C排名首次下滑
  19. java全栈系列之JavaSE-面向对象(构造器)033
  20. WebLogic中间件安装与介绍(详细版约2万字)

热门文章

  1. 2018-4-2 幂律分布函数
  2. 嵌入式BootLoader技术内幕(三)
  3. Linux 工具进阶
  4. tensorflow入门(二)
  5. 2017 Multi-University Training Contest 3 hdu 6063
  6. 使用vue2.0 vue-router vuex 模拟ios7操作
  7. 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)...
  8. 适用于SQL Server生产环境DBA的七大技巧
  9. 刻意练习:LeetCode实战 -- Task30.通配符匹配
  10. 【通俗理解线性代数】 -- 内积与相关