gpt4 book ai didi

ruby-on-rails - 将时钟进程与Docker上的sidekiq worker分开

转载 作者:行者123 更新时间:2023-12-02 20:27:25 24 4
gpt4 key购买 nike

我目前正在将环境从Heroku中移出,我的应用程序的一部分正在运行一个时钟进程,该进程启动了Sidekiq后台作业。

据我了解,Sidekiq由一个客户端和一个服务器组成,该客户端将要排队的作业发送到Redis中,该服务器提取队列的请求并对其进行处理。我现在正在尝试将应用程序拆分为Docker上的以下容器:
-Redis容器
-时钟容器(使用Clockwork gem)
- worker 容器
-Web应用程序容器(Rails)

但是,我不确定应该如何拆分Sidekiq服务器和客户端。本质上,时钟容器需要在其上运行Sidekiq,以便客户端可以经常将作业发送到Redis队列。但是,工作容器还应该在其上运行Sidekiq(虽然是服务器),以便它们可以处理作业。我认为,很可能可以在不同容器之间划分职责,因为Heroku允许您在各种测功机之间进行划分。

我可以想象做到这一点的一种方法是分配时钟容器以拉出不存在的队列,以便它永远不会从队列中拉出任何作业,然后将工作程序设置为拉出已存在的队列。但是,对于我来说,这似乎并不是最理想的方法,因为它仍将检查此不存在的队列中的新作业。

关于如何开始进行此操作的任何提示或指南?

最佳答案

sidekiq客户端只是将作业发布到Redis中。 sidekiq守护进程仅订阅redis并在发布工作线程时启动它们。

因此,您只需将redis gem安装在两个容器上:Clock containerWorker Container,仅在Worker Container上启动worker守护程序,并为两者提供适当的redis config。您还必须确保 worker 源代码在两个服务器/容器上均可用,因为Sidekiq客户端仅存储 worker 类的名称,然后守护程序通过元编程实例化它。

但是实际上,您也可以只包括sidekiq守护进程以及处理 worker 工作所需的每个应用程序。是的,对于每个进程来说,有一个针对每个容器使用docker的最佳实践,但是恕我直言,这不是一个全有或全无的规则。在这种情况下,我将两个过程视为一个整体。这只是在后台运行一些代码的一种方式。然后,您只需配置相同应用程序的实例即可针对相同的sidekiq队列工作。或者甚至可以配置为每个物理节点再次运行一个单独的队列。

关于ruby-on-rails - 将时钟进程与Docker上的sidekiq worker分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com