背景
我们有一个调度程序实例组,每个活动虚拟机每秒接收大约 700 个请求。此调度程序位于自动扩展的负载均衡器后面。到目前为止,我们所有的 VM 都是常规 VM,但是我们一直在研究使它们成为抢占式的可能性。
抢占式实例的问题
根据文档,GCP 可以随时终止抢占式实例。
让我们假设每个调度程序 VM 都没有状态。它接收请求,处理它并向其他机器发出 HTTP 请求。
在任何给定时间,每个 VM 将同时处理大约 700 个请求,同时从负载均衡器接收数据。
问题
如果我的抢占式 VM 处理 700 个请求,收到要终止的信号会怎样?
好吧,理论上应该有一个关闭脚本,以确保处理这些请求完成然后终止应用程序(干净退出)。这就引出了一个大问题:
- 但是负载均衡器是否知道我的虚拟机正在关闭?它会继续向终止的虚拟机发送请求吗?
注意事项
如果是,则意味着某些请求将失败,因为一旦应用程序关闭,机器仍处于启动状态,负载均衡器继续向机器发送请求,而不知道应用程序已经关闭。
理想情况下,这些请求将作为失败的请求返回到负载均衡器,并将请求发送到另一台机器。然而,GCP 负载均衡器不够聪明,无法做到这一点,所以他们没有。
如果负载均衡器以某种方式知道该 VM 被选为抢先终止,则无需执行任何特殊操作。
哪一个?