我有一个批处理作业,预计一次处理大约1k个任务。每项任务平均大约需要12-16分钟。
在当前实现中,所有任务都被推送到阻塞队列中。有一个线程从该队列中弹出一个任务并对其进行处理。对于任务,我们使用java的执行器服务进行并发执行,并且一旦处理完所有子任务,我们就将此任务标记为完成,并从队列中读取另一个任务。我们无法优化任务处理时间,因为它调用本机库并且不知道它在内部的作用。
通过当前的实施,我们能够在超过24小时内处理大约300个任务。
我正在寻找可以帮助减少处理时间的适当平台或框架。
我使用Java 1.7,OSGI和Apache Karaf作为容器
PS:这里的任务是分解从500 MB到4 GB到小块的某些图像并将其存储为jpeg格式
答案 0 :(得分:3)
对于水平扩展,我会使用消息传递系统。只需将所有任务放入JMS队列即可。然后在一组机器上启动karaf,让每个人都在队列中监听。然后,JMS将自动循环处理进程。因此负载将被分配。