5年大数据开发工程师对Zookeeper分布式过程进行协同技术详解
构建分布式系统并不容易。然而,人们日常所使用的应用大多基于分布式系统,在短时间内依赖于分布式系统的现状并不会改变。ApacheZooKeeper旨在减轻构建健壮的分布式系统的任务。ZooKeeper基于分布式计算的核心概念而设计,主要目的是给开发人员提供一套容易理解和开发的接口,从而简化分布式系统构建的任务。
即使有了ZooKeeper,但开发中分布式处理的环节并不是微不足道的事情,因此我们通过本篇可以让你快速熟悉如何通过Apache ZooKeeper构建分布式系统。我们从基本的概念入手,这样可以使你觉得自己就像是分布式系统的专家一样, 在你看到一系列需要注意的警告时,你可能会有一些沮丧,不过不用担心,如果你能够很好地理解我们所阐述的关键点,你已经走在构建良好的分布式系统的正确道路上了。
全篇分为三部分,总共10章的内容,由于细节内容太多了,所以小编就把部分知识点截图粗略的介绍,每个小节里面有更加细化的内容。
第一部分ZooKeeper的概念和基础,这⼀部分适合任何对ZooKeeper感兴趣的读者,该部分介绍ZooKeeper所处理的问题,以及在ZooKeeper的设计中的权衡取舍。
第1章 简介
ZooKeeper的设计保证了其健壮性,这就使得应⽤开发⼈员可以更多关注应⽤本⾝的逻辑,⽽不是协同⼯作上。ZooKeeper从⽂件系统API得到启发,提供⼀组简单的API,使得开发⼈员可以实现通⽤的协作任务,包括选举主节点、管理组内成员关系、管理元数据等。ZooKeeper包括⼀个应⽤开发库(主要提供Java和C两种语⾔的API)和⼀个⽤Java实现的服务组件。ZooKeeper的服务组件运⾏在⼀组专⽤服务器之上,保证了⾼容错性和可扩展性。
当你决定使⽤ZooKeeper来设计应⽤时,最好将应⽤数据和协同数据独⽴开。⽐如,⽹络邮箱服务的⽤户对⾃⼰邮箱中的内容感兴趣,但是并不关⼼由哪台服务器来处理特定邮箱的请求。在这个例⼦中,邮箱内容就是应⽤数据,⽽从邮箱到某⼀台邮箱服务器之间的映射关系就是协同数据(或称元数据)。整个ZooKeeper服务所管理的就是后者。
第2章 了解ZooKeeper,前⼀章从较⾼的层⾯讨论了分布式应⽤的需求,同时也讨论了在协作⽅⾯的共性需求。我们以实际应⽤中使⽤很⼴泛的主-从架构(master-worker)为例⼦,从中摘取了⼀些常⽤原语。本章将开始讨论ZooKeeper,看⼀看这个服务如何实现这些协作⽅⾯的原语。
第⼆部分 使⽤ZooKeeper进⾏开发,该部分可供程序员阅读,来学习如何使⽤ZooKeeper来协作分布式程序的开发技能和正确⽅法。ZooKeeper提供了Java语⾔和C语⾔的API套件,这两个套件拥有相同的基础结构和特性。Java套件最流⾏且简单易⽤,因此相关例⼦中均使⽤该套件。第7章会介绍C语⾔套件。主-从模式例⼦的源代码,可以从GitHub仓库(https//github.com/fpi/zookeeper-book-example)中获得。
第3章 开始使⽤ZooKeeper的API,在之前的章节中,我们使⽤zkCli⼯具介绍了ZooKeeper的基本操作。从本章开始,我们将会看到在应⽤中如何通过API来进⾏操作。⾸先介绍⼀下如何使⽤ZooKeeper的API进⾏开发,展⽰如何创建会话,实现监视点(watcher)。我们还是从主-从模式例⼦开始进⾏编码。
第4章 处理状态变化,在应⽤程序中,需要知道ZooKeeper集合的状态,这种情况并不少见。例如,在第1章的例⼦中,备份主节点需要知道主要主节点已经崩溃,从节点需要知道任务分配给了⾃⼰,甚⾄ZooKeeper的客户端会定时轮询ZooKeeper集合,检查系统状态是否发⽣了变化。然⽽轮询⽅式并⾮⾼效的⽅式,尤其是在期望的变化发⽣频率很低时。
第5章 故障处理,如果故障永远不发⽣,那么⽣活将变得更加简单。当然,没有了故障,对ZooKeeper的很多需求也就不存在了。为了有效使⽤ZooKeeper,我们就需要了解发⽣的故障的种类,以及如何处理这些故障。
第6章 ZooKeeper注意事项,在前⾯的章节中讲述了如何使⽤ZooKeeper进⾏编码开发,实现了从⼀些基本场景到⼀些复杂的情况。在本章中,我们集中讨论ZooKeeper的某些棘⼿的问题,主要涉及会话的语义学和顺序性的问题。本章所讲述的内容可能并不会影响你进⾏开发,但当你遇到本章所讲述的某些问题时,你会发现这些内容对你很有好处。
第7章 C语⾔客户端,虽然ZooKeeper的Java版本接⼜是主要被使⽤的⼀个接⼜,但C语⾔版本的ZooKeeper客户端绑定也同样受ZooKeeper开发⼈员所欢迎,并以此为基础形成了其他语⾔的绑定接⼜。本章将集中介绍该绑定接⼜,介绍如何使⽤C语⾔API来进⾏ZooKeeper应⽤的开发。我们将会通过C语⾔再次实现主从例⼦中的主节点⽰例,通过该⽰例来展⽰与Java语⾔的API的不同之处。
第8章 Curator:ZooKeeper API的⾼级封装库,Curator作为ZooKeeper的⼀个⾼层次封装库,为开发⼈员封装了ZooKeeper的⼀组开发库,Curator的核⼼⽬标就是为你管理ZooKeeper的相关操作,将连接管理的复杂操作部分隐藏起来(理想上是隐藏全部)。我们在之前的内容中多次讨论了连接管理有多么棘⼿,通过Curator有时就可以顺利解决。
第三部分 ZooKeeper的管理,该部分将会介绍有关ZooKeeper的管理的相关信息。通过深⼊ZooKeeper的内部运⾏原理提供给你相关的管理背景,使你可以在关键问题上做出正确的选择,例如你需要多少台ZooKeeper服务器,你如何调整这些服务器之间的通信。
第9章 ZooKeeper内部原理,本章与其他章节不同,本章不会讲解任何关于如何通过ZooKeeper构建⼀个应⽤程序相关的知识,主要是介绍ZooKeeper内部是如何运⾏的,通过从⾼层次介绍其所使⽤的协议,以及ZooKeeper所采⽤的在提供⾼性能的同时还具有容错能⼒的机制。这些内容⾮常重要,通过这些为⼤家提供了⼀个更深度的视⾓来分析为什么程序与ZooKeeper⼀同⼯作时会如此运⾏。如果你打算运⾏ZooKeeper,该视⾓对你会⾮常有⽤,同时本章也是下⼀章的背景知识。
第10章 运⾏ZooKeeper,ZooKeeper的设计不仅为开发⼈员提供了很好的构建模块,也为运维⼈员以提供了很多⽅便。分布式系统越来庞⼤,管理运维越来越困难,更加健壮的运维实践越来越重要。我们期望Zookeeper作为⼀个标准的分布式系统组件,可以让运维团队更⽅便地学习和管理。我们在之前的章节中已经看到启动ZooKeeper⾮常简单,但是在运⾏ZooKeeper服务时还有很多选项需要注意。本章的主要介绍运⾏ZooKeeper时可⽤的管理⼯具和⽅法。
因文章篇幅限制,小编在这里就不做过多的介绍了。需要本【Zookeeper分布式过程】技术文档的小伙伴,就可以转发此文关注小编,私信小编“学习”来得到获取方式吧。
zookeeper.