我有一项服务,我想在 Google Cloud Platform 上的抢占式实例上运行。这些实例将位于负载均衡器后面。大多数请求需要不到 10 秒的时间来处理。
我无法修改服务本身,但在我可以配置的服务前面的同一个图像上有一个 nginx 实例。
据我所见,ACPI 软关闭信号在实例关闭前 30 秒被发送到实例,此时我希望它停止接收请求。
我可以创建一个关闭脚本,重新配置 nginx 以停止将健康检查转发到服务,而是用自己的拇指向下响应,但这似乎有点 hacky,我觉得应该有更好的方法。(说服务不健康也有点不对劲——它只是想被从游泳池里拿出来。)
告诉负载均衡器停止向该实例发送请求的适当方法是什么,以便它可以(希望)满足其当前请求,然后在同时没有收到任何新请求的情况下关闭?
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
Preemptible instance │ │
│ │
│ │
│ │
│ │
┌─────────┐ │ ┌─────────┐ ┌─────────┐ │
│ Load │ │ │ /health │ some │ │ │
────▶│balancer │──────┼──▶│ nginx │──────────▶│ service │ │
│ │ │ │ /api/… │ │ │ │
└─────────┘ │ └─────────┘ └─────────┘ │
│ │
│ │
│ │
│ │─
│─
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─