定时和延时问题在业务场景中的常见处理
如何优雅的处理业务流程和信息分发中的定时和延时问题?
本文将从如何处理业务流程和信息分发中的定时和延时问题出发,横向比较了业界常见的几种方案,如直接多线程编码、Spring定时调度框、大型分布式调度框架、消息中间件定时消息,因为消息中间件接口友好,调用方便,性能稳定,特别推荐了使用消息中间件来处理此类问题。同时对比了ActiveMQ、RabbitMQ和RocketMQ三种消息中间件在此类场景中的优劣势。
为了帮助大家理解消息中间件的使用,特别列举了三种常见场景及使用方案,同时列举了消息中间件RocketMQ定时消息的优势,近期定时消息特性会做大的更新,推出的新版定时消息已在阿里内部,稳定运行近两年,近期会发布到公有云上,敬请期待。
1 适用场景
在业务处理流程和信息分发过程中,定时延时处理的需求可谓无处不在。如何优雅的满足想要在未来的某个时间点,处理预期事件、分发既定信息,满足对时间线的强诉求场景和业务逻辑的设计,常常也是我们经常会遇到的问题。笔者在横向对比过几个常用的技术方案之后,大概总结如下,分别都会有不同的优缺点:**
直接多线程编码 | Spring定时调度框 | 大型分布式调度框架 | 消息中间件定时消息 | |
---|---|---|---|---|
优点 | 较少 | 1.spring集成环境,方便开发者集成。 2.接口、注解友好,方便开发者使用。 3.适合单机使用。 | 1.专用于分布式调度处理场景。 2.充分利用业务机器资源,处理调度任务。 3.经历过大规模流量验证,高可用。 | 1.接口友好,方便开发使用。 2.支持“定时”和“延时”两种场景。 3.大型分布式场景,性能较好。 |
缺点 | 1.多线程编码,易出错。 2.重复造轮子,不符合开发原则。 3.程序较复杂,难以维护。 | 1.适合单机使用,分布式环境需要解决分布式锁问题。 2.适合定时场景,无法实现延时功能支持延时场景。 | 1.没有单独开源、售卖。 2.适合定时场景,无法实现延时功能支持延时场景。 | 无调度任务分片功能。 |
友好的接口设计、敏捷的开发模式,便于开发者快速高效地集成、研发。同时支持“定时”和“延时”两种场景,以高性能和高可用,支撑大规模的分布式业务场景。整体来看,消息中间件的使用更加便捷。
那么在不同的消息中间件之间,是否对这样的功能又有差别呢?首先让我们来看看一个优秀的定时延时消息中间件,需要满足哪些特性?**
- 轻量级,高性能,精确到秒级
- 支持高可用
- 足够的定时长度,比如可以支持到30天、60天等
- 支持取消定时消息,取消延时任务
- 支持绝对定时和相对定时
- 支持海量定时消息存储,高时效精度
综上,我们对业界几个常见的消息中间件做了简单对比:在现有的主流消息系统中,ActiveMQ、RabbitMQ和RocketMQ都有提供定时消息的实现。但是ActiveMQ定时性能在300TPS左右,只适合小量场景。RabbitMQ提供了一个定时插件,性能可达2000TPS左右,但不支持高可用,且不能堆积太多消息。
RocketMq融合了各大定时技术组件的优势,同时弥补了其他组件设计上的局限,研发出了RocketMq新版定时消息,以适用支撑更多定时延时场景。
是骡子是马拉出来溜溜。我们简单看下几个典型定时延时场景,使用RocketMq定时消息的实现方案。
场景一 用户秒杀爆品,使用优惠券,创建订单就冻结了用户优惠券额度,对于下单失败的用户,需要超时自动解冻用户被冻结的优惠券额度。超时自动解冻机制,需要满足高精度、高可用、支持海量业务、支持超长延时。
场景二 外卖业务对时效性非常敏感,从用户下单起,便产生了“外送超时时间”,保障外卖业务的顺序进行。外卖超时机制,需要满足高精度、高可用、支持海量业务。
场景三 钉钉软件设置日程后,需要在日程时间达到时,自动提醒用户。钉钉日程提醒,需要满足高精度、支持超长延时。
2 概念介绍
那么让我们来熟悉下消息队列RocketMq定时消息对于定时消息、延时消息的概念。在用户使用的视角和体验上,分为“定时性消息”和“延时性消息”两大类。
定时性消息:Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是推迟到未来的某一个确定时间投递到 Consumer 进行消费。如上一节中“场景三”。
延时性消息:Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是从当前时间延迟一定时段后才投递到 Consumer 进行消费。如上一节中“场景一”和“场景二”。
使用文档详见官网:
https://help.aliyun.com/document_detail/43349.html?spm=a2c4g.11186623.4.2.7e613030bocffQ
3 RockeMq定时消息优势
高性能高可用
RocketMQ的分级延迟消息,性能较高,可无限堆积,且满足高可用要求,支持精确到秒级的定时需求,且在海量存储的情况下,时效精度较高。
产品成熟度高
在阿里巴巴经济体的各大业务及大促场景中,RocketMq定时消息已经得到广泛运用,经历了无数流量洪峰和稳定性考验,积累沉淀出了业界先进稳定的定时消息系统。
技术社区活跃
RocketMq作为apache顶级项目,已经建设完整的技术生态体系。支持多语言,多协议,定时消息天然继承了顶级项目的优点,具备完整的技术生态。
专业技术支持
阿里云专注云计算,RocketMq持续伴随阿里云技术架构进化升级。技术设施对外输出的同时,以强大的技术团队服务客户业务,为使用RocketMq产品的客户,持续提供专业技术支持。
4 特别说明
本次新版定时消息功能进行了深度内核层架构优化,设计原理和功能实现上都做了较大的升级调整,从根本上进行了定时消息架构的变革,极大地提高了定时消息的稳定性和性能。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《Nature》子刊:不仅是语言,机器翻译还能把脑波「翻译」成文字
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 如果将人脑的神经信号也视为一种语言,那么将机器翻译架构应用于解读神经信号的可行性似乎并不令人惊讶。在《Nature Neuroscience》的一篇论文中,来自加州大学旧金山分校的研究者实践了这一想法。他们用一个编码器-解码器框架将大脑神经信号转换为文字,在 250 个词的封闭句子集中将错误率降到了 3%。 论文链接:https://www.nature.com/articles/s41593-020-0608-8 在过去的十年里,脑机接口(BMI)已经从动物实验转变为人类实验,其中具有代表性的结果是使得四肢瘫痪者恢复一定的运动能力,在空间维度中的两个自由度上实现连续运动。尽管这种类型的控制也可以与虚拟键盘结合使用来生成文本,但即使在理想的光标控制下(目前尚无法实现),码字率仍受限于单指打字。另一种选择是直接解码口语,但到目前为止,这种 BMI 仅限于解码孤立的音素或单音节,或者在中等数量词汇(约 100 单词)构成的连续语音中,正确解码不到 40% 的单词。 为了获得更高的准确度,来自...
- 下一篇
深入理解Flutter动画原理
一、概述[](http://gityuan.com/2019/07/13/flutter_animator/#一概述) 动画效果对于系统的用户体验非常重要,好的动画能让用户感觉界面更加顺畅,提升用户体验。 1.1 动画类型[](http://gityuan.com/2019/07/13/flutter_animator/#11-动画类型) Flutter动画大的分类来说主要分为两大类: 补间动画:给定初值与终值,系统自动补齐中间帧的动画 物理动画:遵循物理学定律的动画,实现了弹簧、阻尼、重力三种物理效果 在应用使用过程中常见动画模式: 动画列表或者网格:例如元素的添加或者删除操作; 转场动画Shared element transition:例如从当前页面打开另一页面的过渡动画; 交错动画Staggered animations:比如部分或者完全交错的动画。 1.2 类图[](http://gityuan.com/2019/07/13/flutter_animator/#12-类图) 核心类: Animation对象是整个动画中非常核心的一个类; AnimationController...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主