如何優雅的處理業務邏輯中的定時和延時問題?
如何優雅的處理業務流程和資訊分發中的定時和延時問題?
本文將從如何處理業務流程和資訊分發中的定時和延時問題出發,橫向比較了業界常見的幾種方案,如
直接多執行緒編碼
、Spring定時排程框、大型
分散式排程框架
、訊息中介軟體定時訊息,因為訊息中介軟體介面友好,呼叫方便,效能穩定,特別推薦了使用訊息中介軟體來處理此類問題。同時對比了ActiveMQ、RabbitMQ和RocketMQ三種訊息中介軟體在此類場景中的優劣勢。
為了幫助大家理解
訊息中介軟體
的使用,特別列舉了三種常見場景及使用方案,同時列舉了
訊息中介軟體RocketM
Q定時訊息的優勢,近期定時訊息特性會做大的更新,推出的新版定時訊息已在阿里內部,穩定執行近兩年,近期會發布到公有云上,敬請期待。
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/documen
t_detail/43349。html?spm=a2c4g。11186623。4。2。7e613030bocffQ
3 RockeMq定時訊息優勢
高效能高可用
RocketMQ的分級延遲訊息,效能較高,可無限堆積,且滿足高可用要求,支援精確到秒級的定時需求,且在海量儲存的情況下,時效精度較高。
產品成熟度高
在阿里巴巴經濟體的各大業務及大促場景中,RocketMq定時訊息已經得到廣泛運用,經歷了無數流量洪峰和穩定性考驗,積累沉澱出了業界先進穩定的
定時訊息系統
。
技術社群活躍
RocketMq作為apache頂級專案,已經建設完整的技術生態體系。支援多語言,多協議,定時訊息天然繼承了頂級專案的優點,具備完整的技術生態。
專業技術支援
阿里雲專注雲計算,RocketMq持續伴隨阿里雲技術架構進化升級。技術設施對外輸出的同時,以強大的技術團隊服務客戶業務,為使用RocketMq產品的客戶,持續提供專業技術支援。
4 特別說明
本次新版定時訊息功能進行了深度核心層架構最佳化,設計原理和功能實現上都做了較大的升級調整,從根本上進行了定時訊息架構的變革,極大地提高了定時訊息的穩定性和效能。
上雲就看雲棲號:更多雲資訊,上雲案例,最佳實踐,產品入門,訪問:
https://
yqh。aliyun。com/