以某时间点执行程序完成某些服务器操作

luo_yongyao 发布于 2014/07/05 10:20
阅读 144
收藏 0
PHP

需求如下:

类似于windows 计划任务,但是要求比较苛刻,要求精确到秒;

 譬如a用户在1月1日 23:22:20 执行了一次操作,  那么服务器程序能在该操作后2天后, 5天后, 10天后,X天后的该时间点 分别自动执行程序任务;

用户量大约有几十万个;  也就是说可能最低有几十万个待执行任务;

求好的解决方案, 执行效率很关键; 

corn ,windows 计划任务肯定不行, 设想几十万个corn ... 

服务器架构 centos+php+mysql

加载中
0
嘟嘟的米
嘟嘟的米
把用户ID 和上一次执行操作 作为一个对象,存在队列,用队列获得具体的执行方法和用户ID,然后完成执行。
0
jqnphy
jqnphy
设想一下,一天也就 24*60=1440 分钟,如果精确到分钟,只要设置每分钟执行,然后去全部扫描不就可以了?
0
dulios
dulios

楼主有一点观念上的错误:不要一看到计划执行的东西就非得用cron、计划任务什么的。这些个东西一般是就会系统级的任务

你可以写一个php脚本或任意其他程序长驻后台,就算几十毫秒运行一次检测,都是比较好的办法。如果对性能有极端要求,可以写个c程序,轮询队列什么的。具体实现可以再讨论讨论。

luo_yongyao
luo_yongyao
回复 @dulios : 谢谢你,这个考虑并发处理的问题,目前已经使用gearman 来处理这些并发任务, 目前需要解决的这个定时的问题, 类似的功能就是 qq邮箱的日历中的定时提醒功能;
dulios
dulios
回复 @luo_yongyao : 有个很重要的问题,就算你计划任务能做到精确到秒,万一几十万个用户都在这一秒运行一个命令,能在这一秒内处理完几十万个命令吗?
luo_yongyao
luo_yongyao
是的, 我的意思就是不用这些 cron 的方式, 如果用轮询感觉列队开销太大? 几十万条数据 进行时间轮询, 开销肯定不是一般的大; 所以求好的方法;
返回顶部
顶部