宣布适用于 Java 的 亚马逊云科技 开发工具包 2.x 中的 亚马逊云科技 CRT HTTP 客户端上线

作者: Zoe Wang | 202

我们很高兴地宣布,适用于 Java 的 亚马逊云科技 开发工具包 2. x 中的 亚马逊云科技 通用运行时 (CRT) HTTP 客户端已 正式上线 (GA)。在软件开发工具包的 2.20.0 版本中, 亚马逊云科技 CRT HTTP 客户端 现在 可以在生产环境中使用。

亚马逊云科技 CRT HTTP 客户端是一个异步、非阻塞 HTTP 客户端,亚马逊云科技 服务客户端可以使用它来调用 亚马逊云科技 API。你可以用它来代替 sdka SynchttpClient 接口 的默认 Netty 实现 它提供了更快的 SDK 启动时间和更小的内存占用,这对 亚马逊云科技 Lambda 尤其重要,还具有更低的 P90 延迟和增强的连接管理。

更快的启动时间和更小的内存占用

亚马逊云科技 CRT HTTP 客户端建立在 A WS CRT 的 Java 绑定之上 ,以 C 语言编写。它的启动时间比软件开发工具包支持的其他 HTTP 客户端更快。

我们观察到,从 Netty 异步 HTTP 客户端切换到 亚马逊云科技 CRT HTTP 客户端时,Lambda 的启动延迟提高了多达 76%,内存使用量减少了多达 14%。请注意,结果可能会因应用程序配置(例如 Lambda 函数内存设置)而异。 以下图表显示了我们的测试得出的 Netty 异步 HTTP 客户端(nettyni oAsynchttpClient)和 亚马逊云科技 CRT HTTP 客户端(awscrtasynchttp Client )之间的 Lambda 冷启动时长和最大内存使用量。 在我们的测试代码中,我们使用了 DynamoBD 异步软件开发工具包客户端来发送 ListTables 请求。

AWS Lambda Cold Start Duration Comparison

AWS Lambda Max Memory Usage Comparison

降低 P90 请求延迟

除了冷启动方面的改善外,在将 亚马逊云科技 CRT HTTP 客户端与 Netty 异步 HTTP 客户端进行比较时,我们还观察到 P90 延迟提高了多达 9%。

下图比较了 亚马逊云科技 CRT HTTP 客户端和 Netty 异步 HTTP 客户端之间的 P90 延迟。测试应用程序使用 S3AsyncClient 发送了一个 getObject 请求来下载一个小的 S3 对象。

P90 Latency Comparison

增强的连接管理

亚马逊云科技 CRT HTTP 客户端具有连接运行状况选项,可确保 “不正常” 的连接不会被重复使用。根据您的用例,您可以简单地设置吞吐量阈值来确定连接是否正常。如果连接在配置的时间段内低于设定的阈值,亚马逊云科技 CRT HTTP 客户端会将该连接视为运行状况不佳并在处理中的请求完成后将其关闭。如果您的应用程序访问的网络路径导致吞吐量大大降低,则此选项将通过关闭慢速连接并为新请求建立新的连接来帮助应用程序恢复。

此外,亚马逊云科技 CRT HTTP 客户端还提供增强的 DNS 负载平衡支持。它有一个异步 DNS 解析器,可以定期轮询每个请求的 DNS 地址,并平衡多个端点之间的流量,这允许在极少数情况下出现缓慢的端点或服务器中断时自动进行故障转移。

入门

要使用 亚马逊云科技 CRT HTTP 客户端,请先将 aws-crt-client 依赖项添加到您的 pom.xml 中。在 Maven 中央存储库 中 搜索 aws-crt-client 工件的最新版本。

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>aws-crt-client</artifactId>
    <version>${aws.sdk.version}</version>
</dependency>

然后,将您的应用程序配置为通过以下方式之一使用 亚马逊云科技 CRT HTTP 客户端。

选项 1(首选):通过客户端生成器指定 CRT HTTP 客户端

这是首选选项。它允许您根据用例自定义选项,例如最大并发性。

// Creating an asynchronous S3 client with a CRT HTTP client that is managed by the SDK
S3AsyncClient.builder()
             .httpClientBuilder(AwsCrtAsyncHttpClient.builder()
                                                     .maxConcurrency(100))
             .build();

默认情况下,SDK 包含 netty-nio-client 依赖关系 。如果您选择在应用程序中加入 亚马逊云科技 CRT HTTP 客户端,建议 从应用程序中删除 netty-nio-client 以减小软件包的大小。以下是在类路径中只有 CRT HTTP 客户端的应用程序的示例 POM 文件。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>${aws.java.sdk.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
         <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>netty-nio-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>aws-crt-client</artifactId>
        </dependency>
    </dependencies>

选项 2:在 JVM 启动时使用系统属性配置 HTTP 客户端

以下选项将使用默认配置创建 亚马逊云科技 CRT HTTP 客户端。

# Specify the default asynchronous HTTP client as AwsCrtAsyncHttpClient 
java -Dsoftware.amazon.awssdk.http.async.service.impl=\ 
software.amazon.awssdk.http.crt.AwsCrtSdkHttpService \ 
MyService.jar

选项 3:使用 Java 代码中的系统属性配置 HTTP 客户端。

与选项 2 类似,以下选项将使用默认配置创建 亚马逊云科技 CRT HTTP 客户端。

System.setProperty("software.amazon.awssdk.http.async.service.impl",
                   "software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");

局限性

在此版本中,亚马逊云科技 CRT HTTP 客户端 尚不支持 HTTP/2 协议 。但是,我们计划在将来实施它。 同时,如果你使用需要支持 HTTP/2 的服务 SDK 客户端,例如 K inesisasyncClient 和 TranscrientStreamingAsyncClient,可以考虑改用 nettyAsynchttpClient

结论

在这篇博客文章中,我们向您展示了如何开始使用 亚马逊云科技 CRT HTTP 客户端。要了解有关如何配置客户端的更多信息,请访问我们的 开发者指南 API 参考 。我们希望您对此 HTTP 客户端以及将来希望实现的任何其他功能提供反馈。请打开 GitHub 问题 告诉我们 。

Zoe Wang

Zoe Wang

Zoe 是一名高级软件开发工程师,负责开发适用于 Java 的 亚马逊云科技 开发工具包。她热衷于开发改善开发者体验的工具。你可以在 GitHub 上找到她 @zoewangg


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。