每天发送数百万条短信:高并发短信发送指南
每天发送数百万条短信:TPS 规划算法、SMPP 绑定与窗口、队列与限速、送达回执处理、发送方 ID、静默时段和监控指标,适合国际短信群发团队。
作者: OmniChannels.ai Editorial Team · 审阅: BroadNet Messaging Solutions Team
短信与验证码
简短回答
要每天发送数百万条短信,应按峰值而不是日均值规划吞吐量:用必须发送的短信分段数除以发送窗口的秒数,为验证码流量预留余量,并把 SMPP 窗口设为至少 TPS 乘以往返时间。使用多个绑定、按运营商划分的队列,以及遇到限流错误会退避的限速器,单独处理送达回执,并把验证码和促销流量分开。
本页内容
要点速览
- 每天一千万条消息,平均每秒只有约 116 条,但把一次促销挤进四小时窗口则需要每秒约 694 条,而每多一个分段,这个数字就要成倍增加。
- SMPP 规范允许发送方在不等待响应的情况下连续发出多个请求;未完成请求的数量由实现自行决定,因此窗口需要协商和调优。一个好的起点是:窗口至少为 TPS 乘以以秒计的往返时间。
- 限流(ESME_RTHROTTLED,0x58)和队列已满(ESME_RMSGQFUL,0x14)是让您放慢速度并退避重试的信号,而不是立即重发。
- 送达回执是第二条高流量数据流:规划回执的消费者、存储和对账时,要像规划提交那样仔细。
- 容量是与服务商按账户和线路约定的;请以书面形式索取您的峰值数据,并在上线前测试。
本指南写给每天发送或即将发送一百万到一千万条短信的工程师、消息运营负责人和采购团队。内容介绍如何把日发送量转换为吞吐量目标、如何配置 SMPP 绑定和窗口、如何排队和限速、如何大规模处理送达回执,以及各个国家需要提前准备什么。示例中的数字是示意性的规划数字,并不代表任何服务商的容量。
每天数百万条,每秒需要发送多少条短信?
您需要的是分段数除以您实际能够发送的窗口的秒数。吞吐量以 TPS(每秒提交的消息或分段数)衡量,是峰值数字,而不是日均值。参见吞吐量(TPS)。
先计算平均值,再计算真实发送窗口内的峰值:
| 日发送量 | 24 小时平均每秒 | 若在 4 小时内发完 | 若在 2 小时内发完 |
|---|---|---|---|
| 1,000,000 | 11.6 | 69.4 | 138.9 |
| 5,000,000 | 57.9 | 347.2 | 694.4 |
| 10,000,000 | 115.7 | 694.4 | 1,388.9 |
有两个乘数会改变这张表:
- 分段数。 超过一个分段的消息会拆成多个部分提交,多数平台对每个部分都计数。平均 1.5 个分段的一千万条消息,就是一千五百万次提交。可通过短信字符限制和字符计数器来控制。中文属于 Unicode,一条短信只有 70 个字符,因此中文文案更容易拆成多段。
- 余量。 加上不属于营销活动的流量,例如验证码,再为重试和运营商变慢留出余量。30% 是常见的规划余量,但不是规则。
如何按最忙的一小时而不是平均值来规划吞吐量?
按流量最大的时段或窗口来规划,因为那时队列会堆积,也会出现限流。使用下面的公式:
所需 TPS =(活动分段数 ÷ 窗口秒数 + 验证码和提醒的峰值 TPS)×(1 + 余量)。
案例:一家区域零售商
一家虚构的零售商一天向海湾地区的客户发送 600 万条促销消息,平均每条 1.4 个分段。它希望在允许的白天时段内用四小时发完。
- 分段数:6,000,000 × 1.4 = 8,400,000。
- 窗口:4 小时 = 14,400 秒,所以 8,400,000 ÷ 14,400 = 每秒 583 条。
- 营销活动期间验证码和提醒的峰值流量:每秒 40 条(自己的测量值)。
- 余量:30%。
- 所需:(583 + 40) × 1.3 ≈ 每秒 810 条。
零售商会在上线前要求服务商以书面形式按线路确认这个数字。它是规划输入,并不说明任何平台能承载多少。
什么是 SMPP 绑定?需要多少个?
SMPP 绑定是您的系统与服务商 SMSC 之间的长连接 TCP 会话,通过凭据和允许的 IP 地址进行认证。SMPP(Short Message Peer-to-Peer)是用于交换短信的电信协议,专为持续的大流量而设计。参见 SMPP 绑定和 SMPP 与 REST API 对比。
有三种绑定类型:发送端(transmitter,只提交)、接收端(receiver,只接收回执和上行)和收发端(transceiver,在一个会话中同时处理两者)。多数发送方使用收发端绑定。
需要多少个绑定:
- 取您所需的峰值 TPS。
- 除以服务商为您的账户约定的每个绑定的速率。
- 向上取整,并至少增加一个备用绑定,这样断线不会使发送中断。
- 把验证码流量放在独立的绑定或账户上。
绑定按账户开通,因此请询问数量、每个绑定的速率和允许的源 IP。我们的 SMPP 网关页面和 SMPP 开发者文档介绍了连接方式。
SMPP 窗口是如何运作的?
窗口是您可以同时处于未完成状态的 submit_sm 请求数。SMPP 是异步的:规范说明发送方可以在不等待响应的情况下发出多个请求,并使用每个 PDU 中的 sequence_number 把响应与请求对应起来。最大未完成操作数不由规范定义,而由各方的实现决定。
根据排队算术得出的规则是:
窗口 ≥ 目标 TPS × 往返时间(秒)。
| 目标 TPS | 往返 50 ms | 往返 150 ms | 往返 300 ms |
|---|---|---|---|
| 100 | 5 | 15 | 30 |
| 400 | 20 | 60 | 120 |
| 810 | 41 | 122 | 243 |
窗口为 1 意味着发送方要等待每一个响应,吞吐量会被限制在 1 除以往返时间。提高窗口有助于提升速度,直到达到服务商允许的速率;超出之后只会造成限流。把这个数字当作需要与服务商协商并测试的值,而不是要最大化的值。使用多个绑定时要分摊 TPS:总计 810 TPS 的四个绑定,每个大约承载 203。
如何大规模排队与限速?
在应用与 SMPP 连接之间放置一个持久化队列,并用可在运行时调整的限速器来消费。队列吸收突发流量,限速器让您保持在约定的速率。
- 每个绑定、每条线路一个令牌桶。 按约定的 TPS 补充令牌;每次 submit_sm 取一个令牌,每个分段都要计数。
- 按优先级分队列。 先是验证码和提醒,然后是事务类,最后是促销类。
- 出错时退避。 遇到 ESME_RTHROTTLED(0x58)或 ESME_RMSGQFUL(0x14)时暂停,然后用带抖动的指数退避重试。不要在紧凑循环中重发。
- 断线后退避重连, 并记录未完成的序列号,以便对账哪些已被接受。
- 保持会话存活。 规范定义了 enquire_link 计时器,用于检查对端是否仍有活动会话,还定义了空闲计时器,超时后会话可能被断开。空闲时请发送 enquire_link。
- 幂等提交。 提交之前先保存您自己的消息 ID,这样重试就不会发送两次。
如何大规模按运营商路由?
除了按绑定外,也要按目标运营商排队和限速,因为一个变慢的运营商不应阻塞其他运营商。运营商可能按发送方或线路限制 A2P 流量,所以一个国家的实际限制可能低于账户速率。
- 把每个号码解析到其运营商。号码查询有助于此;参见 HLR 查询。
- 为每个运营商或线路组保留一个队列和一个限速器。
- 观察各运营商的送达率和回执延迟,并对变差的运营商降速。
- 询问服务商是否使用直连线路;参见直连线路与灰色线路。
如何大规模处理送达回执?
把送达回执视为与提交一样大的第二条数据流。回执以 deliver_sm 的形式到达您的绑定,您必须用 deliver_sm_resp 应答每一条。规范在回执中定义了这些最终和中间状态:DELIVRD、EXPIRED、DELETED、UNDELIV、ACCEPTD、UNKNOWN 和 REJECTD。参见送达回执和消息送达状态详解。
一种可靠的设计:
- 快速应答。 回执一进入队列,就立即返回 deliver_sm_resp。
- 异步处理, 由工作进程按消息 ID 把回执匹配到原始消息。
- 让处理过程具备幂等性。 回执可能重复,也可能乱序到达。
- 处理分段。 视线路而定,您可能收到每个分段一条或每条消息一条回执;请测试确认。
- 设置超时, 对始终收不到最终状态的消息,标记为未知。
- 让回执消费者远离提交路径, 这样积压不会拖慢发送。
发送之前,每个国家需要注册什么?
各国的发送方 ID 规则不同,在某些市场,未注册的发送方会被拦截或被替换。例如:阿联酋和沙特阿拉伯要求在运营商处注册,印度要求在 DLT 上注册头部(header)和每个模板,美国则使用 10DLC 或免费号码,而不是字母数字发送方。在我们跟踪的市场中,办理周期从几个工作日到约一个月不等。
请先启动注册,因为它们在上线的关键路径上。请查看各国短信营销规则、发送方 ID 检查器和阿联酋与沙特阿拉伯发送方 ID 指南。我们通过注册服务与您一起准备并提交注册;审批仍由监管机构和运营商决定。
大规模发送时如何遵守静默时段?
按每位收件人的当地时间和所在国家的规则安排促销,并让非促销流量不受该限制。部分市场公布了时段:阿联酋禁止在 21:00 至 07:00 发送营销短信,沙特阿拉伯为 22:00 至 09:00,斋月期间为 01:00 至 12:00。参见静默时段。
- 入队之前,先按国家和时区对名单分组。
- 当每组的窗口开启时,把它放入各自的队列。
- 窗口结束时停止促销队列,把剩余部分顺延到次日。
- 用发送时间规划器规划顺序。
窗口越窄,所需的 TPS 越高,所以请把它代入规划公式。
为什么要把验证码和促销流量分开?
验证码和提醒对时间敏感,而促销活动是批量发送;如果它们共用一个队列或绑定,营销活动可能延误登录验证码。请使用独立的绑定或账户;规则要求时使用独立的发送方 ID;使用具有严格优先级的独立队列,以及独立的监控。验证码不属于促销,所以静默时段对其不适用。同样要保护验证码线路免遭滥用:参见短信泵送欺诈防范和验证码指南。
应监控哪些 KPI?
监控提交健康状况、队列时延、回执结果和回执延迟,并按国家和运营商拆分。针对您自己的基线变化设置告警。
| KPI | 公式 | 说明什么 |
|---|---|---|
| 提交成功率 | 被接受的 submit_sm_resp ÷ 已发送的 submit_sm | 绑定和账户健康度 |
| 限流率 | ESME_RTHROTTLED 响应 ÷ 已发送的 submit_sm | 速率或窗口设置过高 |
| 队列时延(p95) | 从入队到提交的时间 | 容量不足 |
| 送达率 | DELIVRD ÷ 有最终状态的消息 | 线路和内容质量 |
| 失败与过期占比 | (UNDELIV + EXPIRED + REJECTD) ÷ 最终状态 | 号码有效性、发送方 ID、过滤 |
| 回执延迟(中位数和 p95) | 回执时间 − 提交时间 | 运营商变慢 |
| 回执覆盖率 | 最终状态 ÷ 已提交的消息 | 回执缺失 |
| 退订率 | STOP 回复 ÷ 已送达的促销消息 | 受众与内容的匹配度 |
诊断方法参见提高短信送达率。
数百万条群发的上线检查清单有哪些?
- 根据分段数、窗口和验证码负载计算出所需的峰值 TPS。
- 服务商以书面形式确认每个绑定的速率、绑定数量、窗口和源 IP。
- 每个国家的发送方 ID 已注册,需要时已注册模板。
- 先以一小部分流量做压力测试,再分步提升;不要一开始就用最大值。
- 队列、限速器、退避和幂等性已测试,包括强制断线。
- 回执管道已按全量回执做过测试。
- 已核实各国的静默时段调度。
- 验证码流量已分离并受到监控。
- 看板和告警已上线,并有负责人值守。
- 有一个能立即停止促销队列的停止按钮。
OmniChannels.ai 如何提供帮助
BroadNet 通过运营商直连发送短信,支持基于 TLS 的 SMPP 3.4(绑定按账户开通),并提供 REST API、群发、双向短信、Unicode 和阿拉伯语、HLR 查询和送达报告。容量按账户和线路核定:告诉我们您的目的地、峰值量、发送窗口和发送方 ID,我们会与您一起确定吞吐量、绑定和注册。我们的团队负责准备发送方 ID 注册。请带着您的发送量计划联系销售,或了解批发项目。
常见问题
发送一百万条消息,每秒需要发多少条短信?
用分段数除以发送窗口的秒数。一小时内发送一百万条单段短信,每秒约需 278 条;四小时内约需 69 条;分散在一整天则约需 12 条。多数平台按每个分段计一次,所以两段的短信会让所需速率翻倍。
SMPP 窗口大小是什么?如何设置?
窗口是您可以同时处于未完成状态的 submit_sm 请求数量,即已发送但尚未得到应答的请求。SMPP 规范允许异步请求,但把上限留给实现自行决定。一个实用的规则是:窗口至少为目标 TPS 乘以以秒计的往返时间,然后只在服务商同意的上限内提高,因为超出会导致限流。
高并发需要多少个 SMPP 绑定?
取决于您的峰值速率、服务商约定的每个绑定的限速,以及您的冗余需求。用峰值 TPS 除以约定的每绑定速率,向上取整,再至少增加一个备用,这样断线不会使发送中断。把验证码流量放在独立的绑定或账户上。绑定按账户开通。
收到 ESME_RTHROTTLED 该怎么办?
放慢速度。规范将 ESME_RTHROTTLED(0x58)定义为发送方超出了允许的消息限制。请暂停或减少提交,对被拒绝的消息使用带抖动的指数退避重试,绝不要在紧凑循环中重试,那只会延长限流。如果经常发生,说明您的窗口或速率高于约定的限制。
如何处理数百万条送达回执?
对每条 deliver_sm 立即用 deliver_sm_resp 应答,把回执放入队列,再异步处理并按消息 ID 存储。让处理过程具备幂等性,因为回执可能重复。回执消费者要与提交路径分开运行,并监控其积压程度。
可以在夜间发送促销短信吗?
在多个市场不可以。阿联酋禁止在 21:00 至 07:00 发送营销短信,沙特阿拉伯为 22:00 至 09:00,斋月期间为 01:00 至 12:00。请按每位收件人的当地时间安排促销,并把验证码和提醒单独发送,因为它们不属于促销。
资料来源
继续阅读
更多指南短信与验证码
A2P短信批发:如何选择供应商并测试线路
A2P短信批发详解:谁在采购、SMPP bind如何运作、送达回执与延迟如何反映线路质量,以及应当要求供应商落实的KYC与反欺诈控制,帮助您选对批发线路。
9 分钟阅读
短信与验证码
什么是短信网关?工作原理、类型与选择方法
什么是短信网关?了解一条短信如何从您的应用到达手机,网关的类型(API、SMPP、邮件转短信、GSM 调制解调器)、核心功能以及选择方法。
10 分钟阅读
集成
如何选择消息 API:CTO 选型清单
如何选择消息 API:面向 CTO 的选型清单,涵盖渠道覆盖、线路质量、Webhook、安全、限流、重试、SMPP、MCP、合规与定价,并提供加权评分表和冒烟测试方法,帮助出海企业用实测数据做出可向财务和安全团队交代的决策。
13 分钟阅读
