本文將從如何處理業務流程和信息分發中的定時和延時問題出發,橫向比較了業界常見的幾種方案,如直接多線程編碼、 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:
# 點下“在看”❤️
# 然後,公衆號對話框內發送“杯刷”,試試手氣?????
# 本期獎品是來自淘寶心選的椰棕杯刷。