c# - 如何修复不一致且缓慢的 Google Cloud Storage 响应时间?

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

我正在使用 Google Cloud Storage 存储和检索一些文件,我的问题是我得到的响应时间不一致,有时非常慢。

我的应用程序是在 Google 容器引擎中运行的 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 天的统计数据。

Diagram showing statistics about Cloud Storage download times.

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

我想弄清楚的是我们是否做错了什么,或者这是 Cloud Storage 的预期结果,我们必须做好准备,以便能够在我们这边处理这些缓慢的响应。

最佳答案

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

关于c# - 如何修复不一致且缓慢的 Google Cloud Storage 响应时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44569289/

相关文章:

c# - 我可以查明字符串到 ANSI 的转换是否会导致数据丢失吗?

docker - 带有.NetCore的Docker,我应将SDK或运行时镜像用于微服务吗?

Startup.Configure 中的 ASP.NET Core 依赖注入(inject)

c# - asp.net core (3+) CreateScope() 上的共享上下文

http - Google Cloud Storage 签名 URL——如何指定最大文件大小?

c# - 连接调试器 - 当前不会命中断点。该文档尚未加载任何符号

c# - ADO.Net DataTables 有索引吗?

c# - 跳转到 WPF 数据网格中的行

python-3.x - 对位于 Google Cloud Storage 上的 PDF 文件使用 textract

android - App Engine 中运行的是哪种类型的服务器?