ZooKeeper 到底解决了什么问题?
目标
ZooKeeper 很流行,有个基本的疑问:
ZooKeeper 是用来做什么的?
之前没有ZK,为什么会诞生 ZK?
OK,解答一下上面的疑问:(下面是凭直觉说的)
ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节
ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发
ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群
上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了:
分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?
ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还能简化吗?API 的语义性怎么样?
ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题:
高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?
高可用同上
高可靠同上
Note:本篇 wiki 就是为了解决上述第一个疑问的。(其他疑问请持续关注公众号互联网架构师,会逐步进行解答)
为什么有 ZooKeeper
一个应用程序,涉及多个进程协作时,业务逻辑代码中混杂有大量复杂的进程协作逻辑。
上述多进程协作逻辑,有 2 个特点:
处理复杂
处理逻辑可重用
因此,考虑将多进程协作的共性问题拎出,作为基础设施,让 RD 更加专注业务逻辑开发,即:
ZooKeeper 就是上述多进程协作基础服务的一种。
ZooKeeper 的特点
ZooKeeper 有几个简单特点:
ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API
ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性和可扩展性
ZooKeeper 是存储设施,但特别注意
ZK上存储的数据聚焦为:
协作数据
(元数据
),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等ZK 本质上,可以看作一种
特殊的 FS
特别说明:
应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。
ZooKeeper 的使命
ZK 要解决的核心问题:
ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供
高效
、可靠
的分布式协调服务(基础服务),例如:
统一的命名服务
分布式锁
进程崩溃检测
Leader 选举
配置管理:配置变更时,及时下发到各个 Client。
一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。
多进程协作,整体分为 2 类:
协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态
竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M
特别说明:
不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)
跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类
跨网络多进程协作
,进程通信,基本思路有 2 个:
消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语
共享存储:利用外部共享存储,实现多进程协作,要求
共享存储
提供有序访问,ZK 采用这种方式
真实系统中,跨网络通信,有几个共性问题:
消息延迟:由于网络原因,后发送先到达
处理器性能:由于系统调度原因,消息到达后,延迟处理
时钟偏移:不同物理主机,时钟发生偏移
ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。
ZooKeeper 特性
ZooKeeper 解决的本质问题
分布式系统的一致性问题:
消息传递:延迟性,先发送的消息,不一定先到达;
消息传递:丢失性,发送的消息,可能丢失;
节点崩溃:分布式系统内,任何一个节点都可能崩溃;
在这种情况下,如何保证数据的一致性?
提案投票:基于投票策略,2PC
选举投票:基于投票策略,投出
优先级最高的节点
(包含最新数据的节点)
Paxos 目标:解决
分布式一致性
问题,提高分布式系统容错性
的一致性算法。Paxos 本质:基于
消息传递
的高度容错
的一致性算法
ZooKeeper 定位
ZooKeeper 是:
分布式协调服务
高效、可靠
方便应用程序,聚焦
业务逻辑开发
,而不需要过多关注分布式进程间协作细节
ZooKeeper 不直接暴露原语
,而是,暴露一部分调用方法
组成的 API,类似文件系统的 API,支持应用程序实现自己的原语
。
ZooKeeper 特性
ZooKeeper 可以保证如下分布式一致性特性:
顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行
原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用
单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性)
可靠性:事务一旦执行成功,状态永久保留
实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性
ZooKeeper 设计目标
ZooKeeper 致力于提供高性能
、高可用
、顺序一致性
的分布式协调服务,保证数据最终一致性
。关注公众号互联网架构师回复2T可以获取 Zookeeper 及 Java系列架构视频。
目标一:高性能(简单的数据模型)
采用
树形结构
组织数据节点;全量数据节点,都存储在内存中;
Follower 和 Observer 直接处理非事务请求;
目标二:高可用(构建集群)
半数以上机器存活,服务就能正常运行
自动进行 Leader 选举
目标三:顺序一致性(事务操作的顺序)
每个事务请求,都会转发给 Leader 处理
每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
目标四:最终一致性
通过提议投票方式,保证事务提交的可靠性
提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据
ZooKeeper 出现之前
ZK 出现之前,分布式系统常用两种方式,实现多进程协作:
分布式锁管理器
分布式数据库
ZK 更专注于进程协作,而不提供任何锁接口和通用的存储数据接口。(疑问:ZK 也可以提供啊,我们不使用就行了)
应用服务器,常见的 2 种需求:
Master-Slave Leader 选举:要求提供Master节点选举功能
进程响应跟踪 崩溃检测:要求提供进程存活状态的跟踪
分布式锁:互斥排它锁
ZK 为上述 2 种策略提供了基础 API。
ZooKeeper 不适用的场景:
海量数据存储:ZK 本质是
特殊的 FS
,但 ZK 用于存储元数据
,需要单独存储应用数据
术语介绍
术语 | 解释 |
---|---|
分布式系统 | 跨多个物理主机,由多个独立运行的节点组成的系统 |
原语 |
业务上不可分割的元素/过程,举例:分布式锁原语,可以暴露创建 、查询 、释放 几个方法
|
作者:NingG
地址:http://ningg.top/zookeeper-positioning/
参考资料
[1]
ZooKeeper-Distributed Process Coordination: http://shop.oreilly.com/product/0636920028901.do
[2]
从Paxos到Zookeeper分布式一致性原理与实践: https://book.douban.com/subject/26292004/
关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别
9、2T架构师学习资料干货分享
ZooKeeper 到底解决了什么问题?相关推荐
- 分析zookeeper到底能做什么?
Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...
- 【思考】Docker到底解决了什么问题
本文讲的是[思考]Docker到底解决了什么问题, [编者的话]作者之前是一位B2B行业的从业者,他从自己的角度出发,分析了Docker能够解决的问题.作者认为目前的B2B市场体量还是太小,但是随着D ...
- 一分钟理解 HTTPS 到底解决了什么问题
本文原作者"虞大胆的叽叽喳喳",原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说 ...
- paxos 到底解决了什么问题?
之前一直在研究paxos算法本身,从而忽略了它本质上想解决的问题.那么,paxos算法到底解决的是一个什么问题? 答:简单来说,paxos算法解决的就是一个最终一致性问题.假设一个集群有三个节点,Pa ...
- Zookeeper到底是干嘛的
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...
- zookeeper到底是干什么的?
我也是初学zk,整理下资料,希望能对你有帮助! 提起zk我们总会想到,zk可以被用作注册中心.构建zk集群时候节点最好为奇数-- 可见我们对zk理解仅仅停在表面.那么zk到底是什么呢 ? 一.什么是z ...
- ZooKeeper到底有什么问题?导致阿里为什么不用 ZK 做服务发
- 前言 - 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人 ...
- Redis 的各项功能到底解决了哪些问题?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 来源 ...
- NFT这么香,到底解决了什么问题?
我看,NFT主要是解决了数字资产的所有权问题. 下面我会仔细讲一下,如果你有一些版权知识的话,看起来会比较方便. 如果不太有的话,趁机可以了解一下. 如果你对NFT还没有概念,最好看一下这篇:用直观抓 ...
- 面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...
最新文章
- lisp语言cond和if套用_在'if'语句中设置多行条件的样式?
- 使用迁移学习不断的自我纠正神经网络
- CSS基础工作原理(一)——css规则与选择符器
- 求最大元最小元极大元极小元_极大元、最大元.ppt
- Google-优秀移动站点设计10招
- UVA - 1587 ​​​​​​​Box
- 【计算机科学基础】电子计算机抽象层次
- 一文彻底读懂优秀开源产品MyBatis一级缓存设计!
- 如何通过Facebook幻灯片广告让销售量疯涨
- Mybatis bug修正
- bmp格式图像的读写函数(对一个开源代码的封装)
- linux mysql 数据库同步
- 数据字典怎么写_做数据分析,我只会同环比,谁能教我怎么写结论?
- java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别
- linux 网络检测工具有哪些,Linux系统下常用的网络测速工具有哪些
- rosbag使用方法汇总
- 强化学习--蒙特卡洛法
- 奔驰S400商务型升级前排通风座椅系统,夏天必备的功能
- PyQT之多窗口切换
- 大天使之剑服务器维修公告,大天使之剑————【维护】8月17日更新维护公告...
热门文章
- MySQL下xtrabackup与MTS造成的死锁
- 测试员:你知道未来移动测试的方向是什么样的吗?
- outlook与shairepoint2010 数据同步
- 大型互联网网站架构心得之一:分
- 如何在Mac上备份和共享文本替换?
- HitPaw Watermark Remover for mac(视频图片去水印)
- Audio Hijack 4 for Mac(音频录制工具)
- MWeb Pro for Mac(静态博客生成软件)
- Translatium for Mac(多语言在线翻译工具)
- Jhipster创建微服务【0】——踩坑