【问题标题】:Google Cloud Preemptible Instances: Stop receiving requests after ACPI shutdown signalGoogle Cloud 抢占式实例:在 ACPI 关闭信号后停止接收请求
【发布时间】:2019-03-05 14:58:12
【问题描述】:

我想在 Google Cloud Platform 上的抢占式实例上运行一项服务。这些实例将位于负载均衡器后面。大多数请求需要不到 10 秒的时间来处理。

我无法修改服务本身,但在我可以配置的服务前面的同一图像上有一个 nginx 实例。

据我所知,在实例关闭前 30 秒向实例发送了 ACPI 软关闭信号,此时我希望它停止接收请求。

我可以创建一个 shutdown script 来重新配置 nginx 以停止将运行状况检查转发到服务,而是用自己的拇指向下响应,但这似乎有点 hacky,我觉得应该有更好的方法。 (说服务不健康也感觉有点不对劲——它只是想被从池中取出。)

告诉负载均衡器停止向该实例发送请求的适当方法是什么,以便它可以(希望)满足其当前请求,然后在同时没有收到任何新请求的情况下关闭?

                             ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
                           ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  │
                         ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  │
                          Preemptible instance                  │   │
                         │                                        │
                                                                │   │
                         │                                        │
                                                                │   │
        ┌─────────┐      │   ┌─────────┐           ┌─────────┐    │
        │  Load   │          │         │  /health  │  some   │  │   │
   ────▶│balancer │──────┼──▶│  nginx  │──────────▶│ service │    │
        │         │          │         │   /api/…  │         │  │   │
        └─────────┘      │   └─────────┘           └─────────┘    │
                                                                │   │
                         │                                        │
                                                                │   │
                         │                                        │─
                                                                │─
                         └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

【问题讨论】:

  • 您使用的是什么类型的实例组?
  • @night-gold 对于当前的非抢占式实例:托管、自动扩展和自动修复。
  • 你的健康检查怎么样?一个简单的答案路径? nginx 200 OK?
  • 是的。 proxy_passed 通过 nginx 发送到 some_service 回复 200 OK(如果一切正常)。
  • 你的 nginx 是否处于优雅停止模式?

标签: google-cloud-platform google-cloud-load-balancer


【解决方案1】:

这个答案更像是“我想要的”而不是“它是更好的解决方案”,但如果运行状况检查真的很快就能回答,那么这个答案是有效的。

我了解您的想法是在请求停止之前切断请求,这样您就不会在中间切断持续的请求并以超时回答。这已经通过服务的优雅停止来实现。

如果服务处于正常停止状态,它将停止接收请求,但在停止之前等待当前正在进行的请求完成,创建一个对 nginx 服务的依赖关系到其他服务,以便它们在它之后停止。

这样,如果您的负载均衡器每秒钟检查一次服务器是否已启动并直接响应,则当从 google 发送信号以停止实例时,lb 将几乎立即将其从可能的目标中删除,正在进行的请求将正常完成,然后服务器应该干净地停止。这样一来,您应该几乎不会丢失任何请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2016-01-02
    • 2020-01-30
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多