1
0
听起来您的担心是,您不想在每次需要运行任务时都花费时间或内存来加速rails堆栈?如您所说,如果您计划让守护程序全职运行,那么您可以对已加载rails堆栈的进程进行守护,并且只需在守护程序启动时为加载一次堆栈支付内存或时间相关的罚款。 Async_worker 是这种模式的一个很好的例子:它使用beanstalk将消息传递给一个或多个工作进程,每个工作进程都只是加载了完整rails堆栈的守护进程。
在执行此操作时,需要注意的一点是,您需要在部署时重新启动守护进程,以便它们可以重新加载更新的rails堆栈。我将其用于url缩短器应用程序(我运行的单个异步工作进程在访问者被重定向后等待保存转介数据),它运行得很好,我只有一个
|
2
0
您可以加载Rails的一个方面,如ActiveRecord,但当您着手进行时,加载整个环境的成本并不仅仅是加载ActiveRecord本身。你当然可以不包括像ActionMailer这样的方面,或者一些附带的东西,但我猜你不会从中看到太多胜利。 相反,我建议您要么像您所说的那样通过runner/console运行,而不是每次都进行引导,而是尝试批量处理,这样您就可以一次执行1000次而不是1次。有很多项目都使用这种风格,如果需要示例,您会想到一些批量邮件。DJ(delayed\u job)也做了类似的事情,它在数据库中存储了一点,表示此代码需要在将来的某个时候使用环境堆栈运行,但它会尽可能多地批处理在一起,以便您可以从中获得胜利。 另一种选择是使用尽可能多的精简版持久化迷你rails应用程序,这样内存使用率就可以更低,这样就可以监听请求,并在需要时进行出价。这将是更多的内存,但引导的延迟将基本上为零。 最后,事后想一想,这对Postgres来说是一个很大的用处。 |
smeeb · Akka守护程序服务 7 年前 |
Alex Z · 如何为tarantool编写lua守护进程 8 年前 |
Alasdair · Go:创建可从其他Go应用程序调用的守护程序 10 年前 |