在集群上部署optaplanner

时间:2014-06-05 08:25:51

标签: parallel-processing optaplanner drools-planner

我知道optaplanner在问题规模上非常好。 但是如何根据问题请求的数量进行扩展呢? 目前,我们已将optaplanner公开为REST服务。 它每天可以获得数百个调度请求。 10秒后停止搜索。这意味着在某些峰值处,队列中存在多个调度请求。 我们可以做些什么来在多台机器上并行化请求?

1 个答案:

答案 0 :(得分:2)

可以使用对多租户设置(在群集上)的所有低级支持:

  • SolverFactory是线程安全的,每个节点1个
  • 每个节点每个线程
  • 1 Solver。因为单个Solver占用单个Thread(它不会执行任何IO,不像Web请求等),我建议不要运行比线程更多的求解器。
  • Solver.terminateEarly()是线程安全的,如果节点正在退出,则可以在所有Solvers上调用。

但是,对于多租户设置尚未没有高级支持。因此,您需要自己构建:

  • 要处理的队列请求,以防更多请求进入而线程可用。具有CPU核心数量大小的JDK ExecutorService应该足够了。只需将请求提交为Future即可。在未来构建解算器。在bootstrap构建SolverFactory。
  • 根据用户饱和度,可选择允许更多/更少的时间。 terminateEarly()可以在这方面提供帮助。
  • 在群集节点上进行负载均衡。每个群集都有1 ExecutorService
  • 偷工作?
  • 高可用性
  • 故障转移
  • ...

我们将来会建立高层支持。请 add your requirements in this jira issue