【问题标题】:Is there an async I/O based Aws java client?是否有基于异步 I/O 的 Aws java 客户端?
【发布时间】:2012-02-12 18:42:39
【问题描述】:

1) 有没有使用异步 I/O 而不是线程池的 aws sdk 的实现?我正在开发一个高度可扩展的 Web 服务,并且分析表明 CPU 正在浪费大量周期来管理进出亚马逊的网络 I/O。

2)当前客户端使用Apache Http Client,如果我找不到异步实现,我将分叉我自己的版本来实现它。我正在考虑使用Jetty Http Client。混合使用 Jetty 和 Apache 库是不是很糟糕?有更好的选择吗?

【问题讨论】:

  • “CPU 瓶颈是与亚马逊的所有连接” 不,这是(网络)I/O 瓶颈。 CPU 瓶颈根据定义在 CPU 中。
  • 你说得对,网络是瓶颈,但我不想在网络 I/O 上浪费 CPU 时间和线程。 hprof 报告显示大多数 cpu 样本发生在轮询套接字时。
  • 不同之处在于您希望获得什么。异步 I/O 无法让您免于服务延迟:它不会让 AWS 对您的请求的处理神奇地更快。但是,它可能让您在等待时进行更有意义的本地计算。就此而言,线程池也是如此。
  • 如果您有后端瓶颈,如何实现高度可扩展性?
  • @phs “不过,它可能会让您进行更有意义的本地计算”,而且我们正在向 AW 发送数千个请求,这意味着打开的请求往往会堆积起来。为打开的请求阻塞线程似乎比使用 NIO 效率低。

标签: java amazon-web-services jetty


【解决方案1】:

1) 是否有使用异步的 aws sdk 实现 I/O 而不是线程池?

据我所知,如果它已经存在的话,我会很惊讶很难找到它。

2) 当前客户端使用 Apache Http Client,如果我找不到 异步实现我将分叉我自己的版本来实现它。 [...] 有没有更好的 替代品?

确实有一个更好的选择——AWS SDK for Java 当前使用来自Apache HttpComponents 的Http Client 4.x 版(您链接到旧版3.1 版JavaDocs),它还方便地提供了Async HttpClient:

Async HttpClient 是一个符合 HTTP/1.1 的 HTTP 代理实现 基于 HttpCore NIO 和 HttpClient 组件。它是一种互补 Apache HttpClient 模块用于特殊情况 处理大量并发连接更重要 在原始数据吞吐量方面优于性能。 [强调我的]

正如所强调的,它应该只针对各自的用例提供便利,但是(根据your comment)您向 AW 发送了数千个请求,这意味着打开的请求往往会堆积,所以这可能确实有帮助。

【讨论】:

  • 终于有人回答了这个问题。谢谢
【解决方案2】:

异步 ​​IO 不是灵丹妙药 - 每个连接的线程通常更快(吞吐量方面)并且更容易编码:

http://www.mailinator.com/tymaPaulMultithreaded.pdf

在我看来,您的限制因素是亚马逊的 IO,而不是所有这些连接的 CPU 处理。您看到大量 CPU 时间花在轮询套接字上的事实可能只是一个分析工件,因为这些调用会阻塞。 (需要检查的东西:您实际上是在最大限度地使用 CPU 吗?)

【讨论】:

    【解决方案3】:

    新的 AWS SDK for Java 2.0 预览版于 2017 年 6 月为 announced,并提供此功能。

    SDK 现在支持真正的非阻塞 I/O。 SDK 的 1.11.x 版本已经具有服务客户端的异步变体。但是,它们只是线程池和阻塞同步客户端的包装器,因此它们没有提供非阻塞 I/O 的好处(高并发,线程很少)。由于每个连接线程模型的限制和资源使用不佳,许多客户要求支持非阻塞 I/O,因此我们很高兴地宣布在我们的异步客户端中对非阻塞 I/O 提供一流的支持。在底层,我们使用构建在 Netty 之上的 HTTP 客户端来进行非阻塞 HTTP 调用。

    有关详细信息,请参阅

    但是,请注意:

    • 目前处于预览阶段(尚不推荐用于生产)
    • 需要 Java 8+

    更新(2019 年 1 月)

    当前版本是2.3.0(很久没有预览了)。

    建议在基于 maven 的项目中使用此 BOM:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>software.amazon.awssdk</groupId>
          <artifactId>bom</artifactId>
          <version>2.3.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    【讨论】:

      猜你喜欢
      • 2013-06-19
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 2016-09-29
      相关资源
      最近更新 更多