【发布时间】:2021-11-10 14:38:49
【问题描述】:
我有云运行服务托管 GO OSB 应用程序实现 gRpc,但通过使用云 sql (mysql) 作为数据库的 grpc-gateway 公开 http REST api。除了 PATCH 之外,所有 CRUD API 的响应都很好。
它使用 http 响应代码 503 引发以下错误:
{
"textPayload": "The request failed because either the HTTP response was malformed or connection to the instance had an error.",
"insertId": "6141e984000c63529e7b7afd",
"httpRequest": {
"requestMethod": "PATCH",
"requestUrl": "https://********-********-mr336-qv7hk7cx3a-uc.a.run.app/v2/service_instances/237e80fd-b22e-4df0-b9ed-23c91a4d7f51",
"requestSize": "1102",
"status": 503,
"responseSize": "976",
"userAgent": "PostmanRuntime/7.28.4",
"remoteIp": "********",
"serverIp": "********",
"latency": "0.410343680s",
"protocol": "HTTP/1.1"
},
"resource": {
"type": "cloud_run_revision",
"labels": {
"location": "us-central1",
"revision_name": "********-********-mr336-00001-hop",
"project_id": "********-********-l-app-us-01",
"configuration_name": "********-********-mr336",
"service_name": "********-********-mr336"
}
},
"timestamp": "2021-09-15T12:39:32.811858Z",
"severity": "ERROR",
"labels": {
"instanceId": "00bf4bf02dff6d5f53cff1f1828cafbca265606a996eddff5cb44e3fff674efb77ca51eca7087fb8b8e7acba227b2a3e3e913bdfcc0a487640a2e028"
},
"logName": "projects/********/logs/run.googleapis.com%2Frequests",
"trace": "projects/********/traces/e29e5add9452d171e9eebd26817bb667",
"receiveTimestamp": "2021-09-15T12:39:32.817171397Z"
}
注意事项:
在每次补丁请求后,我都可以看到实例启动日志,即在上述日志之后,每次我可以看到容器入口点(服务器)启动日志(如冷启动)。
服务器启动完成后,它会再次在日志中抛出上述相同的错误。
需要注意的重要一点是,我的应用程序中也看不到任何日志,这表明 PATCH api 请求没有到达在云运行服务后面运行的容器实例。
冷启动后我的活动实例也达到理想状态,然后在 1 分钟内缩小到 0。在最后一次请求命中之后,但它似乎不会为其他 API 带来问题。这就是它应该如何工作但找不到任何关于 PATCH 问题的线索。
【问题讨论】:
-
@Caner 我对此进行了调查,但在我的情况下,请求甚至没有到达容器实例,之后发生了数据库事务。所以,我认为这超出了这里的范围。虽然我已经使用应用程序容器和 mysql 容器在本地设置上对其进行了测试,但它工作正常。
-
@ak89224 能否请您与我们分享您的 dockerfile。我看到请求甚至在容器完全运行之前就已经到达。此外,您的实例也在不断缩减到 0。
-
@RajeevTirumalasetty 我解决了这个问题。我会提供答案。虽然在 dockerfile 我使用入口点来启动服务器。
标签: go google-cloud-platform google-cloud-run http-patch