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