与Docker上的sidekiq工作者分离时钟进程

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

据我所知,Sidekiq由一个客户端和一个服务器组成,客户端发送作业到Redis队列,服务器取出队列的请求并处理它们。 我现在试图将我的应用程序拆分到Docker上的以下容器中: – Redis容器 – 时钟容器(使用Clockwork gem) – 工作者容器 – Web应用程序容器(Rails)

但是,我不知道如何分裂这个Sidekiq服务器和客户端。 本质上,时钟容器需要在其上运行Sidekiq,以便客户端每隔一段时间就可以将作业发送到Redis队列。 但是,工作容器也应该运行Sidekiq(服务器),以便他们可以处理作业。 我认为分割不同容器之间的责任应该是很有可能的,因为Heroku允许你在不同的dynos上拆分它。

我可以想象做到这一点的一种方法是分配时钟容器来取消一个不存在的队列,这样它就不会从队列中取出任何作业,然后设置工作人员从一个存在的队列中取出。 然而,这对我来说似乎并不是最理想的方式,因为它仍然会在这个不存在的队列中检查新的作业。

任何提示或指导我如何开始这个呢?

sidekiq客户端只是将作业发布到redis中。 sidekiq deamon进程只是订阅redis,并在发布时启动工作线程。

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

但实际上,您也可以将sidekiq守护进程与每个需要处理worker作业的应用程序一起包含进来。 是的,每个stream程都有一个容器的docker的最佳实践,但是,这不是一个全部或者全部的规则。 在这种情况下,我将这两个过程视为一个整体。 这只是在后台运行一些代码的一种方式。 然后,您只需configuration相同应用程序的实例就可以对相同的sidekiq队列工作。 或者你甚至可以configuration每个物理节点再次运行一个单独的队列。

Interesting Posts