这是一个定时发送push的任务,需要给用户发puh消息。
大数据组会每天提供一批用户id,每天300到400w用户,一天需要发四轮。
每天的总push量达到了上千万。每天9点开始,21点结束,故每次push的定时任务需要在3小时内跑完。如果超过规定时间就不能在发了
1. 数据源由大数据提供,我们读共享文件,每天大概300W,每行一个账号 id
2. 后台用定时 shell 任务方式,shell 脚本中先判断线上文件是否存在,存在拷贝到当前目录,并新加子目录用来存放切割好的小文件,默认5W行一个文件,也可以由 sh 参数控制
3. 遍历子目录中文件,开启 php 进程,传参包含子文件路径,默认开启30个进程,也可以有 sh 传参控制,通过使用 wait 控制当前开启进程数量,wait 会等所有进程都结束后在开启下一批进程
4. 凌晨2点会先有一个预跑程序(凌晨是低峰时候,可以开多些进程),把跑好的数据存数据库中,每天一张表(该表不同程序删除,删表权限比较敏感,等数据比较多后通知 dba 手动删除线上数据)
5. 正式跑数据发 push 时候,会先判断用户求职意向和预跑时候是否更新过,如果没更新读预跑的数据库,否则重新查所有相关数据。
6. 个性化推荐 push 每条都单独放队列中,非个性化 push 满足100条后在放队列中(减轻队列消费压力)