李欣:ZooKeeper在携程的使用及前景.pdf
《李欣:ZooKeeper在携程的使用及前景.pdf》由会员分享,可在线阅读,更多相关《李欣:ZooKeeper在携程的使用及前景.pdf(43页珍藏版)》请在三一文库上搜索。
1、ZooKeeperZooKeeperZooKeeperZooKeeper在携程的使用和场景在携程的使用和场景 介绍介绍 携程技术研发中心 Li, Bruce 2012/09/05 议程 序 携程技术研发中心简介 第一部分 Zookeeper的一般介绍 第二部分 在携程的应用和使用场景介绍 Q&A 携程技术研发中心 对技术研发投入不断增大 对基础框架愈发重视 鼓励内部使用更多优秀的开源软件 同开发社区的互动将不断加强 第一部分 Zookeeper的一般介绍 Apache Zookeeper项目简介 自2010年10月升级成Apache Software Foundation(ASF)顶级项目 分
2、布式协调服务,提供以下功能: 组管理服务 分布式配置服务 分布式同步服务 分布式命名服务 谁在使用Zookeeper 开源软件: HBase Solr Storm Neo4j 公司 Yahoo Rackspace LinkedIn Twitter Taobao Ctrip Zookeeper架构 客户端随机连接集群中任何一台server 集群内所有server基于Zab(ZooKeeper Atomic Broadcast)协议进 行通信 集群内部根据算法自动选举出一个leader,负责向follower(其他 server)广播所有变化消息 集群中每个follower都和leader通信 F
3、ollower接收来自leader的所有变化消息,保存在自己内存 Follower转发来自客户端的写请求给leader 客户端的读请求会在follower端直接服务,无需转发给leader ZAB(ZooKeeper Atomic Broadcast)协议 2011年Yahoo公开了Zab协议论文 选举leader,只有leader才能提出决议 没有abort的两段式提交 基于状态增量的消息传输 高可用高性能 参考:http:/ ZooKeeper数据模型 基于树形结构的命名空间,与文件系统类似 节点(znode)都可以存数据,可以有子节点 节点不支持重命名 数据大小不超过1MB(可配置) 数
4、据读写要保证完整性 ZooKeeper基本API string create(path, data, acl, flags) delete(path, expected_version) stat set_data(path, data, expected_version) (data, stat) get_data(path, watch) stat exists(path, watch) string get_children(path, watch) Znode节点类型 Sequential节点和non-sequential节点 Ephemeral节点和persistent节点 Sequ
5、ential/non-sequential节点类型 Non-sequential节点不能有重名 Sequential节点 创建时可重名 实际生成节点名末尾自动添加一个10位长度、左边以0填充的单调递增数 字 Ephemeral/Persistent节点类型 Ephemeral节点在客户端session结束或超时后自 动删除 Persistent节点生命周期和session无关,只能显 式删除 ZooKeeper Session 客户端和server间采用长连接 连接建立后,server产生session ID(64位)返还 给客户端 客户端定期发送ping包来检查和保持和server的 连接
6、一旦session结束或超时,所有ephemeral节点会 被删除 客户端可根据情况设置合适的session超时时间 ZooKeeper Watches Watch是客户端安装在server的事件侦听方法 当侦听的变化发生时,server发消息给客户端进行通知 客户端使用单线程对所有事件按顺序同步回调 触发回调条件: 客户端连接、断开连接 节点数据发生改变 节点本身发生变化 ZooKeeper Watches续 Watch是单发的,每次触发后会被自动删除 如果需要再次侦听事件,必须重新安装 watch 无法保证跟踪到每一个变化 避免安装大量watches侦听在同一个节点 Watch的创建和触发
7、规则 触发事件触发事件 createcreatedeletedeletesetDatasetData znodechildznodechildznode 创建创建WatchWatch的的 APIAPI existexistNodeCreated NodeDeleted NodeDataChanged getDatagetData NodeDeleted NodeDataChanged getChildrengetChildren NodeChildrenChangedNodeDeleted NodeChildrenChange d ZooKeeper Observer Observer不参与选
8、举,永远是follower Observer数量增加 进一步提升集群的服务能力 不会增加重新选举leader的开销 很好地支持跨数据中心,本地读、异地写 ZooKeeper陷阱 在客户端事件回调实现有阻塞调用 试图跟踪每个状态变化 大量watch侦听同一个znode的状态变化 客户端会有需要长时间处理的GC(garbage collection) Session超时后上层应用不进行恢复处理 第二部分 ZooKeeper在携程的应用和使用 场景 携程.net ZooKeeper Stack ZooKeeper .net client (3rdparty) 携程携程客户端封装层客户端封装层 携程携
9、程ZooKeeperZooKeeper应用框架层应用框架层 把Java客户端移植到.net 封装成可靠API 基于.net封装,为不同用例提供 支持,如Master/Slave,Hot Standby,Sequence Generator,Distributed Locking Service,等等 第三方.net客户端 较成熟开源的zookeeper .net客户端 http:/ 能支持ZooKeeper最新的3.4.3版本 从Java的zookeeper客户端移植而来 相对于其他.net客户端实现,ewhauser代码质量较高 我们发现一些小bug,内部已经修正,正同原作者进行联 系,提交
10、bug报告 ZooKeeper封装层 为什么需要额外的封装层 .net客户端底层不提供可靠API支持 出现连接的问题时很难恢复 直接使用极易出错 封装层的连接管理 CONNECTION_LOSS的处理 底层会挑选下个服务器进行重连,以自动恢复 封装层必须有重试机制,确保在重连后检查状态并正确处理 封装层的恢复策略必须区分幂等调用与非幂等调用 要特别当心创建sequential节点调用 SESSION_EXPIRED的处理 向框架报告错误 由框架决定如何恢复所有的ephemeral节点 框架支持的场景 Master/Slave 解决单点故障问题 Hot Standby 解决一组服务器的HA问题
11、Distributed Configuration 配置管理 Sequence Generation 序列产生器 Distributed Locking Service 分布式锁方案 场景1:Job调度系统存在单点故障 关键组件(如JobScheduler)只有单实例运行,无HA保障 Job SchedulerJob SchedulerJob SchedulerJob Scheduler Job Config DBJob Config DBJob Config DBJob Config DB read Job WorkerJob WorkerJob WorkerJob WorkerJob Wo
12、rkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob Worker JobJobJobJob SPOFSPOF schedule Master/Slave实现 只在无法做到active-active时考虑 父节点类型为persistent 子节点类型为ephemeral + sequential 客户端启动时创建子节点 序列号最小的子节点选为master,其他 子节点都是slave 每个slave侦听序列号比它小的子节点中 最大的子节
13、点的NodeDeleted事件 一旦NodeDeleted事件被触发,该slave 客户端会重新选定侦听对象,如果不存 在可侦听对象,该slave自动晋升成 master / / / / /MSGroupMembers/MSGroupMembers/MSGroupMembers/MSGroupMembers Zookeeper ServiceZookeeper ServiceZookeeper ServiceZookeeper Service /MR0000000023/MR0000000023/MR0000000023/MR0000000023 /MR0000000024/MR0000000
14、024/MR0000000024/MR0000000024 /MR0000000025 /MR0000000025 /MR0000000025 /MR0000000025 /MR/MR/MR/MR MasterMasterMasterMaster Client1Client1Client1Client1Client2Client2Client2Client2Client3Client3Client3Client3Client4Client4Client4Client4 Create Watch Job调度系统单点故障解决方案 Job SchedulerJob SchedulerJob Sche
15、dulerJob Scheduler (mastermastermastermaster) Job Config DBJob Config DBJob Config DBJob Config DB read Job WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob Worker JobJobJobJob Job SchedulerJob Sched
16、ulerJob SchedulerJob Scheduler (slaveslaveslaveslave) ZooKeeper ZooKeeper ServiceService schedule 场景2:Forever Running Job 需求: 调度太频繁,需要把此类Job转变成Forever Running Job 不断发心跳请求到JobWorker以监控Job运行状态,负担 较重 能处理以下情况: Job实例意外退出 机器意外宕机情况 Forever Running Job的组管理实现 JobWorker在启动forever running job实例时,先试图创建以JobId命名的
17、 ephemeral/non-sequential的Job子节点 如果无法创建该子节点,说明已有同名Job实例在运行,本次实例启动中止 如果Job子节点创建成功,则JobScheduler侦听该节点的NodeDeleted事件 如果NodeDeleted事件发生, JobScheduler将能接受到通知,并重新调度启 动新Job实例 / / / / /ForeverRunningJobs/ForeverRunningJobs/ForeverRunningJobs/ForeverRunningJobs Zookeeper ServiceZookeeper ServiceZookeeper Ser
18、viceZookeeper Service /Job1/Job1/Job1/Job1 / Job2/ Job2/ Job2/ Job2 /Job3 /Job3 /Job3 /Job3 /Job/Job/Job/Job Job SchedulerJob SchedulerJob SchedulerJob Scheduler (master)(master)(master)(master) Job SchedulerJob SchedulerJob SchedulerJob Scheduler (slave)(slave)(slave)(slave) Job WorkerJob WorkerJob
19、 WorkerJob Worker Job WorkerJob WorkerJob WorkerJob Worker Job WorkerJob WorkerJob WorkerJob Worker Create Watch 场景3: Job调度系统继续演化 问题:太多Job需要处理,导致单个JobScheduler成为瓶颈,需要做 sharding。多个JobScheduler实例同时运行,则需要HA保护 Job SchedulerJob SchedulerJob SchedulerJob Scheduler (instance1instance1instance1instance1) Jo
20、b Config DBJob Config DBJob Config DBJob Config DB read Job WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob WorkerJob Worker Job=9Job=9Job=9Job=9 Job SchedulerJob SchedulerJob SchedulerJob Scheduler (instance
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 李欣 ZooKeeper 使用 前景
![提示](https://www.31doc.com/images/bang_tan.gif)
链接地址:https://www.31doc.com/p-3333876.html