有状态进程即服务 (Java)



我正在构建一个服务,允许客户"在 Web 中"运行单个工作进程。这些流程被设计为运行很长时间,并且大约每分钟都有新订单(事件驱动(。这些流程旨在继续运行,即使没有新订单并且所有订单都已处理。-每个客户> 1 道工序。

我需要以下"功能":

  • 启动新流程
  • 结束进程(按需,从不自动(
  • 跟踪进程/用户
  • 接收流程的新"订单"(按客户 ID 识别流程(
  • 当客户的订单无法完成时通知客户,以防他/她的流程结束(例如,发生异常,有人杀死了服务器......

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

我相信以前还有其他人遇到过这些问题,当然也有"正确"和"错误"的方法。

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

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

这样,您可以获得非常好的故障转移扩展。 任何机器都可以派给任何其他机器。 您将需要一个主服务器,其工作是监视其他机器的故障(读取集中式表,并ping每个进程(只需将其设置为另一种顺序(。

最新更新