我知道 optaplanner 可以很好地缩放问题大小。但是它如何扩展问题请求的数量呢?目前,我们已将 optaplanner 公开为 REST 服务。它每天可以收到数百个调度请求。10 秒后停止搜索。这意味着在某些高峰时,队列中有多个调度请求。我们可以做些什么来并行处理多台机器上的请求?
问问题
994 次
1 回答
3
对多租户设置(在集群上)的所有低级支持都可用:
SolverFactory
是线程安全的,每个节点 1 个Solver
每个节点每个线程1个。因为一个单一的Solver
猪Thread
(它不做任何 IO,不像 web 请求等),我建议不要运行比线程更多的求解器。Solver.terminateEarly()
Solvers
是线程安全的,如果节点正在退出,则可以在所有节点上调用。
但是,目前还没有对多租户设置的高级支持。所以你需要自己构建它:
- 将要处理的请求排队,以防进入的请求多于可用的线程。
ExecutorService
具有 CPU 内核数量大小的JDK应该足以满足此要求。只需将请求提交为Future
's. 构建未来的求解器。在引导程序中构建 SolverFactory。 - 可以选择允许更多/更少的时间取决于用户饱和度。
terminateEarly()
在这方面可以提供帮助。 - 在集群的节点上进行负载均衡。每个集群有 1 个
ExecutorService
。 - 工作偷窃?
- 高可用性
- 故障转移
- ...
我们将在未来建立高水平的支持。请在此 jira 问题中添加您的要求。
于 2014-06-05T09:10:09.003 回答