如何优雅的处理业务逻辑中的定时和延时问题?
本文將從如何處理業(yè)務(wù)流程和信息分發(fā)中的定時(shí)和延時(shí)問(wèn)題出發(fā),橫向比較了業(yè)界常見(jiàn)的幾種方案,如直接多線程編碼、Spring定時(shí)調(diào)度框、大型分布式調(diào)度框架、消息中間件定時(shí)消息,因?yàn)橄⒅虚g件接口友好,調(diào)用方便,性能穩(wěn)定,特別推薦了使用消息中間件來(lái)處理此類(lèi)問(wèn)題。同時(shí)對(duì)比了ActiveMQ、RabbitMQ和RocketMQ三種消息中間件在此類(lèi)場(chǎng)景中的優(yōu)劣勢(shì)。為了幫助大家理解消息中間件的使用,特別列舉了三種常見(jiàn)場(chǎng)景及使用方案,同時(shí)列舉了消息中間件RocketMQ定時(shí)消息的優(yōu)勢(shì),近期定時(shí)消息特性會(huì)做大的更新,推出的新版定時(shí)消息已在阿里內(nèi)部,穩(wěn)定運(yùn)行近兩年,近期會(huì)發(fā)布到公有云上,敬請(qǐng)期待。
1 適用場(chǎng)景
在業(yè)務(wù)處理流程和信息分發(fā)過(guò)程中,定時(shí)延時(shí)處理的需求可謂無(wú)處不在。如何優(yōu)雅的滿(mǎn)足想要在未來(lái)的某個(gè)時(shí)間點(diǎn),處理預(yù)期事件、分發(fā)既定信息,滿(mǎn)足對(duì)時(shí)間線的強(qiáng)訴求場(chǎng)景和業(yè)務(wù)邏輯的設(shè)計(jì),常常也是我們經(jīng)常會(huì)遇到的問(wèn)題。筆者在橫向?qū)Ρ冗^(guò)幾個(gè)常用的技術(shù)方案之后,大概總結(jié)如下,分別都會(huì)有不同的優(yōu)缺點(diǎn):**
?
友好的接口設(shè)計(jì)、敏捷的開(kāi)發(fā)模式,便于開(kāi)發(fā)者快速高效地集成、研發(fā)。同時(shí)支持“定時(shí)”和“延時(shí)”兩種場(chǎng)景,以高性能和高可用,支撐大規(guī)模的分布式業(yè)務(wù)場(chǎng)景。整體來(lái)看,消息中間件的使用更加便捷。那么在不同的消息中間件之間,是否對(duì)這樣的功能又有差別呢?首先讓我們來(lái)看看一個(gè)優(yōu)秀的定時(shí)延時(shí)消息中間件,需要滿(mǎn)足哪些特性?**
- 輕量級(jí),高性能,精確到秒級(jí)
- 支持高可用
- 足夠的定時(shí)長(zhǎng)度,比如可以支持到30天、60天等
- 支持取消定時(shí)消息,取消延時(shí)任務(wù)
- 支持絕對(duì)定時(shí)和相對(duì)定時(shí)
- 支持海量定時(shí)消息存儲(chǔ),高時(shí)效精度
綜上,我們對(duì)業(yè)界幾個(gè)常見(jiàn)的消息中間件做了簡(jiǎn)單對(duì)比:在現(xiàn)有的主流消息系統(tǒng)中,ActiveMQ、RabbitMQ和RocketMQ都有提供定時(shí)消息的實(shí)現(xiàn)。但是ActiveMQ定時(shí)性能在300TPS左右,只適合小量場(chǎng)景。RabbitMQ提供了一個(gè)定時(shí)插件,性能可達(dá)2000TPS左右,但不支持高可用,且不能堆積太多消息。RocketMq融合了各大定時(shí)技術(shù)組件的優(yōu)勢(shì),同時(shí)彌補(bǔ)了其他組件設(shè)計(jì)上的局限,研發(fā)出了RocketMq新版定時(shí)消息,以適用支撐更多定時(shí)延時(shí)場(chǎng)景。是騾子是馬拉出來(lái)溜溜。我們簡(jiǎn)單看下幾個(gè)典型定時(shí)延時(shí)場(chǎng)景,使用RocketMq定時(shí)消息的實(shí)現(xiàn)方案。
場(chǎng)景一?
用戶(hù)秒殺爆品,使用優(yōu)惠券,創(chuàng)建訂單就凍結(jié)了用戶(hù)優(yōu)惠券額度,對(duì)于下單失敗的用戶(hù),需要超時(shí)自動(dòng)解凍用戶(hù)被凍結(jié)的優(yōu)惠券額度。超時(shí)自動(dòng)解凍機(jī)制,需要滿(mǎn)足高精度、高可用、支持海量業(yè)務(wù)、支持超長(zhǎng)延時(shí)。
場(chǎng)景二?
外賣(mài)業(yè)務(wù)對(duì)時(shí)效性非常敏感,從用戶(hù)下單起,便產(chǎn)生了“外送超時(shí)時(shí)間”,保障外賣(mài)業(yè)務(wù)的順序進(jìn)行。外賣(mài)超時(shí)機(jī)制,需要滿(mǎn)足高精度、高可用、支持海量業(yè)務(wù)。
?
場(chǎng)景三?
釘釘軟件設(shè)置日程后,需要在日程時(shí)間達(dá)到時(shí),自動(dòng)提醒用戶(hù)。釘釘日程提醒,需要滿(mǎn)足高精度、支持超長(zhǎng)延時(shí)。
2 概念介紹
那么讓我們來(lái)熟悉下消息隊(duì)列RocketMq定時(shí)消息對(duì)于定時(shí)消息、延時(shí)消息的概念。在用戶(hù)使用的視角和體驗(yàn)上,分為“定時(shí)性消息”和“延時(shí)性消息”兩大類(lèi)。定時(shí)性消息:Producer 將消息發(fā)送到消息隊(duì)列 RocketMQ 服務(wù)端,但并不期望這條消息立馬投遞,而是推遲到未來(lái)的某一個(gè)確定時(shí)間投遞到 Consumer 進(jìn)行消費(fèi)。如上一節(jié)中“場(chǎng)景三”。延時(shí)性消息:Producer 將消息發(fā)送到消息隊(duì)列 RocketMQ 服務(wù)端,但并不期望這條消息立馬投遞,而是從當(dāng)前時(shí)間延遲一定時(shí)段后才投遞到 Consumer 進(jìn)行消費(fèi)。如上一節(jié)中“場(chǎng)景一”和“場(chǎng)景二”。使用文檔詳見(jiàn)官網(wǎng):https://help.aliyun.com/document_detail/43349.html?spm=a2c4g.11186623.4.2.7e613030bocffQ
3 RockeMq定時(shí)消息優(yōu)勢(shì)
高性能高可用RocketMQ的分級(jí)延遲消息,性能較高,可無(wú)限堆積,且滿(mǎn)足高可用要求,支持精確到秒級(jí)的定時(shí)需求,且在海量存儲(chǔ)的情況下,時(shí)效精度較高。產(chǎn)品成熟度高在阿里巴巴經(jīng)濟(jì)體的各大業(yè)務(wù)及大促場(chǎng)景中,RocketMq定時(shí)消息已經(jīng)得到廣泛運(yùn)用,經(jīng)歷了無(wú)數(shù)流量洪峰和穩(wěn)定性考驗(yàn),積累沉淀出了業(yè)界先進(jìn)穩(wěn)定的定時(shí)消息系統(tǒng)。技術(shù)社區(qū)活躍RocketMq作為apache頂級(jí)項(xiàng)目,已經(jīng)建設(shè)完整的技術(shù)生態(tài)體系。支持多語(yǔ)言,多協(xié)議,定時(shí)消息天然繼承了頂級(jí)項(xiàng)目的優(yōu)點(diǎn),具備完整的技術(shù)生態(tài)。專(zhuān)業(yè)技術(shù)支持阿里云專(zhuān)注云計(jì)算,RocketMq持續(xù)伴隨阿里云技術(shù)架構(gòu)進(jìn)化升級(jí)。技術(shù)設(shè)施對(duì)外輸出的同時(shí),以強(qiáng)大的技術(shù)團(tuán)隊(duì)服務(wù)客戶(hù)業(yè)務(wù),為使用RocketMq產(chǎn)品的客戶(hù),持續(xù)提供專(zhuān)業(yè)技術(shù)支持。
4 特別說(shuō)明
本次新版定時(shí)消息功能進(jìn)行了深度內(nèi)核層架構(gòu)優(yōu)化,設(shè)計(jì)原理和功能實(shí)現(xiàn)上都做了較大的升級(jí)調(diào)整,從根本上進(jìn)行了定時(shí)消息架構(gòu)的變革,極大地提高了定時(shí)消息的穩(wěn)定性和性能。
總結(jié)
以上是生活随笔為你收集整理的如何优雅的处理业务逻辑中的定时和延时问题?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单好用!利用Spring AOP技术1
- 下一篇: 微服务网关 Kong 科普