0

我正在构建一个允许客户“在网络中”运行单个工作进程的服务。这些流程旨在运行很长时间,并且大约每分钟都会收到新订单(事件驱动)。这些流程旨在继续运行,即使没有新订单并且所有订单都已处理。-> 每个客户 1 个流程。

我需要以下“功能”:

  • 开始一个新的进程
  • 结束进程(按需,从不自动)
  • 跟踪进程/用户
  • 接收流程的新“订单”(通过客户 ID 识别流程)
  • 通知客户当他的订单无法工作时,以防他/她的流程结束(例如发生异常,有人杀死了服务器......)

我正在寻找允许我解决以下问题的模式或最佳实践: - 一台服务器内的进程管理(例如,使用静态列表或单例模式,类似这样的东西来跟踪用户 ID 和进程之间的映射) -多台服务器的进程管理(可扩展性):一台服务器可能运行 100-200 个进程,如果我获得更多客户,我将如何记住进程在哪台服务器上运行?

我敢肯定,之前也有其他人遇到过这些问题,当然也有“正确”和“错误”的做法。

4

1 回答 1

0

我强烈建议您创建一个持久的集中式数据存储来保留您的客户 --> 流程列表。特别是当您谈论请求之间的分钟数时。

有一个分派模式来处理将请求发送到正确的服务器/进程将非常简单。您可能应该在每台机器上运行它,允许它将请求路由到内部处理器,或者将其发送到另一台机器。

通过这种方式,您可以获得非常好的故障转移扩展。任何机器都可以分派给其他任何机器。您将需要一个 master,其工作是监视其他机器的故障(读取集中表,并 ping 每个进程(只需使其成为另一种顺序)。

于 2013-09-24T14:19:13.733 回答