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

Joo*_*oor 17 php load-balancing microservices apache-zookeeper

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

此类任务的示例

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

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

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

  • Service Workers目前是deamonized PHP脚本
  • 对于Service Registry,我们正在关注Zookeeper

当Zookeeper(和Curator)进行负载均衡时,我没有找到任何可以分发永久作业的东西(可以更新,可移动,并且必须在工作者死亡时重新分配)

职位经理的职责

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

是否有任何库/工具可以解决这些问题,因此可以作为作业管理器使用?或者这是一个很大的反模式,我们应该采取其他方式吗?

Par*_*ras 10

你应该看看Gearman.

它由一个client分配作业,一个或多个workers将接收和执行作业的组成,server以及将维护待处理的功能(服务)和作业列表.如果工人死亡,它将重新分配工作.


Ser*_*aev 5

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

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

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