并行任务批处理的设计方法

Design approaches for batch processing of parallel tasks

我有一个批处理作业,预计一次处理大约 1k 个任务。每个任务平均大约需要 12 - 16 分钟。

在当前的实现中,所有任务都被推入阻塞队列。有一个线程从这个队列中弹出一个任务并处理它。对于任务,我们使用 java 的执行器服务进行并发执行,一旦处理完所有子任务,我们就将此任务标记为完成,然后从队列中读取另一个任务。我们无法优化任务处理时间,因为它会调用本机库并且不知道它在内部做了什么。

通过当前的实施,我们能够在超过 24 小时内处理大约 300 个任务。

我正在寻找可以帮助缩短处理时间的合适平台或框架。

我正在使用 Java 1.7、OSGI 和 Apache Karaf 作为容器

PS : 这里的任务是将 500 MB - 4 GB 的某些图像分解成小块并将其存储为 jpeg 格式

对于水平缩放,我会使用消息传递系统。只需将所有任务放入 JMS 队列即可。然后在一个集群的机器上启动karaf,让每台机器监听队列。然后 JMS 将自动提供进程循环。所以负载将被分配。