分类 | 技能
百万、千万级的短信发送,瓶颈紧张集中在韶光和效率的点上。本篇文章以500万级的短信发送为例来设计一套合理的参考方案,期间请教了几位朋友,此文为见地中和后的结果。
设计哀求如下:
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