【问题标题】:Design approaches for batch processing of parallel tasks并行任务批处理的设计方法
【发布时间】: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


【解决方案1】:

对于水平扩展,我会使用消息系统。只需将所有任务放入 JMS 队列中。然后在一组机器上启动 karaf 并让每台机器都在队列中监听。然后,JMS 将自动为进程循环提供数据。因此负载将被分配。

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2014-09-14
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多