高并发短信网关平台建设方案概述
本方案涵盖了架构设计、技术选型、核心功能、高可用保障以及实施路径,旨在构建一个能够应对千万级日吞吐量、稳定、安全、可扩展的现代短信网关平台。
高并发短信网关平台建设方案
一、 项目概述与目标
1.1 项目背景
为满足公司业务(如用户注册、登录、交易验证、营销通知等)对短信服务的高并发、高可靠性需求,避免因单点故障、性能瓶颈或通道不稳定导致的业务影响,特建设此统一的高并发短信网关平台。
1.2 核心目标
- 高并发:支持日均千万级,峰值QPS 10000+的短信发送请求。
- 高可用:系统整体可用性99.99%,具备多活容灾能力。
- 低延迟:平均端到端延迟低于500ms,95%请求在1s内完成发送。
- 高可靠:短信最终送达率不低于99.5%。
- 安全:具备完备的防攻击、防刷能力。
- 易扩展:支持水平扩展,能够快速应对业务量增长。
二、 整体架构设计
本方案采用 “分层解耦、异步化、微服务” 的架构思想。
2.1 架构图
架构图Mermaid文件
---
config:theme: baselayout: dagre
---
flowchart TBsubgraph s1["客户端层"]A["Web/App/业务系统"]endsubgraph s2["网关层"]B["负载均衡器 SLB/Nginx"]C["Shenyu API Gateway集群"]endsubgraph s3["微服务层"]D["认证鉴权服务"]E["业务风控服务"]F["短信处理服务"]endsubgraph s4["基础设施层"]G["消息队列 Kafka集群"]H["缓存 Redis集群"]I["数据库 MySQL集群"]J["注册中心 Nacos集群"]K["监控体系 Prometheus/Grafana"]endsubgraph s5["发送工作者层"]L["短信发送Worker集群"]M["通道管理服务"]N["通道适配器<br>通道A、通道B、通道C..."]endA --> BB --> CC --> D & ED --> FE --> FF -- 异步化 --> GG -- 消费 --> LL -- 获取通道 --> MM -- 状态管理 --> NL -- 调用 --> NF -- 存储验证码 --> HL -- 存储发送日志 --> ID -.-> JE -.-> JF -.-> JK -- 采集指标 --> C & DK -- 采集日志 --> ALL["所有服务"]
2.2 核心组件说明
- API网关层 (Shenyu):
- 职责:统一入口、鉴权、限流、熔断、日志、监控。
- 高并发保障:基于Netty的异步非阻塞I/O模型。
- 关键插件:
JWT
鉴权、RateLimiter
限流、Resilience4j
熔断、Logging
日志。
- 微服务层:
- 认证鉴权服务:验证调用方身份和权限。
- 业务风控服务:执行精细化的频率限制(如手机号、IP、设备指纹限流)和恶意 pattern 检测。
- 短信处理服务:核心业务逻辑,接收请求、生成验证码、存入Redis、向Kafka投递任务。
- 基础设施层:
- 消息队列 (Kafka):实现异步化和削峰填谷,解耦请求处理与短信发送。
- 缓存 (Redis):存储验证码(Key:
SMS:${phone}
, Value:${code}
, TTL: 120s)、计数器(用于限流)。 - 数据库 (MySQL):存储发送记录、模板、签名等,需分库分表。
- 注册中心 (Nacos):服务发现与配置管理。
- 发送工作者层 (Worker):
- 短信发送Worker:无状态服务,从Kafka消费任务,调用通道管理服务获取最佳通道进行发送。
- 通道管理服务:维护多个短信通道(至少3家供应商)的健康状态(成功率、延迟、余额),实现加权随机或优先级的动态路由和故障自动切换。
三、 技术选型
组件类别 | 推荐技术 | 备注 |
---|---|---|
API网关 | Apache Shenyu | 高性能、异步、插件化生态丰富。 |
微服务框架 | Spring Cloud Alibaba | 与Nacos、Sentinel等集成度高。 |
消息队列 | Apache Kafka | 高吞吐、低延迟、持久化,适合日志类场景。 |
缓存 | Redis Cluster | 高性能内存数据库,支持集群模式。 |
数据库 | MySQL + ShardingSphere | 关系型数据库,通过分库分表支撑海量数据。 |
注册/配置中心 | Nacos | 服务发现和配置管理一体化。 |
监控日志 | Prometheus + Grafana + Loki | 指标监控+日志聚合,构建可观测体系。 |
开发语言 | Java | 主流选择,生态成熟,人才储备足。 |
四、 核心功能模块设计
4.1 高并发处理机制
- 异步化:HTTP请求处理与短信发送通过Kafka解耦,网关和业务服务快速响应客户端。
- 削峰填谷:Kafka缓冲突发流量,Worker以恒定速度消费,保护下游通道。
- 无状态服务:所有服务均可水平扩展,通过增加Pod或实例应对流量增长。
4.2 智能通道路由与降级
- 多通道冗余:对接至少3家优质供应商。
- 动态权重:根据实时监控的成功率和响应时间自动计算通道权重。
- 故障转移:当某通道失败率骤升或响应超时,自动将其降级并切换到备用通道。
- 并发发送:对极高优先级的短信,可同时投递至多个通道,取最先成功的结果。
4.3 全方位安全与风控
- 网关层限流:Shenyu插件实现全局限流和基于IP的限流。
- 业务层风控:
- 手机号频率限制:
Redis INCR
命令实现LIMIT:${phone}:${date}
,限制单日次数。 - IP频率限制:同上。
- 图形验证码前置:发送短信前必须先验证图形码,有效防止机器攻击。
- 黑名单机制:对恶意手机号、IP加入黑名单。
- 手机号频率限制:
4.4 高可用与可靠性保障
- 集群部署:所有核心组件无一例外,全部采用集群模式,消除单点故障。
- 数据持久化:Kafka消息持久化,确保任务不丢失。MySQL主从复制,Redis数据持久化。
- 幂等性设计:短信发送支持幂等,防止因重试导致重复发送。
- 状态回调与对账:主动获取或接收通道的回执报告(
DELIVRD
/UNDELIV
),更新数据库状态,并定期与通道商账单对账。
五、 实施路线图(Phased Approach)
Phase 1: 最小可行产品 (MVP) & 技术验证 (2-3周)
- 搭建基础微服务骨架(Spring Cloud)。
- 集成Shenyu网关,实现基本路由和鉴权。
- 对接1家短信通道,实现同步发送流程。
- 集成Redis,实现验证码存储和简单限流。
Phase 2: 核心能力建设 (3-4周)
- 引入Kafka,完成异步化改造。
- 开发通道管理模块,对接第2、3家通道商。
- 实现动态权重路由和故障转移逻辑。
- 完善风控服务,实现手机号/IP限流。
- 搭建Prometheus+Grafana监控仪表盘。
Phase 3: 优化与加固 (2周)
- 实现详细的管理后台(查看日志、统计报表、手动切换通道)。
- 进行压力测试和混沌工程演练(模拟通道故障、网络延迟),验证系统弹性。
- 完善告警机制(钉钉、短信、电话)。
Phase 4: 上线与迭代
- 灰度上线,先承接少量非核心业务流量。
- 逐步切量,持续监控系统表现。
- 根据业务反馈和监控数据,持续迭代优化。
六、 成功度量 (Metrics for Success)
- 性能指标:网关平均延迟 < 50ms,端到端发送成功率 > 99.5%,峰值QPS处理能力。
- 资源指标:系统在70%平均负载下运行平稳。
- 业务指标:客户投诉率(收不到短信)下降90%以上。
- 成本指标:通过智能路由,优先使用性价比高的通道,整体短信成本下降。
此方案提供了一个基础架构,可以根据具体公司的技术栈和业务需求进行微调。