1.
场景与目标概述
- 目标:在台湾机房的VPS上稳定发送大量事务/营销邮件,保证投递率与可控重试。
- 并发规模:目标支持峰值并发SMTP连接约500个,会话吞吐量示例为5,000封/分钟(≈83封/秒)。
- 要求:最低队列丢失率<0.1%,重试延迟可控,避免对外部收件方造成投递抖动。
- 约束:单VPS公网带宽、SMTP并发限制、发信IP信誉与台湾机房的出口策略。
- 关联技术:VPS、域名/MX、Postfix/Exim、Redis队列、CDN(仅限API/页面)、DDoS防御。
2.
VPS与网络基础配置建议
- 示例配置(台湾数据中心单节点):8 vCPU / 16 GB RAM / 200 GB NVMe / 1 Gbps 公网带宽。
- 网络:固定IPv4 + PTR记录、SPF/DKIM/DMARC完整配置、MX记录与逆向解析。
- 操作系统与邮件栈:Ubuntu 22.04 + Postfix 3.x + Redis 6 作为临时队列缓存。
- 安全:启用防火墙(iptables/nftables)、fail2ban、cloud-provider DDoS 防护接入。
- CDN提示:静态与API走CDN,但SMTP不通过CDN,需通过防护网关或上游清洗。
3.
队列设计与分层处理
- 本地Spool队列:Postfix主队列负责短期存放,主机上设置并发出站限制避免过载。
- 缓冲层:使用Redis作为发信任务缓存,支持优先级、去重与批量打包发送。
- 持久化:任务入库后持久化到MySQL/PG,避免Redis故障导致丢单。
- 优先级策略:事务型邮件(高)> 验证邮件(中)> 营销批量(低),不同队列独立并发配额。
- 背压机制:当SMTP失败率上升或CPU>80%时,降低低优先级队列出队速率。
4.
重试与退避策略(含数据示例)
- 分级重试:软失败(4xx)按指数退避,硬失败(5xx)立即丢弃并记录。
- 参数示例(可写入系统或配置文档):初始重试间隔 60s,最小退避 5m,最大退避 24h,最大重试总时长 7 天。
- 并发保护:对单目的IP并发连接上限10,超过进入延迟队列,防止被远端封IP。
- 指标监控:记录每条任务的尝试次数、上次尝试时间与最终状态,供运维判断。
- 性能对比表(示例数据):
| 场景 | 峰值并发 | TPS(封/秒) | CPU | 成功率 |
| 无退避(坏例) | 500 | 90 | 95% | 78% |
| 指数退避+分级 | 500 | 83 | 65% | 94% |
5.
Postfix/Exim具体参数与建议配置举例
- Postfix示例参数(示意,可写入main.cf): default_destination_concurrency_limit = 50;smtp_destination_concurrency_limit = 20;maximal_queue_lifetime = 7d。
- 重试退避参数(示例): minimal_backoff_time = 60s;maximal_backoff_time = 86400s(24h)。
- 连接与管线:启用SMTP连接重用、限制每连接并发邮件数以节省资源。
- 日志与追踪:启用track_connection_rate,配合logstash/ELK做告警和回溯。
- 资源配额:不同队列设置不同的 concurrency map,避免某一目标耗尽连接池。
6.
真实案例与运维经验
- 案例:某台湾支付企业在单VPS上高峰发送用户通知,原先无重试限流导致对方MTAs频繁拒绝并短时封IP。
- 处理:引入Redis缓冲、按域限流(同一域并发限制10),并用指数退避重试策略,三天内恢复正常投递。
- 服务器配置案例:实际使用机型 8 vCPU/16GB/200GB NVMe/1Gbps,Postfix+Redis+MySQL混合队列。
- 防护措施:接入上游DDoS清洗(带黑洞与流量清洗),并在VPS上启用connlimit、fail2ban策略。
- 运维建议:定期监控发信IP信誉、退信率和高级别告警;对关键告警设置自动降级策略并人工介入。
来源:高并发邮件发送场景下台湾服务器vps邮件队列与重试策略设计