10分布式锁服务ZooKeeper讲义教材.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZooKeeper 分布式应用的协调器 电子工业出版社 刘鹏主编《云计算》教材配套课件10 主要内容 ZooKeeper的数据模型 ZooKeeper的数据读写机制 ZooKeeper的使用方法 为什么需要ZooKeeper? 大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等) 目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制 协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器 ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用(如,为HBase提供服务) 节点创建属性 Ephemeral 创建的节点不是持久节点 一旦与客户端的会话结束,节点自动删除 Sequence 创建节点时,编号自动加1 例如x-1,x-2,s-3,x-4等 ZooKeeper的读写机制 ZooKeeper是一个由多个Server组成的集群 一个Leader,多个Follower 每个Server都保存了一份数据副本 全局数据一致 分布式读写 更新请求转发,由Leader实施 使用ZooKeeper的约定 更新请求顺序执行 来自同一个Client的更新请求按其发送顺序依次执行 数据更新原子性 一次数据更新要么成功,要么失败。不存在部分数据写入成功或失败的情况 全局唯一数据视图 Client无论连接哪个Server,数据视图都是一致的 实时性 在一定时间范围内,Client能读到最新数据 ZooKeeper的API String create(path, data, acl, flags) void delete(path, expectedVersion) Stat setData(path, data, expectedVersion) (data, Stat) getData(path, watch) Stat exists(path, watch) String[] getChildren(path, watch) void sync(path) Stat setACL(path, acl, expectedVersion) (acl, Stat) getACL(path) 包含监视器 调用参数均包含节点路径 对比:Chubby的API handle Open(path,…)? Close(handle,…)? GetContentsAndStat(handle,…), GetStat(handle), ReadDir(handle,…)? SetContents(handle), SetACL(handle,…)? Delete(path)? Acquire(), TryAcquire(), Release()? GetSequencer(), SetSequencer(), CheckSequencer()? 仅Open包含节点路径,生成handle供其他API使用 如何使用ZooKeeper? 关于ZooKeeper的锁服务 这里的“锁”并非对ZooKeeper的资源加锁,用于对第三方资源加锁 用例 多个第三方分布式Server需要使用某第三方资源,谁获取了ZooKeeper中的独占锁,谁就可以使用第三方资源,否则等待 如何使用ZooKeeper? Leader选举 用于在多个节点中选取主控,如GFS中对外服务Master节点的选取 1)getData(“/servers/leader”, true) 2)如果读取成功则从数据中获取leader信息,退出 3)读取失败,执行create(“.../servers/leader”, hostname, EPHEMERAL)(注意节点类型) 如果创建成功则自己成为leader,写入信息,退出 5)如果写入失败,则返回步骤1 getData设置了监视器,如果数据发生变化, 会重启上述流程 如何使用ZooKeeper? 独占锁 如果分布式应用需要对某资源独占使用,可以申请独占锁 1)id = create(“.../locks/x-”, SEQUENCE|EPHEMERAL) 2)getChildren(“.../locks/”, false) 3)如果id是第一个节点,则获取独占锁,退出 4)exists(name of last child before id, true)(注意,设置了监视器) 5)如果id之前不存在节点,返回步骤2 6)等待通知 7)返回步骤2 有且仅有一个Client可以获取到独占锁 如何使用ZooKeeper? 共享锁 1)id = create(“.../locks/s-”, SEQUENCE|EPHEMERAL) 2)getChildren(“.../locks/”, false) 3)如果id之前

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档