0

我部署了GCP HTTP触发的云功能,该功能通过密钥从GCP数据存储查询实体。这里是代码:使用带GCP云功能的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数据存储的预期性能。

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

我的设置有什么问题?我期待〜50ms的简单查询,而不是〜1100ms。

+0

我不确定您的设置存在问题,但我可以确认您应该能够在“您的项目ID”下的Google App Engine信息中心的右上角看到位置信息。 appspot.com“,请你再检查一次吗? –

回答

2

this问题中,您可以找到Google堆栈跟踪的附加屏幕截图,并查看Datastore和GCP的最佳时间大约为100 ms。

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

经过3个月的开发,我们转移到App Engine,发现Datastore在这种环境下行为速度更快,每个数据存储请求的平均时间大约为20-30毫秒(4-5倍的时间更快)。

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

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

+0

非常有帮助。谢谢。因为Lambda和Dynamo DB没有这个问题,所以我选择使用AWS来执行此任务。 – lpil