您當前的位置:首頁 > 舞蹈

如何優雅的處理業務邏輯中的定時和延時問題?

作者:由 阿里云云棲號 發表于 舞蹈時間:2020-04-29

如何優雅的處理業務流程和資訊分發中的定時和延時問題?

本文將從如何處理業務流程和資訊分發中的定時和延時問題出發,橫向比較了業界常見的幾種方案,如

直接多執行緒編碼

、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/