CloudWatch 支持协议的常见问题解答 - Amazon CloudWatch

CloudWatch 支持协议的常见问题解答

CloudWatch SDK 现在支持另外两种协议:AWS JSON 1.1Smithy RPC v2 CBOR。相较于此前 CloudWatch SDK 及 CLI 所使用的 AWS Query 协议,这两种协议的性能更优。AWSSDK 会自动为每种语言选择性能最优的通信协议。

什么是 AWS JSON 协议?其与现有的 CloudWatch API 请求和响应有何不同?

JSON 是目前异构系统间进行通信时,应用程序最广泛且接受度最高的数据格式之一。CloudWatch 使用 JSON 作为媒介在 AWS SDK 客户端(例如:Java、Python、Golang、JavaScript)与 CloudWatch 服务器之间进行通信。CloudWatch API 操作的 HTTP 请求接受 JSON 形式的输入。系统会执行 CloudWatch 操作,然后将执行的响应以 JSON 形式反过来共享给 SDK 客户端。与 AWS Query 相比,JSON 在客户端和服务器之间的数据传输方面效率更高。

  • CloudWatch AWS JSON 协议充当 CloudWatch 客户端和服务器之间的中介层。

  • CloudWatch AWS SDK 在 CloudWatch 客户端与服务器之间使用序列化(将对象转换为 JSON 格式)和反序列化(将 JSON 格式转换为对象)。

什么是 Smithy RPC v2 CBOR 协议?其与现有的 CloudWatch API 请求和响应有何不同?

Smithy RPC v2 CBOR(简明二进制对象表示)是 Amazon 自研的高效数据传输协议。该数据格式专为压缩消息体积设计,支持格式无缝演进,无需在系统间进行版本协商。其与 JSON 编码的核心区别在于:JSON 采用人类可读的文本格式(如 "name": "John"),而 CBOR 采用二进制格式(由 0 和 1 组成的序列)。这种二进制方式可生成体积更小的数据包,提升网络传输速度;同时由于计算机可直接处理二进制数据,还能有效减少序列化耗时。

  • CloudWatch RPC v2 CBOR 协议充当 CloudWatch 客户端和服务器之间的中介层。

  • CloudWatch SDK 负责处理 CloudWatch 客户端与服务器之间的序列化(将对象转换为 CBOR 格式)和反序列化(将 CBOR 格式还原为对象)操作。

如何开始使用 CloudWatch 的新协议?

若要快速使用,请使用最新版本 AWS SDK/CLI 调用 CloudWatch 支持的最新协议。将 AWS SDK 升级到指定版本或其后续任一版本。

SDK 客户端协议支持
语言 协议 SDK 版本
C++ RPC v2 CBOR 1.11.708
Golang 2.x RPC v2 CBOR 1.53.0
Java 1.x AWS JSON 1.1 1.12.795
Java 2.x RPC v2 CBOR 2.40.6
JavaScript v3.x AWS JSON 1.1 3.949.0
.NET v3 AWS JSON 1.1 3.7.1182.0
.NET v4 RPC v2 CBOR 4.0.150.0
PHP AWS JSON 1.1 3.367.0
Python-boto3 AWS JSON 1.1 1.42.7
Python-botocore AWS JSON 1.1 1.42.7
AWS CLI v1 AWS JSON 1.1 1.43.13
AWS CLI v2 AWS JSON 1.1 2.32.14
Ruby AWS JSON 1.1 1.126.0
Powershell AWS JSON 1.1 5.0.114
Rust RPC v2 CBOR 1.100.0
Swift RPC v2 CBOR 1.6.14
Kotlin RPC v2 CBOR 1.5.100

为 CloudWatch 工作负载启用这些新协议有哪些风险?

迁移到这些新版 SDK 的过程,预计将实现完全透明、无额外操作成本的无缝过渡。在协议之间存在一项已知的行为差异,该差异涉及列表内 null 值的处理方式:对于可能包含 null 值的列表输入,CloudWatch API 在 AWS JSON 协议和 Smithy RPC v2 CBOR 协议中的处理方式,与之前的 AWS Query 协议有所不同 – 在 AWS Query 协议中,列表内的空值会被自动移除;在 JSON/CBOR 协议中,空值则会随 API 调用完整传递。

此外,如果使用 AWS SDK 的自定义实现或自定义客户端和 AWS SDK 的组合,与生成基于 AWS Query(也就是基于 XML)的响应的 CloudWatch 进行交互,则可能与 AWS JSON 或 CBOR 协议不兼容。如果遇到任何问题,请与 AWS Support 联系。

如果已经使用最新版 AWS SDK,但开源解决方案不支持 JSON 或 CBOR,该怎么办?

必须将 SDK 版本更改为先前版本。请参阅如何开始使用 CloudWatch 的新协议?小节,选择低于所列版本的版本。如果将 AWS SDK 更改为先前版本,CloudWatch API 会使用 AWS Query 协议。

CloudWatch API 中使用的 AWS JSON 和 CBOR 协议支持哪些区域?

CloudWatch 在所有提供 CloudWatch 的 AWS 区域都支持 AWS JSON 和 CBOR 协议。

升级至指定 AWS SDK 版本并使用新协议后,CloudWatch 的延迟性能预计可提升多少?

相较于 AWS Query 协议,JSON 和 CBOR 协议可将延迟与 CPU 占用率降低最高 80%。这两种协议的网络带宽利用率最高可提升 20%。

AWS Query 协议会被弃用吗?

我们会继续支持 AWS Query 协议。只要将 AWS SDK 版本设置为除如何开始使用 CloudWatch 的新协议?中列出的版本之外的任何先前版本,即可继续使用 AWS Query 协议。

在哪里可以找到有关 AWS JSON 和 Smithy RPC v2 CBOR 协议的更多信息?

有关 JSON 协议的更多信息,可参阅 Smithy 文档中的 AWS JSON 1.1 协议章节;有关 CBOR 协议的信息,可参阅 Smithy 文档中的 AWS RPC v2 CBOR 协议章节。

有关 CloudWatch API 请求的更多信息,请参阅《CloudWatch API Reference》指南中的 Making API Requests