中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

21|设计理念:如何基于ZooKeeper设计准实时架构?

你好,我是丁威。
先跟你分享一段我的经历吧。记得我在尝试学习分布式调度框架时,因为我们公司采用的分布式调度框架是 ElasticJob,所以我决定以 ElasticJob 为突破口,通过研读 ElasticJob 的源码,深入探究定时调度框架的实现原理。
在阅读 ElasticJob 源码的过程中,它灵活使用 ZooKeeper 来实现多进程协作的机制让我印象深刻,这里蕴藏着互联网一种通用的架构设计理念,那就是:基于 ZooKeeper 实现元信息配置管理与实时感知。
上节课中我们也重点提到过,ElasticJob 可以实现分布式部署、并且支持数据分片,它同时还支持故障转移机制,其实这一切都是依托 ZooKeeper 来实现的。

基于 ZooKeeper 的事件通知机制

ElasticJob 的架构采取的是去中心化设计,也就是说,ElasticJob 在集群部署时,各个节点之间没有主从之分,它们的地位都是平等的。并且,ElasticJob 的调度侧重对数据进行分布式处理(也就是数据分片机制),在调度每一个任务之前需要先计算分片信息,然后才能下发给集群内的其他节点来执行。实际部署效果图如下:
在这张图中,order-service-job 应用中创建了两个定时任务 job-1 和 job-2,而且 order-service-job 这个应用部署在两台机器上,也就是说,我们拥有两个调度执行器。那么问题来了,job-1 和 job-2 的分片信息由哪个节点来计算呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了基于ZooKeeper设计准实时架构的技术特点及应用案例。首先,通过ElasticJob的去中心化设计和基于ZooKeeper的事件通知机制,展示了如何利用ZooKeeper实现元信息配置管理与实时感知。文章详细解读了ElasticJob如何利用ZooKeeper的强一致性与事件监听机制实现任务的Leader选举,并通过代码实现解读了ElasticJob如何使用Apache Curator开源框架提供的实现类来实现主节点选举。两个实际应用场景展示了ZooKeeper事件监听机制的灵活应用,包括动态启停影子消费组和消息发送者,以及实现主题流量的无缝迁移。通过这些案例,读者可以深入了解基于ZooKeeper的分布式架构设计理念,以及如何利用ZooKeeper实现多进程协作机制和Leader选举的方法。整体而言,本文为读者提供了对ZooKeeper技术特点的全面了解,以及在实际应用中的灵活运用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • ᯤ⁵ᴳ
    快结课了,希望老师也讲讲分库分表的中间件

    作者回复: 分库分表,我在我的「中间件兴趣圈」上发表了一个mycat专栏,你可以先看看,兴许能为你打开一扇窗。 目前我还没有深入去研究shardingjdbc,我今年下半年的计划是深入研究kafka与系统监控指标、网络等知识,这些都会在我的个人公众号上连载,希望你保持对我的关注,我们一起努力,多多交流。

    2022-08-14归属地:上海
  • mikewt
    老师 watch机制其实可以用客户端主动轮询来解决,那么这两者有啥区别吗,使用场景是什么

    作者回复: 嗯,万变不离其宗,目前客户端、服务端通常有两种交互模式:推与拉。 推:服务端主动通知客户端。 拉:客户端定时主动查询服务端。 两者一个最大的区别:推模式,实时性更强,一旦服务端数据有变化,通常会及时推送给客户端,即客户端能及时感知。而拉模式服务端数据更新后,客户端并不会及时知道,需要定时去查询。当然在拉模式中,还可以引入一种机制,叫长轮循,我建议你去百度上查一下长轮询。 另外就是一个实现难度的问题,通常推模式实现起来复杂,拉模式简单。 至于场景的话,Dubbo使用Zookeeper当注册中心,使用了推模式,而RocketMQ的nameserver使用了拉模式。 一个宗旨是如果拉模式可以满足需求,或者不会带来太大的问题,或者这些问题可以简单的规避,通常可以使用拉模式,关于推拉模式,我建议你再看看我这篇文章:https://mp.weixin.qq.com/s/76DibRKtywdgYTQDgKuoQQ

    2022-08-10归属地:上海
    2
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部