【发布时间】:2018-07-18 06:12:34
【问题描述】:
我们有一个用 Spring Boot (Java 8) 编写并托管在 App Engine 灵活环境中的 REST API。
目前app.yaml 看起来像:
runtime: java
api_version: '1.0'
env: flex
threadsafe: true
manual_scaling:
instances: 1
resources:
cpu: 4
memory_gb: 16
liveness_check:
path: "/healthcheck"
check_interval_sec: 30
timeout_sec: 4
failure_threshold: 2
success_threshold: 2
initial_delay_sec: 300
我们注意到,对某个端点的长时间运行(1-5 分钟)请求通常会返回 499 HTTP 响应代码,这不是我们所期望的。
它看起来像这样:
POST /endpoint -> (工作在应用程序中开始) -> 499 响应被发回 -> (工作仍在应用程序线程中运行) -> 调用者重复请求 -> 我们有 2 个相同的请求正在运行 -> 重复
为避免这种情况,我们已将端点工作移至后台 ThreadPoolTaskExecutor,并且该端点不再引起任何问题。
但出现了其他问题 - 其他端点 /second 现在得到相同的早期 499 响应问题,即使它以前从未这样做过(该端点的通常运行时间从缓存的 1 秒到不缓存的 3 分钟)
这让我相信 App Engine 调度程序/负载平衡器以某种方式决定请求在中止之前需要多长时间。我们是否缺少某种超时配置?任何人都可以确定问题可能出在哪里(tomcat、gce、spring...)?
【问题讨论】:
标签: google-app-engine app-engine-flexible