设为首页 收藏本站
查看: 1834|回复: 6

[经验分享] Zookeeper技术简介

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-12-19 08:56:27 | 显示全部楼层 |阅读模式
最近的项目中使用到了Zookeeper、Kafka以及Storm。仔细研究了一下,觉得这几个开源项目对于搞分布式的人来说是非常有用的,所以想把自己的一点心得体会总结一下,希望能对大家有所帮助。
首先从Zookeeper开始。这一节主要是介绍一下Zookeeper的背景和架构
zookeeper是一个开源分布式的服务,它提供了分布式协作,分布式同步,配置管理等功能. 它实现的功能与google的chubby基本一致。
Zookeeper的官方文档对它的设计实现有很详细的描述,下面我们来简单介绍一下。
一. Zookeeper的设计目标:
     1. Simple。 ZooKeeper的命名空间组织结构类似文件系统,分布式系统可以基于它进行协作。Zookeeper中的每一个节点都是一个znode,它类似于文件系统中的文件或文件夹。通用的文件系统一般都是设计用来存储数据,而Zookeeper的数据都是保存在memory中的,这也意味这ZooKeeper能够有很高的throughput和很低的延迟。
  ZooKeeper的实现主要考虑的是高性能、高可用性以及严格的顺序访问。 高性能意味着它可以被用在大型的分布式系统中;高可用性是指使用ZooKeeper集群能够避免单点故障;严格的顺序意味着ZooKeeper的客户端可以实现复杂的同步功能。
  2. replicated。像很多分布式系统一样,ZooKeeper的数据会被拷贝到一个集群中的多台机器上,这些机器组成一个ZooKeeper集群,如下图所示:
zkservice.jpg
  组成ZooKeeper集群服务的Server都要获知彼此的存在。它们在内存中保存了当前ZooKeeper服务数据的最新镜像,同时每隔一段时间会持久化保存这些镜像数据以及transaction日志。这些数据可以被用来恢复ZooKeeper服务。只要大部分的ZooKeeper Server都正常,ZooKeeper服务就是可用的。
  每个客户端都只会连接到一个ZooKeeper Server,客户端维护了一个跟Server的TCP连接,可以通过这个连接来发送请求、获取数据、获取监听事件以及发送心跳信息。如果TCP连接断掉,客户端会尝试连接到其它Server。
  3. Ordered。ZooKeeper为每一次update都关联一个number,它反映了所有ZooKeeper transactions的顺序。以后的操作可以基于该顺序实现更高层次的抽象,比如分布式同步锁等。
  4. Fast。ZooKeeper在以读操作为主的场景中尤其快。ZooKeeper应用可以运行在成百上千台机器中,当读写操作比为10:1时它表现的最好。
二. ZooKeeper的数据模型和层次式的命名空间。
  ZooKeeper提供的命名空间很像一个标准的文件系统,如下图所示,它的名字是一系列由"/"分隔的路径。ZooKeeper命名空间中的每一个节点都由一个路径指定。
zknamespace.jpg

三. ZooKeeper节点以及ephemeral节点
  同文件系统不同的是,每一个ZooKeeper的节点都既可以存储数据也可以含有子节点。普通文件系统中,只有文件夹可以有子文件或子目录,文件只能用来存储数据。所以这里ZooKeeper就好像是文件系统允许一个文件可以有文件夹的功能。ZooKeeper是被设计用来存储一些协作数据的,比如说状态信息、配置信息、位置信息等,所以通常每个节点存储的数据量都是非常小的(范围在byte和kilobyte之间)。我们用术语znode表明我们讨论的是ZooKeeper的数据节点。
  znode维护了一个stat数据结构,它包含了以下信息:
  • czxid :这个znode创建时对应的zxid
  • mzxid :这个znode最后一次被修改对应的zxid
  • ctime :这个znode被创建的时间,单位是毫秒
  • mtime :这个znode最后一次被修改的时间,单位是毫秒
  • version :这个znode存储的数据改动的次数,每次加1
  • cversion :这个znode的子节点改动的次数(创建或删除),每次加1
  • aversion :这个znode的ACL权限的改动次数,每次加1
  • ephemeralOwner :如果这个znode是一个ephemeral 节点,存储的是创建该节点的client的session id,否则默认为0
  • dataLength :znode中存储的数据的长度
  • numChildren: znode节点的子节点数目

  当这个节点的内容或是子节点有改动时,对应的Stat中存储的值会被更新. ZooKeeper的客户端获取该znode的数据时,它也同时会获得这些stat信息。
  每个命名空间对应的znode节点存储的数据的读和写都是原子操作,也即读的话会获取当前存储的所有数据,写的话会用新数据覆盖旧数据。每个znode都有一个ACL(Access Control List)来限制谁可以对该znode做哪些操作。
  ephemeral znode是ZooKeeper中的一个重要概念,这是一中特殊的znode,只要创建它的那个session一直存在,这个znode就一直存在,一旦这个session结束了,这个znode就会被删除。这对于分布式系统各个组件之间相互协作是非常有用的,可以通过注册ephemeral 节点来标识当前各个组件的运行状态(live or dead)。

  ZooKeeper中存在下述的3种类型znode:
  • Persistent Nodes: 永久有效地节点,除非client显式的删除,否则一直存在
  • Ephemeral Nodes: 临时节点,仅在创建该节点client保持连接期间有效,一旦连接丢失,zookeeper会自动删除该节点
  • Sequence Nodes: 顺序节点,client申请创建该节点时,zk会自动在节点路径末尾添加递增序号,这种类型是实现分布式锁,分布式queue等特殊功能的关键
四. ZooKeeper的Watch
    ZooKeeper中有Watch的概念, Zookeeper Watch 定义如下:
“A watch event is one-time trigger, sent to the client that set the watch, which occurs when the data for which the watch was set changes.”
  Watch是由ZooKeeper的client在进行操作时设置的,所有的读操作(getData(), getChildren(), and exists())都可以选择设置watch。在我看来,watch可以理解为一个分布式的回调,当client关心的znode发生变化时,zookeeper将会把消息传回到client,并导致client的消息处理函数得到调用. 后面我们会详细介绍ZooKeeper的Watch的实现机制。

五. ZooKeeper的保证
  ZooKeeper非常快并且非常简单,由于它的目标是成为构建复杂系统的基石(比如说同步系统),它提供了一系列的保证,它们是:
1. 顺序的一致性。 一个Client所发送的所有更新的执行顺序跟它们的发送顺序是一致的。
2. 原子性。更新操作要么成功要么失败,不存在部分成功的情况。
3. 单一系统镜像。在一个ZooKeeper集群中,一个Client不论链接到哪个Server上,它看到的ZooKeeper系统的状态/视图应该是相同的。
4. 可靠性。 一旦一个更新操作执行成功,这个更改就会一直存在直到有一个client又对它进行了更改/覆盖。
5. 时效性。在一定的时间限制范围内,确保所有client看到的ZooKeeper系统的数据是最新的。

  希望看完这一章之后,大家会对ZooKeeper有一个基础的印象,后面的章节会详细介绍ZooKeeper中设计和实现。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-11883-1-1.html 上篇帖子: zookeeper的部署与配置(单机、模拟分布式、真正分布式) 下篇帖子: Hadoop + Zookeeper + HBase 平台搭建(一) 技术

尚未签到

发表于 2013-12-20 00:41:22 | 显示全部楼层
不错不错,楼主您辛苦了。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-21 00:09:01 | 显示全部楼层
最初的那些誓言,却抵不过时间的摧残。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-21 17:12:44 | 显示全部楼层
个性签名:一个人可以难过到没有情绪没有言语没有表情

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-22 19:08:38 | 显示全部楼层
夜深了,你睡了吗?、‘习惯性问候’

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-23 00:59:34 | 显示全部楼层
那些人都很好但都不是迩旳

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-23 10:15:17 | 显示全部楼层
你表面上的欢喜,却从来没有发现你内心的悲伤

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表