【问题标题】:Stateful Processes as a Service (Java)有状态进程即服务 (Java)
【发布时间】:2013-09-29 14:40:06
【问题描述】:

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

我需要以下“功能”:

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

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

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

【问题讨论】:

    标签: java web-services design-patterns architecture


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 2020-02-29
      • 2011-02-05
      • 2012-11-08
      相关资源
      最近更新 更多