我使用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天的统计数据。
所以你可以看到缓慢的请求不会超常发生,但超过半秒的响应时间并不罕见,我们甚至每天都会有超过5秒的请求。
我想知道的是我们是否做错了什么,或者云存储是否会出现这种情况,我们必须做好准备,以便能够处理这些缓慢的响应。< / p>
答案 0 :(得分:2)
我们与GCS有同样的问题。我们得到的唯一答案(来自GCS支持)是使用指数退避。 第一个请求应该是200ms超时,接下来尝试400ms等等。
答案 1 :(得分:0)
我在GCE中看到的一个常见问题是,由于gcloud客户端具有严重的DNS依赖性,因此DNS查询会限制流量突发,而不是实际客户端(存储或其他)。我强烈建议您将etcd或其他DNS缓存添加到容器中。 GCE的任何实际流量都会窒息。