【发布时间】:2016-10-26 21:58:15
【问题描述】:
我有一个批处理作业,预计一次处理大约 1k 个任务。每项任务平均大约需要 12 - 16 分钟。
在当前实现中,所有任务都被推入阻塞队列。有一个线程从这个队列中弹出一个任务并处理它。对于任务,我们使用 java 的 executor 服务进行并发执行,一旦它的所有子任务都处理完毕,我们将此任务标记为完成,然后从队列中读取另一个任务。我们无法优化任务处理时间,因为它调用原生库并且不知道它在内部做什么。
通过目前的实施,我们能够在 24 小时内处理大约 300 个任务。
我正在寻找可以帮助减少处理时间的合适平台或框架。
我使用 Java 1.7、OSGI 和 Apache Karaf 作为容器
PS:这里的任务是将某些从 500 MB 到 4 GB 的图像分解成小块并将其存储为 jpeg 格式
【问题讨论】:
-
你在某个时候有 100% 的 cpu 负载或 hdd 负载吗?
-
是的,CPU 和网络(因为我们是从网络处理)都显示 100% 的利用率
-
整整 24 小时?如果是,那么我会假设本机库只需要这么长的时间。
-
我会说投入更多资源或更换库
-
是的,我们正在研究如何扩展处理。这就是为什么我们正在寻找任何用于水平缩放(而不是垂直缩放)的开源平台!我们有什么好的平台来实现自动化吗?
标签: java multithreading osgi batch-processing apache-karaf