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

22|案例:使用分布式调度框架该考虑哪些问题?

你好,我是丁威。
定时调度框架的应用非常广泛,例如电商平台的订单支付超时被取消时,数据清洗时等等。在中间件应用领域,定时调度框架通常和 MQ 等中间件组合使用,联合完成分布式环境下事务的最终一致性。
这节课,我们就一起来看看定时调度框架在消息发送领域的事务一致性设计方案和落地细节。

设计方案

不知道你还记不记得我在第 13 讲中提到的用户注册优惠活动的场景,为了实现用户注册主流程与活动的解耦合,我们引入了消息中间件,它的时序图如下所示:
这里的核心指导思想是让账户中心完成用户的注册逻辑,将用户写入到账户中心数据库,然后发送一条消息到 MQ 服务器,再给返回用户“注册成功”。之后,引入两个消费者,分别对消息进行对应的处理,异步赠送优惠券或者积分。
这个方法的架构思路非常不错,但是我们还不得不思考一个问题:如何保证写入数据库与消息发送这两个步骤的一致性呢?我们希望这两个步骤要么一起成功,要么一起失败,绝不能出现用户数据成功写入数据库,但消息发送失败的情况。因为这样用户无法收到优惠券,容易产生一系列的投诉和纠纷。
这其实是一个分布式事务的问题,也就是要保证数据库写入和消息发送这两个分布式操作的一致性。
一种比较常见的解决方案就是:“本地消息表 + 定时任务”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式调度框架在消息发送领域的事务一致性设计方案和实际落地细节。作者首先介绍了定时调度框架与消息队列等中间件的结合应用,以实现分布式环境下事务的最终一致性。重点介绍了一种常见的解决方案:“本地消息表+定时任务”,并详细阐述了具体实施步骤和优化措施。此外,还探讨了定时调度程序的数据处理策略和调度频率的重要性,以及通过支持流式任务提高数据处理时效。最后,指出了不依赖单个中间件特性的架构设计方案的普适性。文章通过实例代码梳理了ElasticJob框架的关键代码,展示了如何实现定时调度任务的具体业务逻辑。总结了业界解决分布式事务的经典方案,并给出了流式任务常见“坑”及解决方案。整体而言,本文对于需要了解分布式调度框架在消息发送领域设计方案和实际应用的读者具有一定的参考价值。

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

全部留言(2)

  • 最新
  • 精选
  • 靠人品去赢
    要是能像前者选型的那种,比较一下市面比较流行的elasteic job,xxl-job,Schedulerx这些框架。可能接着zookeeper,顺便选型定了ElasticJob。
    2023-03-15归属地:广东
    1
  • 酱紫的小白兔
    如何评价 powerjob 这个新框架?
    2022-12-08归属地:广东
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部