Zstd

通过在 Envoy 中启用压缩,你可以节省一些网络带宽,但会增加处理器使用率。

Envoy 支持对请求和响应进行压缩和解压缩。

此沙箱提供了一个示例,演示了通过 HTTPS 提供的响应压缩。

沙箱涵盖了两种情况

  • 压缩来自上游服务器的文件

  • 压缩 Envoy 自身的统计信息

步骤 1:启动所有容器

更改到 examples/zstd 目录并启动 docker 组成。

$ pwd
envoy/examples/zstd
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name                 Command                        State   Ports
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
zstd_envoy-stats_1   /docker-entrypoint.sh /usr ... Up      0.0.0.0:10000->10000/tcp,:::10000->10000/tcp, 0.0.0.0:9901->9901/tcp,:::9901->9901/tcp, 0.0.0.0:9902->9902/tcp,:::9902->9902/tcp
zstd_service_1       python3 /code/service.py       Up

步骤 2:测试 Envoy 对上游文件的压缩

沙箱在端口 10000 上配置了两个端点,用于提供上游文件

  • /file.txt

  • /file.json

只有 /file.json 被配置为压缩。

使用 curl 检查请求 file.json 的响应是否包含 content-encoding: zstd 标头。

你需要添加 accept-encoding: zstd 请求标头。

$ curl -ski -H "Accept-Encoding: zstd" https://127.0.0.1:10000/file.json | grep "content-encoding"
content-encoding: zstd

由于只有内容类型为 application/json 的文件被配置为压缩,因此请求 file.txt 的响应不应包含 content-encoding: zstd 标头,并且文件不会被压缩

$ curl -ski -H "Accept-Encoding: zstd" https://127.0.0.1:10000/file.txt | grep "content-encoding"

步骤 3:测试 Envoy 统计信息的压缩

沙箱配置了两个端口,用于提供 Envoy 的管理和统计信息接口

  • 9901 公开了没有 tls 的标准管理接口

  • 9902 公开了具有 tls 的压缩版管理接口

使用 curl 对端口 9901 上的未压缩统计信息发出请求,它不应在响应中包含 content-encoding 标头

$ curl -ski -H "Accept-Encoding: zstd" https://127.0.0.1:9901/stats/prometheus | grep "content-encoding"

现在,使用 curl 对压缩统计信息发出请求

$ curl -ski -H "Accept-Encoding: zstd" https://127.0.0.1:9902/stats/prometheus | grep "content-encoding"
content-encoding: zstd

另请参见

Zstd API

Envoy 的 zstd 压缩的 API 和配置参考。

压缩配置

Envoy 压缩过滤器的参考文档。

Envoy 管理员快速入门指南

Envoy 管理员界面的快速入门指南。