有状态进程即服务(Java)

时间:2013-09-24 11:40:53

标签: java web-services design-patterns architecture

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

我需要以下“功能”:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

通过这种方式,您可以获得相当不错的故障转移。任何机器都可以发送到任何其他机器。您将需要一个主服务器,其工作是监视其他计算机的故障(读取集中式表,并ping每个进程(只是使其成为另一种顺序)。