App Engine Flex 服务随机崩溃并返回 502 错误

App Engine Flex 服务随机崩溃并返回 502 错误

我所在的公司在 4 月份决定将后端服务迁移到 Google App Engine。到今天为止一切都很顺利。我们有用于处理 REST API 调用的标准服务以及用于处理 WebSocket API 的 Flex 服务。几个小时前,我们的 Flex 服务开始对 WebSocket 握手做出 502 响应。Flex 服务的日志中没有错误,但有多个错误,如下所示:

{
  "insertId": "1cu1r4ugayjsq18",
  "jsonPayload": {
    "operation": {
      "zone": "europe-west3-c",
      "type": "operation",
      "name": "operation-1602285169497-5b145165b53ce-38a5e996-d4a261fe",
      "id": "8770045770006876317"
    },
    "error": [
      {
        "code": "ZONE_RESOURCE_POOL_EXHAUSTED",
        "location": "",
        "detail_message": ""
      }
    ],
    "trace_id": "operation-1602285169497-5b145165b53ce-38a5e996-d4a261fe",
    "version": "1.2",
    "event_subtype": "compute.instances.insert",
    "actor": {
      "user": "[email protected]"
    },
    "event_type": "GCE_OPERATION_DONE",
    "resource": {
      "id": "4266532621802885278",
      "type": "instance",
      "zone": "europe-west3-c",
      "name": "aef-socket--server--prod-20201002t220627-hdzf"
    },
    "event_timestamp_us": "1602285178688704"
  },
  "resource": {
    "type": "gce_instance",
    "labels": {
      "instance_id": "4266532621802885278",
      "project_id": "automatic-rock-252916",
      "zone": "europe-west3-c"
    }
  },
  "timestamp": "2020-10-09T23:12:58.688704Z",
  "severity": "ERROR",
  "labels": {
    "compute.googleapis.com/resource_zone": "europe-west3-c",
    "compute.googleapis.com/resource_type": "instance",
    "compute.googleapis.com/resource_name": "aef-socket--server--prod-20201002t220627-hdzf",
    "compute.googleapis.com/resource_id": "4266532621802885278"
  },
  "logName": "projects/automatic-rock-252916/logs/compute.googleapis.com%2Factivity_log",
  "receiveTimestamp": "2020-10-09T23:12:58.720000801Z"
}

请注意标签中的“socket--server--prod”,这是我们的 App Engine Flex 服务的名称,也是我怀疑此错误可能与我们的问题相关的唯一原因,因为该错误不是来自 App Engine 日志,它只是我在查询所有 GCP 日志中的所有错误日志时发现的。

这次我们通过重新部署解决了这个问题

gcloud app deploy socket-server.prod.yaml    --stop-previous-version

命令,但实际问题是

  1. 实例崩溃,但没有任何明显原因。我们没有遇到高负载,上次重新部署该服务是在它崩溃前 7 天,所以除了一些内部 GCP 问题(ZONE_RESOURCE_POOL_EXHAUSTED 错误代码也表明了这一点)之外,我没有任何想法。

  2. 尽管重新部署服务足以解决问题,但 App Engine 却没有这样做。直到今天,我才确信自动扩展和重新启动崩溃的实例是 App Engine 的主要功能之一,但现在我非常困惑。我的意思是,我们每月为 App Engine 服务支付约 250 美元,但它无法保证我们的服务不会随机崩溃且没有任何通知。在这种情况下,我们的实时生产服务停机了几个小时,我们只是从用户报告中了解到这一点。

  3. 没有客户支持。我在 GCP 控制台中找到的唯一支持联系人是关于计费问题的,以及一个指向 stackoverflow/serverfault 的链接,所以我来这里了。

我的问题是:

  1. 这一切都没问题吗?如果我想让服务不间断运行,我是否应该自己定期检查服务,或者是否有某种方式可以配置 Flex 使其自动重启?

  2. ZONE_RESOURCE_POOL_EXHAUSTED 错误代码是什么,它是否与我的服务崩溃有关,是否可以采取任何措施(从我目前在 Google 上搜索的结果来看,没有,但希望如此)。

  3. 您在使用 App Engine 时是否遇到过类似的问题并成功解决了?

  4. 最后,但并非最不重要的一点是,如果是他们的错,GCP 是否欠我们停机费用?如果是,如何检查和/或证明这是他们的错?

抱歉,这个提问帖不够严谨,但我不知道我还能在哪里发帖寻求帮助。如果你知道更好的方法,请告诉我。

答案1

  • 这一切都没问题吗?如果我想让服务不间断运行,我是否应该自己定期检查服务,或者是否有某种方式可以配置 Flex 使其自动重启?

您可以使用 GCP 服务之一,谷歌云监控获取您认为重要的数据,并在您的实例发生重大变化时设置警报。

  • ZONE_RESOURCE_POOL_EXHAUSTED 错误代码是什么,它是否与我的服务崩溃有关,是否可以采取任何措施(从我目前在 Google 上搜索的结果来看,没有,但希望如此)。

当您需要的 Google Cloud 资源当前不可用时,会发生 ZONE_RESOURCE_POOL_EXHAUSTED 错误代码。建议您在多个区域和地区之间部署和平衡工作负载,以降低发生中断的可能性,并在需要快速扩展时访问多个资源池。Google 公开文档概述了如何在 Google Cloud Platform 上构建弹性且可扩展的架构。此外,您还可以按需使用 Google Cloud,保证 Google Cloud 容量

  • 最后,但并非最不重要的一点是,如果是他们的错,GCP 是否欠我们停机费用?如果是,如何检查和/或证明这是他们的错?

您可以使用Google Cloud 支持,如果你订阅了任何付费支持,否则你可以提交公共问题追踪(PIT)只要您遇到问题,我们都会免费为您退款。最后,您不必证明这是任何人的错。一旦确定问题的根本原因,Google 就会多次调整客户的信用。

相关内容