

# CloudWatch 支持协议的常见问题解答
<a name="cloudwatch-protocols-faq"></a>

CloudWatch SDK 现在支持另外两种协议：[AWS JSON 1.0](https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html) 和 [Smithy RPC v2 CBOR](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html)。相较于此前 CloudWatch SDK 及 CLI 所使用的 AWS Query 协议，这两种协议的性能更优。AWSSDK 会自动为每种语言选择性能最优的通信协议。

## 什么是 AWS JSON 协议？其与现有的 CloudWatch API 请求和响应有何不同？
<a name="aws-json-protocol"></a>

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 请求和响应有何不同？
<a name="smithy-rpc-cbor-protocol"></a>

Smithy RPC v2 CBOR（简明二进制对象表示）是 Amazon 自研的高效数据传输协议。该数据格式专为压缩消息体积设计，支持格式无缝演进，无需在系统间进行版本协商。其与 JSON 编码的核心区别在于：JSON 采用人类可读的文本格式（如 "name": "John"），而 CBOR 采用二进制格式（由 0 和 1 组成的序列）。这种二进制方式可生成体积更小的数据包，提升网络传输速度；同时由于计算机可直接处理二进制数据，还能有效减少序列化耗时。
+ CloudWatch RPC v2 CBOR 协议充当 CloudWatch 客户端和服务器之间的中介层。
+ CloudWatch SDK 负责处理 CloudWatch 客户端与服务器之间的序列化（将对象转换为 CBOR 格式）和反序列化（将 CBOR 格式还原为对象）操作。

## 如何开始使用 CloudWatch 的新协议？
<a name="getting-started"></a>

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


**SDK 客户端协议支持**  

| 语言 | 协议 | SDK 版本 | 
| --- | --- | --- | 
| C\$1\$1 | RPC v2 CBOR | [1.11.708](https://github.com/aws/aws-sdk-cpp/releases/tag/1.11.708) | 
| Golang 2.x | RPC v2 CBOR | [1.53.0](https://github.com/aws/aws-sdk-go-v2/releases/tag/service%2Fcloudwatch%2Fv1.53.0) | 
| Java 1.x | RPC v2 CBOR | [1.12.795](https://github.com/aws/aws-sdk-java/releases/tag/1.12.795) | 
| Java 2.x | RPC v2 CBOR | [2.40.6](https://github.com/aws/aws-sdk-java-v2/releases/tag/2.40.6) | 
| JavaScript v3.x | AWS JSON 1.0 | [3.949.0](https://github.com/aws/aws-sdk-js-v3/releases/tag/v3.949.0) | 
| .NET v3 | AWS JSON 1.0 | [3.7.1182.0](https://github.com/aws/aws-sdk-net/releases/tag/3.7.1182.0) | 
| .NET v4 | RPC v2 CBOR | [4.0.150.0](https://github.com/aws/aws-sdk-net/releases/tag/4.0.150.0) | 
| PHP | AWS JSON 1.0 | [3.367.0](https://github.com/aws/aws-sdk-php/releases/tag/3.367.0) | 
| Python-boto3 | AWS JSON 1.0 | [1.42.7](https://github.com/boto/boto3/releases/tag/1.42.7) | 
| Python-botocore | AWS JSON 1.0 | [1.42.7](https://github.com/boto/botocore/releases/tag/1.42.7) | 
| AWS CLI v1 | AWS JSON 1.0 | [1.43.13](https://github.com/aws/aws-cli/releases/tag/1.43.13) | 
| AWS CLI v2 | AWS JSON 1.0 | [2.32.14](https://github.com/aws/aws-cli/releases/tag/2.32.14) | 
| Ruby | AWS JSON 1.0 | [1.126.0](https://github.com/aws/aws-sdk-ruby/commit/3b09588cf49079453ef372cdcd51eaab8d8114a9) | 
| Powershell | AWS JSON 1.0 | [5.0.114](https://github.com/aws/aws-tools-for-powershell/commit/22b7f44d079b84fd245273ea554ae57d07e8a017) | 
| Rust | RPC v2 CBOR | [1.100.0](https://github.com/awslabs/aws-sdk-rust/releases/tag/release-2025-12-10) | 
| Swift | RPC v2 CBOR | [1.6.14](https://github.com/awslabs/aws-sdk-swift/releases/tag/1.6.14) | 
| Kotlin | RPC v2 CBOR | [1.5.100](https://github.com/aws/aws-sdk-kotlin/releases/tag/v1.5.100) | 

## 为 CloudWatch 工作负载启用这些新协议有哪些风险？
<a name="risks"></a>

迁移到这些新版 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，该怎么办？
<a name="compatibility-issues"></a>

必须将 SDK 版本更改为先前版本。请参阅[如何开始使用 CloudWatch 的新协议？](#getting-started)小节，选择低于所列版本的版本。如果将 AWS SDK 更改为先前版本，CloudWatch API 会使用 AWS Query 协议。

## CloudWatch API 中使用的 AWS JSON 和 CBOR 协议支持哪些区域？
<a name="region-support"></a>

CloudWatch 在所有提供 CloudWatch 的 [AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande.html#cw_region)都支持 AWS JSON 和 CBOR 协议。

## 升级至指定 AWS SDK 版本并使用新协议后，CloudWatch 的延迟性能预计可提升多少？
<a name="performance-improvements"></a>

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

## AWS Query 协议会被弃用吗？
<a name="protocol-deprecation"></a>

我们会继续支持 AWS Query 协议。只要将 AWS SDK 版本设置为除[如何开始使用 CloudWatch 的新协议？](#getting-started)中列出的版本之外的任何先前版本，即可继续使用 AWS Query 协议。

## 在哪里可以找到有关 AWS JSON 和 Smithy RPC v2 CBOR 协议的更多信息？
<a name="more-information"></a>

有关 JSON 协议的更多信息，可参阅 Smithy 文档中的 [AWS JSON 1.0](https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html) 协议章节；有关 CBOR 协议的信息，可参阅 Smithy 文档中的 [AWS RPC v2 CBOR](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html) 协议章节。

有关 CloudWatch API 请求的更多信息，请参阅《CloudWatch API Reference》指南中的 [Making API Requests](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/making-api-requests.html)。