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