如何管理/平衡服务实例上的半持久性作业

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

此类任务的示例

  • 在消息队列中侦听来自源 X 和 Y 的数据,关联传入的数据并将其存储在 Z 中。
  • 保留一个内存中缓冲区,该缓冲区在每次有新数据输入时计算过去 15 分钟数据的运行平均值。

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

一张图表,希望能说明我们脑海中的设置:services_setup

  • 服务工作者目前是去自动化的 PHP 脚本
  • 对于服务注册表,我们正在查看Zookeeper

虽然Zookeeper(和馆长)做了负载平衡,但我没有发现任何关于分配永久工作的东西(这些工作是可更新的,可移动的,并且在工人死亡时必须重新分配)

作业管理器的拟议职责

  • 了解工作
  • 了解可以完成这些工作的服务
  • 可以将作业分配给服务
  • 可以将作业更新发送到服务
  • 如果工作人员死亡,可以重新分配工作

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


答案 1

你应该看看Gearman

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


答案 2

您的 worker 听起来像(无 api)服务本身。因此,您的要求可以重新表述为:

  • 了解已部署的服务
  • 了解可以托管服务的节点
  • 可以将服务部署到节点
  • 是否可以 [将作业更新发送到服务] = 重新部署服务/在已部署的服务上调用某些 API
  • 如果服务或节点死亡,可以重新部署服务

查看 Docker 以在主机上部署、运行和管理隔离的进程。


推荐