MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

rails处理长执行时间的请求

Posted on 2010-02-20 04:42 leekiang 阅读(341) 评论(0)  编辑  收藏 所属分类: ruby
另一个常见的问题是当应用软件要执行一个需时长的请求时,处理不当。如果实现得不好,会让处理这个web请求的handler很长时间没有反应。

这个问题是在人机界面方面很普遍,而且也有一个普遍的解决方法 -- 把任务交给一个背景运行的过程或线程。任何开发过桌面应用的人都会觉得很熟悉。但是有时候如果开发者把切换和通信做得不好,也会碰到麻烦。

一个我觉得较好的办法,而幸好我的ThoughtWorks同事们也同意,就是使用一个actor。在这个模型里,web请求的handler把需时长的请求包装为一个命令(command),然后放进队列(queue)内。在背景运行的actor就监察着这个queue,从queue中提出并且执行这个命令。当它把这个命令执行完了,就通知前台界面的actor。通常这个queue一开始会是数据库的一个表,之后如有需要的话,再把它改为一个消息队列(message queue)。

和ActiveRecord的漏洞一样,我提起这个不是因为它是Rails里特有的问题;我们在各种应用也会看到同样的问题。值得在这里带出是因为用Rails的人们往往很容易忘了有这样的情况发生,也忘了有这样的模式去解决。我们发现Rails把web开发中重复又重复的环节变得简易和快,但是复杂的环节是仍然存在的。

来源:http://rickylui.com/lionwiki/index.php?page=Ruby+at+ThoughtWorks
     http://martinfowler.com/articles/rubyAtThoughtWorks.html

只有注册用户登录后才能发表评论。


网站导航: