本文由騰訊雲架構師技術同盟策劃,作者章為忠,原題“如何設計一個企業級消息推送系統架構?”,下文有修訂和重新排版。
1、引言
想象一下這樣的場景:隨着企業規模擴大,業務系統日益增多,而幾乎每個系統都包含消息通知的功能模塊。此時,各業務系統不得不重複開發消息推送功能,不僅耗費大量人力與時間成本,功能質量也難以統一保障。更麻煩的是,郵件、短信、企業微信等推送渠道各自為戰,推送效果參差不齊不説,還讓管理工作陷入混亂。加之不同渠道的消息分散在各處,員工稍不留意就可能錯過重要通知,影響工作效率與決策及時性。如果你是技術負責人,該如何搭建一套能解決這些問題的企業級統一消息推送平台?今天我們就從核心挑戰出發,拆解一套可落地的統一推送服務架構方案。
技術交流:
- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》
- 開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點此)
(本文已同步發佈於:http://www.52im.net/thread-4863-1-1.html)
2、面臨的技術挑戰
在動手畫圖做方案之前,我們必須先明確設計一個消息推送系統面臨哪些核心挑戰。
這些是架構設計的關鍵所在:
1)多渠道集成難題:郵件、短信、企業微信等渠道的接口規範和推送邏輯存在較大差異,如何將它們完美集成?這背後需要解決接口適配、協議轉換等底層問題。
2)高併發與高性能要求:隨着業務的增長或是促銷活動期間,消息量可能從日均 10 萬飆升至 100 萬,系統必須能夠扛住高併發,保證 “推得快、不卡頓”,同時要具備足夠大的吞吐量和足夠低的延遲。
3)可靠性與可用性要求:核心消息(訂單提醒、會議通知等)一旦丟失或重複發送都會造成嚴重問題,因此必須確保100% 送達;系統還需實現 7×24 小時不間斷運行,杜絕單點故障。
4)靈活的模板與個性化推送:不同的業務需要配置不同的消息模版(營銷活動需要活潑的模板,財務通知則需要嚴謹的格式);此外,還要能夠根據用户偏好進行推送(例如用户只查看企業微信消息),以提高觸達效果。
5)易於集成與擴展:各業務系統要能夠 “即插即用” 地接入推送服務;而且,未來新增渠道、新業務時,需要確保無需對平台進行大規模修改就能快速支持。
在深入瞭解當前消息推送工作中存在的各類問題與潛在挑戰之後,我們再來梳理一條消息從發送到接收都經歷了哪些過程和處理?推送系統在企業整體架構中處於什麼位置?請接着往下讀。。。
3、系統架構核心流程解析(消息推送的全鏈路步驟)
消息推送從發起至接收的核心流程步驟如下:
第1步:在各應用系統發送通知內容到消息網關;既可以單條推送,也可以支持批量推送;例如常見的訂單通知和支付通知。
第2步:接下來,由消息網關轉發到消息分發服務,在這一層,將會對消息進行驗證、確定好優先級、套用格式模板(這裏對應在後台維護一個模板庫)和確定發送的時間。
第3步:進入到消息路由,也就是技術上常説的異步消息隊列。
第4步:通過各個消息渠道,進行具體的消息發送,如:APP站內通知/郵件通知/短信通知/社交賬號通知/辦公羣通知等。
第5步:通知的發送記錄和狀態,以及統計分析(例如同一個賬號同一天發送多少條)。
第6步:就是整體的推送統計,例如:每週總共發送多少次、觸達多少用户、打開閲讀量有多少、轉化多少,從而不斷提升你產品的用户體驗。
4、推送系統在全局系統架構中的位置
從架構結構來看,一個複雜業務平台通常涵蓋表現層、接入層、應用層、服務層(含中台)及基礎層等核心模塊。作為業務系統中不可或缺的組成部分,推送服務並不直接面向終端用户,而是支撐各類應用穩定運行的基礎性服務。它在整體架構中的具體位置如下所示:
(▲ 圖中紅色部分為統一消息推送平台)
5、 推送系統整體架構設計
5.1 概述
接下來將正式啓動並着手設計一套更為完整、系統且具備可擴展性的統一消息推送架構體系。平台採用「接入層 - 業務層 - 服務層 - 數據存儲」的四層架構,通過各層協同實現消息推送的標準化與高效化。具體架構如下圖所示:
上圖展示了統一推送平台的整體架構。每一層的功能和作用將在下面的小節中分別介紹。
5.2 接入層
作為外部請求進入系統的第一道關口,接入層核心作用是「過濾無效請求,築牢系統安全防線」。
這一層通過 API 網關集中管理所有推送請求,重點完成三項管控:
1)身份驗證:僅授權業務系統憑有效憑證調用,阻斷非法訪問。
2)權限校驗:按規則限定不同系統的推送渠道,比如 A 系統可用短信、B 系統僅開放企業微信,避免越權。
3)流量控制:設置閾值(如單系統每秒最多發 1000 條)實現削峯,防範攻擊或突發流量壓垮系統。
舉例來説:營銷系統調用推送接口時,API 網關會先驗 token 有效性,確認其有短信和郵件權限後,再限制請求頻率,確保消息推送節奏在系統承載範圍內,從接入環節保障流程安全穩定。
5.3 業務層
負責解析請求、做核心決策,是業務規則的集中處理中心。
收到請求後,先解析內容:要推給誰?用什麼模板?什麼時候推?優先級高不高?
比如:收到訂單系統「訂單支付成功」的推送請求,會先匹配「支付通知」模板,確定接收人,設為消息推送的優先級「高」(必須立即推),再判斷髮送渠道,調用對應的消息推送服務。
5.4 服務層
集成所有推送渠道,把統一格式的消息「翻譯」成各渠道能識別的格式。
核心是「適配器模式」:每個渠道對應一個適配器(如短信適配器、企業微信適配器),適配器負責格式轉換和接口調用。
比如:企業微信適配器,會把業務邏輯層生成的消息,按企業微信 API 要求的格式組裝(加簽名、填應用 ID),再調用企業微信的接口發送。需要接入新渠道時,只需開發一個對應的適配器即可,不用改其他層,擴展性拉滿。
5.5 數據存儲層
數據存儲層主要是對全流程數據、消息進行系統化管理。
即存儲原始消息內容、推送參數等業務數據,也記錄各環節的處理日誌、渠道反饋結果與用户交互行為數據。
通過統一的數據模型與存儲規範,為後續的推送效果分析、業務優化與數據追溯提供可靠的數據支撐,形成 “接入 - 處理 - 分發 - 存儲” 的閉環管理體系。
6、推送系統技術架構設計6.1 應用集成架構業務系統(ERP、OA、CRM、IM聊天、客服系統等)通過接口方式接入統一消息平台,能夠接入短信、郵件、站內信、企業微信等多種信息渠道,支持以操作界面形式實現統一消息發送。可通過平台界面,編輯消息內容或引用消息模板,實現信息的多渠道統一發送。平台應用集成架構如下圖所示:
6.2 平台技術架構
我們將整個平台系統拆解為多個關鍵服務模塊,比如
1)消息融合接收服務;
2)消息處理分發服務;
3)消息模版服務;
4)渠道發送服務;
5)後台管理服務等。
這些服務模塊全面覆蓋從請求接入到消息推送、再到後續分析的全流程。完整的技術架構圖如下:
7、 本文小結
企業級統一基礎推送服務,是一個通用特性,適用於所有現代分佈式應用,無論採用何種編程語言和技術。通過統一推送服務解決分散推送的痛點,避免了開發重複造輪子,消息更精準、渠道更符合偏好、關鍵消息不丟失、系統不宕機。讓消息真正成為業務運轉的助力而非負擔。
不過在實際落地時,需結合企業規模靈活調整:若企業僅部署少數幾個業務系統,單獨搭建完整的推送系統反而可能造成資源浪費,此時選擇輕量化的集成方案會更具性價比。
8、 參考資料
[1] 極光推送系統大規模高併發架構的技術實踐分享
[2] 魅族2500萬長連接的實時消息推送架構的技術實踐分享
[3] 專訪魅族架構師:海量長連接的實時消息推送系統的心得體會
[4] 一個基於長連接的安全可擴展的訂閲/推送服務實現思路
[5] 實踐分享:如何構建一套高可用的移動端消息推送系統?
[6] Go語言構建千萬級在線的高併發消息推送系統實踐(來自360公司)
[7] 騰訊信鴿技術分享:百億級實時消息推送的實戰經驗
[8] 百萬在線的美拍直播彈幕系統的實時推送技術實踐之路
[9] 京東京麥商家開放平台的消息推送架構演進之路
[10] 解密“達達-京東到家”的訂單即時派發技術原理和實踐
[11] 技術乾貨:從零開始,教你設計一個百萬級的消息推送系統
[12] 長連接網關技術專題(四):愛奇藝WebSocket實時推送網關技術實踐
[13] 喜馬拉雅億級用户量的離線消息推送系統架構設計實踐
[14] 微信直播聊天室單房間1500萬在線的消息架構演進之路
[15] 百度直播的海量用户實時消息系統架構演進實踐
[16] 消息推送技術乾貨:美團實時消息推送服務的技術演進之路
[17] 揭秘vivo百億級廠商消息推送平台的高可用技術實踐
[18] 得物從零構建億級消息推送系統的送達穩定性監控體系技術實踐
[19] B站千萬級長連接實時消息系統的架構設計與實踐
[20] 轉轉千萬級用户量消息推送系統的架構演進之路
(本文已同步發佈於:http://www.52im.net/thread-4863-1-1.html)