对数据存储和云任务的初始请求具有更高的延迟,这正常吗?

Initial requests to datastore and cloud tasks have higher latency, is that normal?

我的应用引擎服务是用 Go 编写的。在服务器侦听端口之前,我有连接到 Cloud Datastore 的代码。有一个 Projection 查询只需要大约 500 毫秒读取 4 个实体。由于需要建立连接,与数据存储的第一次交互是否可能具有更高的延迟?有什么办法可以减少这个数据存储连接延迟?此外,在监听端口之前执行此数据库调用与在预热请求中执行此操作有什么区别(这是一个自动缩放的实例)。

与 Cloud Datastore 的高初始延迟类似,我发现 Cloud Tasks 也有类似的模式。初始任务创建可能长达 500 毫秒,但即使是后续任务也可能在 200 到 400 毫秒之间。这是在美国中部。我实际上正在考虑将数据库更新移动到后台任务,但总的来说,我发现任务创建的延迟或多或少与执行事务以读取和更新数据没有任何净收益相同。

最后,实例启动时间通常为 2.5 到 3 秒,主程序在大约 2 秒后被调用。我的应用程序启动时间是上面提到的 500ms 的项目查询成本,没有别的。因此,无论我如何优化我的应用程序启动,我是否应该假设额外延迟大约 2 秒?

请注意,系统负载很轻,所以这些问题不可能是因为高容量。

更新:Miguel 要求的部署文件(这是用于调查性能特征的测试环境。Prod 部署对于实例来说会更慷慨)

默认应用:

service: default
runtime: go112
instance_class: F1
automatic_scaling:
  min_instances: 0
  max_instances: 1
  min_idle_instances: 1
  max_idle_instances: 1
  min_pending_latency: 200ms
  max_pending_latency: 500ms
  max_concurrent_requests: 10
  target_cpu_utilization: 0.9
  target_throughput_utilization: 0.9
inbound_services:
- warmup

后端应用程序:

service: backend-services
runtime: go112
instance_class: B1
basic_scaling:
  idle_timeout: 1m
  max_instances: 1

200-500 毫秒来初始化客户端似乎是合理的,因为正在建立远程连接。此外,App Engine 的 1-2 秒冷启动似乎也很正常。

如您所述,您可以试验预热请求以减少冷启动和初始化客户端。

我还建议您查看 运行 您的数据存储在(本机与数据存储)中的模式。使用数据存储模式时延迟会增加,有关详细信息,请参阅 Cloud Datastore Best Practices