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 管理介面的快速入門指南。