如何解决不稳定且缓慢的Google云端存储响应时间问题?

时间:2017-06-15 13:49:43

标签: c# asp.net-core google-cloud-platform google-cloud-storage

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

我的应用程序是在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中运行我的应用程序,这真的很糟糕。我不认为没有预热的桶可能是一个问题,因为我主要是下载相同的少量文件,而且我每分钟至少要做几次请求。 / p>

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

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

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

here

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

我想知道的是我们是否做错了什么,或者云存储是否会出现这种情况,我们必须做好准备,以便能够处理这些缓慢的响应。< / p>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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