26

如何优雅处理业务逻辑中的定时和延时问题?

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI0NTE4NjA0OQ%3D%3D&%3Bmid=2658364041&%3Bidx=1&%3Bsn=f8a75656c824f26b2d02066926e5d0bb
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文将从如何处理业务流程和信息分发中的定时和延时问题出发,横向比较了业界常见的几种方案,如直接多线程编码、Spring定时调度框、大型分布式调度框架、消息中间件定时消息,因为消息中间件接口友好,调用方便,性能稳定,特别推荐了使用消息中间件来处理此类问题。同时对比了ActiveMQ、RabbitMQ和RocketMQ三种消息中间件在此类场景中的优劣势。为了帮助大家理解消息中间件的使用,特别列举了三种常见场景及使用方案,同时列举了消息中间件RocketMQ定时消息的优势,近期定时消息特性会做大的更新,推出的新版定时消息已在阿里内部,稳定运行近两年,近期会发布到公有云上,敬请期待。

1 适用场景

在业务处理流程和信息分发过程中,定时延时处理的需求可谓无处不在。如何优雅的满足想要在未来的某个时间点,处理预期事件、分发既定信息,满足对时间线的强诉求场景和业务逻辑的设计,常常也是我们经常会遇到的问题。笔者在横向对比过几个常用的技术方案之后,大概总结如下,分别都会有不同的优缺点:

N3IRbub.png!web

友好的接口设计、敏捷的开发模式,便于开发者快速高效地集成、研发。同时支持“定时”和“延时”两种场景,以高性能和高可用,支撑大规模的分布式业务场景。整体来看,消息中间件的使用更加便捷。那么在不同的消息中间件之间,是否对这样的功能又有差别呢?首先让我们来看看一个优秀的定时延时消息中间件,需要满足哪些特性?

  • 轻量级,高性能,精确到秒级

  • 支持高可用

  • 足够的定时长度,比如可以支持到30天、60天等

  • 支持取消定时消息,取消延时任务

  • 支持绝对定时和相对定时

  • 支持海量定时消息存储,高时效精度

综上,我们对业界几个常见的消息中间件做了简单对比:在现有的主流消息系统中,ActiveMQ、RabbitMQ和RocketMQ都有提供定时消息的实现。但是ActiveMQ定时性能在300TPS左右,只适合小量场景。RabbitMQ提供了一个定时插件,性能可达2000TPS左右,但不支持高可用,且不能堆积太多消息。RocketMq融合了各大定时技术组件的优势,同时弥补了其他组件设计上的局限,研发出了RocketMq新版定时消息,以适用支撑更多定时延时场景。是骡子是马拉出来溜溜。我们简单看下几个典型定时延时场景,使用RocketMq定时消息的实现方案。

场景一    用户秒杀爆品,使用优惠券,创建订单就冻结了用户优惠券额度,对于下单失败的用户,需要超时自动解冻用户被冻结的优惠券额度。超时自动解冻机制,需要满足高精度、高可用、支持海量业务、支持超长延时。

RJVFjur.jpg!web

场景二    外卖业务对时效性非常敏感,从用户下单起,便产生了“外送超时时间”,保障外卖业务的顺序进行。外卖超时机制,需要满足高精度、高可用、支持海量业务。

ammiEru.jpg!web

场景三    钉钉软件设置日程后,需要在日程时间达到时,自动提醒用户。钉钉日程提醒,需要满足高精度、支持超长延时。

2Q7vUz2.jpg!web

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 特别说

本次新版定时消息功能进行了深度内核层架构优化,设计原理和功能实现上都做了较大的升级调整,从根本上进行了定时消息架构的变革,极大地提高了定时消息的稳定性和性能。

M7nAzyj.png!web

 动动小手指  了解更多详情 !

R3Ufaay.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK