【问题标题】:Slow query time when using GCP Datastore with GCP Cloud Functions将 GCP Datastore 与 GCP Cloud Functions 一起使用时查询时间变慢
【发布时间】:2017-10-16 21:22:10
【问题描述】:

我部署了一个 GCP HTTP 触发的云函数,它通过键从 GCP 数据存储中查询一个实体。代码如下:

const datastore = require('@google-cloud/datastore');

exports.helloWorld = function helloWorld(req, res) {
  const client = datastore();
  const key = client.key(['Person', 'harry']);

  client.get(key, function(err, entity) {
    res.status(200).send(JSON.stringify(entity));
  });
};

根据日志,此函数在调用时需要约 1.6 秒才能完成。重复调用并没有更快。

删除查询并响应 HTTP 请求大约需要 0.5 秒才能完成,因此查询似乎需要大约 1.1 秒才能完成。对我来说,这速度慢得无法使用,而且这似乎不太可能是 GCP Datastore 的预期性能。

我认为数据库和函数可能在不同的区域运行,但我无法检查,文档中给出的说明不正确(https://cloud.google.com/datastore/docs/locations#location-r)。该地区没有显示在我的页面上。

我的设置可能有什么问题?我预计简单查询约为 50 毫秒,而不是 1100 毫秒。

【问题讨论】:

  • 我不确定您在此处设置的问题,但我可以确认您应该能够在 Google App Engine 信息中心右上角的“您的-project-id.appspot.com”,你能再检查一下吗?

标签: google-cloud-datastore google-cloud-platform google-cloud-functions


【解决方案1】:

this 问题中,您可以找到随附的 Google 堆栈跟踪屏幕截图,并看到使用 Datastore 和 GCP 的最佳时间约为 100 毫秒。

老实说,我们在使用 Datastore 的 GCF 上工作了 3 个多月,这一次通常价值超过 100 毫秒,每次调用大约 200 - 400 毫秒。我与 GCP 支持人员进行了交谈,并且可以确认,目前他们在这方面遇到了麻烦,仅在 GCF 和 Datastore 之间进行请求路由和优化。我通过 Yandex-Tank 收集了几个性能测试数据集,平均请求延迟约为 800 毫秒到 7 秒(大约 4-5 个 Datastore 串行请求)。

经过 3 个月的开发,我们迁移到 App Engine,发现 Datastore 在这种环境中的运行速度要快得多,每个 Datastore 请求的平均时间约为 20-30 毫秒(快 4-5 倍)。

我还注意到,Datastore 查找时间几乎不取决于它运行的数据量。是 1 条记录还是 1000 条记录,时间几乎相同 20-30 毫秒。我相信这一次如果我们可以在没有任何网络通信额外内容的情况下查看数据存储本身会更好。

现在我们正在添加 redis 作为缓存服务来加速所有请求。我想它也可能适用于 GCF 和 Datastore,但我不认为这是一个有保证的解决方案。 因此,请考虑使用 GCF 作为实用程序处理单元,而不是主要处理端点。

【讨论】:

  • 非常有帮助。谢谢你。我选择使用 AWS 来完成这项任务,因为 Lambda 和 Dynamo DB 没有这个问题。
  • 截至 2019 年 7 月,我在云函数中收到了一个简单的查询,大约需要一分钟。当我将工作流转移到 kubernetes 集群时,它会回到我预期的几百毫秒。谈不上用!
猜你喜欢
  • 2018-04-24
  • 2019-10-17
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多