【发布时间】:2017-11-18 01:16:22
【问题描述】:
我正在使用谷歌云存储来存储和检索一些文件,我的问题是我得到的响应时间不一致,有时很慢。
我的应用程序是在 Google Container Engine 中运行的 ASP.NET Core 应用程序。容器引擎集群位于europe-west1-c。 Cloud Storage 存储分区是多区域的,位于位置 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 天的统计数据。
因此您可以看到,缓慢的请求并不经常发生,但超过半秒的响应时间并不少见,我们甚至每天都有少数超过 5 秒的请求。
我想弄清楚我们是否做错了什么,或者这是 Cloud Storage 所预期的,我们必须做好准备,以应对这些缓慢的响应。
【问题讨论】:
-
您的应用程序在哪里运行?在 GCE 上还是在您自己的服务器上?你能用gsutil perfdiag 重现结果吗?
-
我的应用程序正在 GCE 中运行
europe-west1-c。gsutil perfdiag我没试过,我试试看。 -
嗯,我试过
gsutil perfdiag,下载时间在150ms-500ms之间,我没有看到任何超慢的时间。但我不确定这是否具有代表性,因为我是在我的机器上执行此操作的,而我的实际应用程序在 GCE 中运行,所以应该更快(?)。 -
我肯定会在 GCE 上测试它。根据您的本地计算机所在的位置及其连接,结果可能会有很大差异。
-
呃,AFAIK Google 不保证其云系统的延迟。它不是一个实时系统。也不是别人的。它不会像本地连接的 SSD...
标签: c# asp.net-core google-cloud-platform google-cloud-storage