3

我知道 optaplanner 可以很好地缩放问题大小。但是它如何扩展问题请求的数量呢?目前,我们已将 optaplanner 公开为 REST 服务。它每天可以收到数百个调度请求。10 秒后停止搜索。这意味着在某些高峰时,队列中有多个调度请求。我们可以做些什么来并行处理多台机器上的请求?

4

1 回答 1

3

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

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

但是,目前还没有对多租户设置的高级支持。所以你需要自己构建它:

  • 将要处理的请求排队,以防进入的请求多于可用的线程。ExecutorService具有 CPU 内核数量大小的JDK应该足以满足此要求。只需将请求提交为Future's. 构建未来的求解器。在引导程序中构建 SolverFactory。
  • 可以选择允许更多/更少的时间取决于用户饱和度。terminateEarly()在这方面可以提供帮助。
  • 在集群的节点上进行负载均衡。每个集群有 1 个ExecutorService
  • 工作偷窃?
  • 高可用性
  • 故障转移
  • ...

我们将在未来建立高水平的支持。请在此 jira 问题中添加您的要求

于 2014-06-05T09:10:09.003 回答