本文由腾讯云架构师技术同盟策划,作者章为忠,原题“如何设计一个企业级消息推送系统架构?”,下文有修订和重新排版。
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、 参考资料
[2] 魅族2500万长连接的实时消息推送架构的技术实践分享
[3] 专访魅族架构师:海量长连接的实时消息推送系统的心得体会
[6] Go语言构建千万级在线的高并发消息推送系统实践(来自360公司)
[10] 解密“达达-京东到家”的订单即时派发技术原理和实践
[11] 技术干货:从零开始,教你设计一个百万级的消息推送系统
[12] 长连接网关技术专题(四):爱奇艺WebSocket实时推送网关技术实践
[14] 微信直播聊天室单房间1500万在线的消息架构演进之路
[16] 消息推送技术干货:美团实时消息推送服务的技术演进之路
[17] 揭秘vivo百亿级厂商消息推送平台的高可用技术实践