问题描述
描述:有大量不同类型的任务,每个任务被设定为在某一时刻开始执行,每秒执行的任务可达到200个,但任务本身是比较简单的数据库操作初步方案:在数据库中设计队列列表,将任务序列化后保存进队列,并加上时间戳.一个进程每秒访问一次数据库,提取当前时间执行的任务并反序列化执行但感觉在这个并发下面效率不佳,寻求更好方案与相关技术要在最低开销的情况下保证应用的健壮性问题补充:我分析过backgroundrb,发现我的需求其实没那么复杂,并不需要很多的worker这样的多线程异步处理,一个按时间排序的任务队列即可,决定用drb自己实现了,先看看保存在数据库里性能好不好问题补充:哦,你那PPT我Shanghai On Rails上听过你的presentation了,谢了两位
解决方案
如果定时任务不是程序动态创建出来的话,那么直接用Linux的cron就可以了,访问数据库的那些操作用SQL直接写好,放在shell脚本里面,然后在cron里面配置定期执行就OK了。如果定时任务是程序动态创建出来的话,那么你可能需要自己写一个后台任务处理的机制,比方说后面跑一个drb server,前台创建任务就丢给drb去异步执行。现在ruby的这种异步消息处理服务器还挺多的,什么starling之类的。
解决方案二:
是的,robbin 已经解释的很详细了。我们项目中也重来不用那个什么backgroundrb,简单的数据库维护,更新等等操作都是通过cron跑的。如果有跟ruby代码本身打交道的,用messing来处理。之前我做了一个很简单的messing ppt:http://mmm.iteye.com/blog/187469
时间: 2024-11-09 05:53:12