使用芹菜来构建微服务

Rak*_*att 8 celery python-2.7 celerybeat microservices

我打算将一个项目分解成小型微服务.

所有的微服务都是基于cron的.我认为芹菜作为任务分配以及运行周期性任务的机制(celerybeat).

我不希望每个微服务器构建多个芹菜应用程序,因为这将增加多个代理和多个花系统用于监视的开销.

我尝试在多台服务器上使用单个应用程序,但我失败了 我对芹菜的需求是:

  1. 我需要为每个微服务提供独立的服务器
  2. 属于某些微服务的任务应该只在他们的服务器上执行; 没有在其他服务器之间共享任务
  3. 如果微服务停机,我不希望celerybeat用数千个待处理任务阻塞代理,导致其他微服务停止服务.
  4. 在微服务之间不需要任何通信.

我尝试分离每个工作人员的队列,这似乎是不可能的我每个服务器尝试过一个工作人员,但我需要每个微服务器上有一个以上的工作人员

Chi*_*and 7

对于您的用例,从单个代理进行简单的基于队列的路由就足够了.

只保留1个代理在任何一台服务器或单独的服务器上运行.

现在,在排队任务时,将它们添加到单独的队列中.

从微服务1:

In [2]: add.apply_async(args=(12, 1), queue='queue1')
Out[2]: <AsyncResult: 2fa5ca61-47bc-4c2c-be04-e44cbce7680a>
Run Code Online (Sandbox Code Playgroud)

启动worker只使用此队列

celery worker -A tasks -l info -Q queue1
Run Code Online (Sandbox Code Playgroud)

从微服务2:

In [2]: sub.apply_async(args=(12, 1), queue='queue2')
Out[3]: <AsyncResult: 4d42861c-737e-4b73-bfa8-6d1e86241d57>
Run Code Online (Sandbox Code Playgroud)

启动worker只使用此队列

celery worker -A tasks -l info -Q queue2
Run Code Online (Sandbox Code Playgroud)

这将确保微服务中的任务仅由该微服务的工作人员执行.

  • 可以详细解释一下这个问题吗?如果任务耗时且如果有太多任务排队,那么扩展工作人员应该没问题?你在监控什么? (2认同)