定時和延時問題在業務場景中的常見處理

本文將從如何處理業務流程和信息分發中的定時和延時問題出發,橫向比較了業界常見的幾種方案,如直接多線程編碼、 Spring 定時調度框、大型分佈式調度框架、消息中間件定時消息,因爲消息中間件接口友好,調用方便,性能穩定,特別推薦了使用消息中間件來處理此類問題。同時對比了 ActiveMQ、RabbitMQ 和 RocketMQ 三種消息中間件在此類場景中的優劣勢。

爲了幫助大家理解消息中間件的使用,特別列舉了三種常見場景及使用方案,同時列舉了消息中間件 RocketMQ 定時消息的優勢。近期定時消息特性會做大的更新,推出的新版定時消息已在阿里內部,穩定運行近兩年,近期會發布到公有云上,敬請期待。

適用場景


在業務處理流程和信息分發過程中,定時\延時處理的需求可謂無處不在。如何優雅的滿足想要在未來的某個時間點,處理預期事件、分發既定信息,滿足對時間線的強訴求場景和業務邏輯的設計,常常也是我們經常會遇到的問題。筆者在橫向對比過幾個常用的技術方案之後,大概總結如下,分別都會有不同的優缺點:


直接多線程編碼Spring定時調度框大型分佈式調度框架消息中間件定時消息
優點較少

1、Spring集成環境,方便開發者集成。

2、接口、註解友好,方便開發者使用。

3、適合單機使用。

1、專用於分佈式調度處理場景。

2、充分利用業務機器資源,處理調度任務

3、經歷過大規模流量驗證,高可用。

1、接口友好,方便開發使用。

2、支持“定時”和“延時”兩種場景。

3、大型分佈式場景,性能較好。

缺點

1、多線程編碼,易出錯。

2、重複造輪子,不符合開發原則。

3、程序較複雜,難以維護。

1、適合單機使用,分佈式環境需要解決分佈式鎖問題。

2、適合定時場景,無法實現延時功能支持延時場景。

1、沒有單獨開源、售賣。

2、適合定時場景,無法實現延時功能支持延時場景。

無調度任務分片功能。

友好的接口設計、敏捷的開發模式,便於開發者快速高效地集成、研發。同時支持“定時”和“延時”兩種場景,以高性能和高可用,支撐大規模的分佈式業務場景。整體來看,消息中間件的使用更加便捷。

那麼在不同的消息中間件之間,是否對這樣的功能又有差別呢?首先讓我們來看看一個優秀的定時\延時消息中間件,需要滿足哪些特性?

1、輕量級,高性能,精確到秒級

2、支持高可用

3、足夠的定時長度,比如可以支持到 30 天、 60 天等

4、支持取消定時消息,取消延時任務

5、支持絕對定時和相對定時

6、支持海量定時消息存儲,高時效精度

綜上,我們對業界幾個常見的消息中間件做了簡單對比:在現有的主流消息系統中, ActiveMQ、RabbitMQ 和 RocketMQ 都有提供定時消息的實現。但是ActiveMQ定時性能在 300TPS 左右,只適合小量場景。RabbitMQ 提供了一個定時插件,性能可達 2000TPS 左右,但不支持高可用,且不能堆積太多消息。

RocketMQ 融合了各大定時技術組件的優勢,同時彌補了其他組件設計上的侷限,研發出了 RocketMQ 新版定時消息,以適用支撐更多定時\延時場景。

是騾子是馬拉出來溜溜。我們簡單看下幾個典型定時\延時場景,使用 RocketMQ 定時消息的實現方案。

場景一 :用戶秒殺爆品,使用優惠券,創建訂單就凍結了用戶優惠券額度,對於下單失敗的用戶,需要超時自動解凍用戶被凍結的優惠券額度。超時自動解凍機制,需要滿足高精度、高可用、支持海量業務、支持超長延時。

場景二:外賣業務對時效性非常敏感,從用戶下單起,便產生了“外送超時時間”,保障外賣業務的順序進行。外賣超時機制,需要滿足高精度、高可用、支持海量業務。

場景三:釘釘軟件設置日程後,需要在日程時間達到時,自動提醒用戶。釘釘日程提醒,需要滿足高精度、支持超長延時。

概念介紹


那麼讓我們來熟悉下消息隊列 RocketMQ 定時消息對於定時消息、延時消息的概念。在用戶使用的視角和體驗上,分爲“定時性消息”和“延時性消息”兩大類。

定時性消息:Producer 將消息發送到消息隊列 RocketMQ 服務端,但並不期望這條消息立馬投遞,而是推遲到未來的某一個確定時間投遞到 Consumer 進行消費。如上一節中“場景三”。

延時性消息:Producer 將消息發送到消息隊列 RocketMQ 服務端,但並不期望這條消息立馬投遞,而是從當前時間延遲一定時段後才投遞到 Consumer 進行消費。如上一節中“場景一”和“場景二”。

使用文檔詳見官網:

https://help.aliyun.com/document_detail/43349.html

RockeMQ 定時消息優勢


高性能高可用

RocketMQ 的分級延遲消息,性能較高,可無限堆積,且滿足高可用要求,支持精確到秒級的定時需求,且在海量存儲的情況下,時效精度較高。

產品成熟度高

在阿里巴巴經濟體的各大業務及大促場景中,RocketMQ 定時消息已經得到廣泛運用,經歷了無數流量洪峯和穩定性考驗,積累沉澱出了業界先進穩定的定時消息系統。

技術社區活躍

RocketMQ 作爲 Apache 頂級項目,已經建設完整的技術生態體系。支持多語言,多協議,定時消息天然繼承了頂級項目的優點,具備完整的技術生態。

專業技術支持

阿里雲專注雲計算,RocketMQ 持續伴隨阿里雲技術架構進化升級。技術設施對外輸出的同時,以強大的技術團隊服務客戶業務,爲使用 RocketMQ 產品的客戶,持續提供專業技術支持。

特別說明


本次新版定時消息功能進行了深度內核層架構優化,設計原理和功能實現上都做了較大的升級調整,從根本上進行了定時消息架構的變革,極大地提高了定時消息的穩定性和性能。

點擊文末“閱讀原文”,查看更多詳情信息~

作者信息:

玄初,阿里云云原生應用中間件技術 MaaS 雲消息產品技術研發,專注於中間件、微服務、Maas 領域。

本文縮略圖:icon by cg尐愳

Tips:

# 點下“看”❤️

# 然後,公衆號對話框內發送“杯刷”,試試手氣?????

# 本期獎品是來自淘寶心選的椰棕杯刷

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章