Rap*_* Pr 5 ruby-on-rails delayed-job
在我的 Rails 应用程序中,我有一个需要大量数据库访问的长计算。
简而言之,我的计算用了 25 秒。
在后台作业(一个大的单个工人)中实现相同的计算时,相同的计算需要两倍的时间(即 50 秒)。我尝试了几种技术将工作放在后台进程中,没有对我的表现产生影响 => 使用 DelayJob/Sidekiq/在我的轨道内但在为工作创建的线程中执行该过程,但所有对我的影响都相同我的表演*2。
这种性能差异只存在于 rails 的“生产”环境中。看起来我的后台工作中没有完成由 rails 完成的优化。
我的技术环境如下=>
有没有人知道这种影响可能来自哪里?
后台作业不是需要用于加速事物的东西。它的主要含义是“即发即忘”,删除 25 秒的同步计算,并添加更多的异步计算。因此,您可以向用户提供她的请求正在处理的响应,并稍后返回计算。
您可以通过将大任务拆分为一些小任务并同时运行它们来从后台作业中获得速度增益。在你的情况下,我认为这是不可能使用的,因为你的计算中的操作的依赖性。
因此,如果您想加快计算速度,则需要研究数据结构的非规范化,在更新此计算的源数据时存储大型计算的一些计算值。因此,您将减少对用户结果请求的计算,而更多地计算数据存储。这是使用后台作业的好地方。这样您就完成了数据更新,创建更新缓存的后台任务。如果用户在此任务完成之前请求计算,您仍然需要等待缓存填满。
更新:我想我仍然需要回答你的主要问题。所以基本上后台任务处理的额外时间来自于实现。由于“即发即忘”方法,没有人需要后台任务调度程序仅监视新作业就消耗大量处理器时间。我不太确定,但认为如果你的计算复杂两倍,时间增益将是相同的 25 秒。
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |