分类 | 技能

百万、千万级的短信发送,瓶颈紧张集中在韶光和效率的点上。
本篇文章以500万级的短信发送为例来设计一套合理的参考方案,期间请教了几位朋友,此文为见地中和后的结果。

设计哀求如下:

phpswool任务队列用户可操作的百万级短信发送体系设计思绪 Bootstrap

1、用户登录后台短信发送系统,操作页面上传手机包(500万条)、编辑短信内容,实现天生一条短信发送任务

2、用户随时刷新页面须要看到短信发送任务和状态

3、单条短信发送韶光是50毫秒,限两小时内发送完毕

4、统计发送效果

5、同一个用户7天内收到短信条数不能大于10条,3天内不能大于3条

在这样的条件下能确定的有几点:

1、要让用户看到发送记录,数据必须持久化,设计任务表和详情表

2、发送记录状态三种(待发送、正在发送、已完成)

3、利用操持任务+行列步队+多进程发送

4、终极发送完成须要变动记录状态为完成

接着可以确定操作:

1、用户添加发送任务上传手机包时,操作文件将手机号和内容入行列步队,并且任务表中天生一条记录,状态为待发送;此时的行列步队名称一定是包含任务ID的,即单个行列步队单个名称

2、一个操持任务卖力扫描记录表状态为待发送的任务,对单个任务在脚本内部利用自启子进程来实现多进程发送,此时变动记录表中任务状态为发送中,500万级单个任务估量启动40个子进程能确保两个小时发送完成,这样能担保多个用户同时天生发送任务时效率问题,或者利用swool这样的框架

3、发送过程中有两步操作(从发送详情表中止定是否知足7天等发送条件、插入发送详情记录:状态区分)

4、进程实行完成修公理务表中的状态,发送完毕

5、列出任务列表时查询详情表天生发送效果统计

可以优化的点:

1、判断是否知足发送条件,可以设计单个用户的redis缓存,用来记录每次短信发送的韶光,以此为判断依据

2、发送效果统计优化:在任务表中增加统计字段,发送短信的过程中将各项统计数设置到缓存,发送完毕存到任务表字段中

作者:zhang