【问题标题】:PATCH API don't work on Google Cloud Run instancePATCH API 不适用于 Google Cloud Run 实例
【发布时间】: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


【解决方案1】:

现在已修复!

由于在同一端口上处理多个协议,其中一个协议匹配器导致 PATCH API 出现问题,原因是从服务器返回空回复。因此,对匹配器进行了更改,并且成功了。

RCA: Cmux HTTP1Fast Matcher 只匹配 HTTP 请求中的方法。 这个匹配器非常乐观:如果它返回true,并不意味着该请求是一个有效的HTTP响应。 一个正确但速度较慢的 HTTP1 匹配器,使用“HTTP1”代替它扫描整个请求最多 4096 个字节,但它有点慢。

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2021-12-11
    • 2021-05-26
    • 2017-01-20
    • 2020-11-20
    • 2021-12-25
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    相关资源
    最近更新 更多