《Hello,World公开课》你真的懂Zookeeper么?

开课吧开课吧科科2021-04-07 17:19

点赞
有用
分享分享

谈起Zookeeper可能很多开发者都说,这个很简单啊,我在Dubbo和Kafka中经常用,没什么难的,但是用了这么久,你真的懂Zookeeper么?

4月6日的开课吧《HelloWorld公开课》,Reythor雷老师在开讲前就提出了五个犀利的大厂面试题,你能答上来几道?

1、在具体应用场景中的解决方案的设计中,我们要着重考虑对哪些zk特性的灵活使用?

2、对于 zk 的节点类型,谈一下你的认识。

3、watcher 机制的工作原理是怎样的?

4、使用DBMS可以实现Master选举,实现原理是什么?存在什么问题?

5、“数据复制总线”的功能可以由 MySQL 主 从 集群完成吗?数据复制总线与 zk 有什么关系。

带着这些问题,我们跟着老雷同志,看他在公开课上都讲了啥。

Zookeeper核心理论

数据模型znode

zk数据存储结构与标准的 Unix 文件系统非常相似,都是在根节点下挂许多子节点。znode是zk中数据的最小单元,每个znode上都可以保存数据,同时还可以挂载子节点。不同类型的节点有不同的生命周期。

持久节点:节点被创建后会一直保存在 zk 中,直到将其删除。

持久顺序节点: 父节点可以为它的第一级子节点维护一份顺序,用于记录每个子节点创建的先后顺序。其在创建子节点时,会在子节点名称后添加数字后辍,作为该子节点的完整节点名。 序号由10位数字组成且从0开始计数 。

临时节点: 生命周期与客户端的会话绑定在一起,会话消失则该节点就会被自动清理。且只能作为叶子节点,不能创建子节点 。

临时顺序节点: 添加了创建序号的临时节点。

Watcher机制

开发者使用zk最多的功能想必就是分布式数据的发布和订阅,一个发布者能够让多个订阅者同时监听某一主题对象,当这个主题对象状态发生变化时,会通知所有订阅者,使它们能够做出相应的处理。

而实现分布式数据发布和订阅功能背后原理就是watcher机制,下图完整的展示了Watcher机制的工作原理。

这里要注意的,一旦watcher被触发, zk就会将其从WatcherManager中删除,当需要再使用时客户端会再向zk重新注册 watcher。但注册watcher需要时间,在注册期间有新的数据变更,客户端是感知不到的。所以zk的watcher机制限制了zk不适合监听变化非常频繁的场景

Zookeeper经典应用场景

Master选举

现在所有的互联网软件架构基本离不开高并发与高可用,这里就不得不用到了集群,每个集群中都会存在一个Master,用于协调集群中的其它 Slave主机。Master对于Slave的状态具有决定权,而Master就是通过某种选举机制产生的,这就是我们说的Master选举,其原理就是使用zk中多个客户端对同一节点创建时,只有一个客户端可以成功。

分布式同步

分布式同步是分布式系统中不可缺少的环节,它是将不同的分布式组件有机结合起来的关键。对于一个在多台机器上运行的应用而言,通常需要一个协调者来控制整个系统的运行流程,例如执行的先后顺序,或执行与不执行等。

以MySQL 数据复制总线为例,这是一个实时数据复制框架,用于在不同的 MySQL 数据库实例间进行异构数据复制。其核心部分由三部分组成:生产者、复制管道、消费者。

从上面结构图中我们可以看到replicator存在单点问题。为了解决这个问题,就需要为其设置

多个热备主机。如何协调这些热备机工作呢?这时候就用到了zk来作为协调,即由 zk 来完成分布式同步工作。

分布式锁

分布式锁是控制分布式系统同步访问共享资源的一种方式。 Zookeeper 可以实现分布式锁功能。根据用户操作类型的不同,可以分为排他锁与共享锁。

在zk上对于分布式锁的实现,使用 的是 类似于“/xs_lock/[ hostname]-请求类型-序号”的临时顺序节点。 当客户端发出读写请求时会在zk中创建不同的节点。根据读写操作的不同及当前节点与之前节点的序号关系来执行不同的逻辑。

前面的实现方式存在“惊群效应”,为了解决其所带来的性能下降,可以对前述分布式锁的实现进行改进。

当客户端请求发出后,在zk中创建相应的临时顺序节点后,马上获取当前的 /xs_lock 的所有子节点列表, 但任何客户端都不向 /xs_lock 注册用于监听子节点列表变化的 watcher 。 而是改为根据请求类型的不同向对其有影响的子节点注册watcher 。

其实,Zookeeper的内容远不止这些,比如前面提到的数据复制总线工作原理是什么?文中开篇提到的五道大厂面试题答案是什么?如果有同学想深入了解Zookeeper,记得点击从应用场景到实现原理,全面解读Zookeeper观看公开课回放视频!

讲师介绍

Reythor雷,开课吧签约讲师,硕士,国家高级工程师,先后供职于亚信总部、同方知网、中软国际北京总部等软件企业,现任某国企软件工程中心Leader。

《Hello ,World公开课》是由开课吧推出的面向广大开发工程师的免费加餐课,集结业内名师大咖,聚焦热门技术和实战解决方案,以专业知识分享交流为桥梁,链接正在创造世界的一群科技主力们,向初心致敬,为技术发烧。无论你是初入职场的应届生,还是准备升职加薪的职场精英,相信这里都有你需要的养料。

更多《Hello,World公开课》尽在开课吧广场动态信息频道!

小编推荐:

初窥Web前端工程化:web-pack核心组件设计(下)

《Hello,World公开课》移动互联网后下一个浪潮在哪里?

互联网大厂需要什么样的CV算法工程师?

有用
分享