如何修复不一致且缓慢的Google云端存储响应时间?

问题描述 投票:9回答:2

我正在使用谷歌云存储来存储和检索一些文件,我的问题是我得到的响应时间不一致,有时甚至很慢。

我的应用程序是在Google容器引擎中运行的ASP.NET核心应用程序。 Container Engine集群位于europe-west1-c。云存储桶是多区域的,位于EU,它是一个安全的存储桶(不可公开访问)。我正在使用最新版本的官方Google.Cloud.Storage.V1 SDK包来访问云存储。 (我尝试了1.0.0和新的2.0.0-beta01。)我正在使用StorageClient对象的单例实例,它应该在引擎盖下进行连接池。

我正在测量并记录从云存储下载文件所需的时间,这是我所做的测量。

var sw = Stopwatch.CreateNew();

await client.DownloadObjectAsync(googleCloudOptions.StorageBucketName, filepath, ms);

sw.Stop();

所以我在没有任何自己的应用程序逻辑的情况下直接测量SDK调用。

我在这个测量中获得的数字在平均时间内看起来像这样。

44ms
56ms
501ms
274ms
90ms
237ms
145ms
979ms
446ms
148ms

您可以看到方差已经非常大(并且响应时间通常非常缓慢)。

但偶尔我会得到这样的响应时间(我见过的最慢的时间超过10秒)。

172ms
4,348ms
72ms
51ms
179ms
2,508ms
2,592ms
100ms

考虑到我正在下载的文件大小约为2 KB,而我的应用程序每秒执行的请求少于1个,并且我在Google Cloud中运行我的应用程序,这真的很糟糕。我不认为没有预热的桶可能是一个问题,因为我主要是下载相同的少量文件,而且我每分钟至少要做几次请求。

有谁知道这种缓慢的原因是什么,或者我如何调查出了什么问题?

更新:按照@ jterrace的建议,我在生产环境中运行gsutil perfdiag,并上传了终端输出和生成的json报告here

我还收集了一些测量值,在这里你可以看到过去7天的统计数据。

Diagram showing statistics about Cloud Storage download times.

因此,您可以看到缓慢的请求不会经常发生,但超过半秒的响应时间并不罕见,我们甚至每天都会有超过5秒的请求。

我想弄清楚的是我们是否做错了什么,或者这是云存储的预期,我们必须准备好能够处理这些缓慢的响应。

c# asp.net-core google-cloud-platform google-cloud-storage
2个回答
2
投票

我们与GCS有同样的问题。我们得到的唯一答案(来自GCS支持)是使用指数退避。第一个请求应该是200ms超时,接下来尝试400ms等等。


0
投票

我在GCE中看到的一个常见问题是,由于gcloud客户端具有严重的DNS依赖性,因此DNS查询会限制流量突发,而不是实际客户端(存储或其他)。我强烈建议您将etcd或其他DNS缓存添加到容器中。 GCE中任何实际的流量都会窒息。

© www.soinside.com 2019 - 2024. All rights reserved.