如何 manage/balance 服务实例上的半持久作业

How to manage/balance semi persistent jobs over service instances

我看到了我们尝试开发的服务的通用模式,我想知道是否有工具/库可以帮助解决这个问题。虽然微服务文献中讨论的默认作业来自 REQUEST -> RESPONSE 性质,但我们的作业或多或少是半永久性任务的分配。

此类任务的示例

目前我们的服务是用[=​​50=]编写的。由于 PHP 进程和消息队列连接的感知开销,我们希望单个服务进程同时处理多个这些作业。

这张图表有望说明我们头脑中的设置:

虽然 Zookeeper(和 Curator)进行负载平衡,但我没有发现任何关于分配永久性工作(可更新、可移动,并且在工作人员死亡时必须重新分配)

工作经理的拟议职责

是否有任何库/工具可以解决此类问题,从而起到作业管理器的作用?或者这是一个大的反模式,我们应该用其他方式来做吗?

您的员工听起来像是(api-less)服务本身。因此,您的要求可以重新表述为:

  • 了解已部署的服务
  • 了解可以托管服务的节点
  • 可以将服务部署到节点
  • 可以[向服务发送作业更新] = 重新部署services/invoke一些API已部署的服务
  • 如果服务或节点死亡,可以重新部署服务

查看 Docker 以部署、运行 和管理主机上的独立进程。

你应该看看 Gearman

它由一个分配作业的 client、一个或多个将拾取并执行作业的 workers 和一个维护函数列表的 server 组成(服务)和待处理的工作。如果工人死亡,它将重新分配工作。

RabbitMq 是简单的消息队列,非常容易上手。