【发布时间】:2021-05-30 07:30:42
【问题描述】:
我在 GCS 中有一个使用 gzip 压缩的文件,元数据 Content-Encoding 设置为 gzip。这允许 HTTP 层设置请求标头Accept-Encoding: gzip,并允许符合标准的 HTTP 客户端自动解压缩。
但是,它也允许客户端请求未压缩的文件(即不指定 Accept-Encoding: gzip)。然后在 Google 这边进行解压,浪费带宽。
在这种情况下,虽然我想浪费带宽。流量是 GCP 区域的本地流量,因此带宽实际上是无限的,而且是免费的。我的 CPU 比较短缺,因为我的 VM 是那些低 CPU 可爆发的 VM 之一,所以我想把解压缩的工作交给 Google。
如果我使用gsutil,它似乎很聪明,而且它是通过网络压缩的。
Go API 默认显示相同的行为。
如果我尝试将 WithHTTPClient 设置为可能取消设置某些标头,我看不到任何请求标头,并且它希望我手动添加 GCS 凭据。
我还尝试将ReadCompressed 设置为true 和false,但没有成功。
我设法让它在 Google 端解压缩的唯一方法是创建一个签名 URL,然后使用 curl 下载它。这样 curl 的输出速率与带宽使用相匹配。在所有其他情况下,网络流量是下载输出的 10%,表明它在传输过程中被压缩。
我如何在 Go API 中说我希望数据未压缩?
我想看到的是 slurm -i eth0 显示的速度与我的 ./gcscat gs://.... | pv > /dev/null 相同,就像我在签名 URL 上使用 curl -s ... | pv > /dev/null 时看到的一样。
【问题讨论】:
标签: go google-cloud-platform google-cloud-storage compression