快速且可扩展的IO直通

时间:2015-05-31 16:13:57

标签: java amazon-s3 nio nonblocking aws-sdk

原始

我有一个批处理作业,它将从各种URL下载的内容传递到S3存储。我目前正在使用阻止IO,并且由于IO,我的作业已经达到了 IO bound 阻塞的大部分时间。因此,为了加快整个过程,我正在考虑使用非阻塞IO。

不幸的是,我无法找到用于将内容从一组频道传递到另一组频道的实用程序代码。既然我读到写正确的非阻塞代码并不容易,我宁愿使用现有的实用程序/框架而不是自己编写代码。

TransferManager似乎是使用AWS SDK时提高吞吐量的唯一可能选项,但它仅提供流的使用,并且似乎在后台使用IO线程。显然,没有开箱即用的选项可以将无阻塞上传到S3。

你会推荐什么?现在我只能想象以下解决方案。

  1. 继续阻止IO并使用我自己的IO线程池
  2. 使用非阻塞IO将文件下载到本地文件系统,然后使用TransferManager上传
  3. 使用非阻塞IO进行传递
  4. 选项1显然不会扩展,2可能会工作一段时间,但我真的想保持我的IO在EBS上低,所以我宁愿使用3。

    为了成功实施选项3,我想我必须自己实施很多,所以我的最后一个问题是,你认为它是否值得,如果是的话,我可以使用哪些工具来完成这项工作。

    编辑1

    通过IO界定澄清我实际上意味着工作主要是等待IO。在这里你可以看到我的带宽并没有真正饱和,但如果可能的话,我希望它能够存在。 Monitoring view

1 个答案:

答案 0 :(得分:0)

如果您的工作是I / O绑定,那么您已经完成了。你受网络速度的束缚,而不是你的代码。使用NIO不会让它更快。

  

澄清通过IO绑定我实际上意味着工作主要是等待IO。

是的,这就是'I / O界限'的含义。没有任何改变。

  

在这里你可以看到我的带宽并没有真正饱和,但如果可能的话,我希望它是这样。

您可以尝试使用更大的缓冲区,但正如我所说,在您看来,您已经完成了。