【发布时间】:2020-04-16 20:22:13
【问题描述】:
在编写 Cloud Run 服务时,我们开发了一个容器来侦听 PORT 环境变量以处理传入的 HTTP 请求。容器的一个实例会启动并处理请求,然后在结束原始请求后会再存活一段时间,以防有进一步的请求到达。如果没有进一步的请求,GCP 关闭容器。正是在这个领域,我有一个问题。
容器内是否有钩子、信号或其他指示容器正在关闭?
在我的示例中,我的容器想要干净地结束。也许它想关闭连接或执行一些快速刷新缓存。
【问题讨论】:
-
我会尝试监听
SIGTERM信号,看看它是否会触发。这是标准 docker 容器关闭序列的一部分,我猜这里会发生类似的事情。 -
我在 Cloud Run 上找到了一个非常好的常见问题解答,其中有一个答案……请参阅……github.com/ahmetb/…
-
请记住,您仅在实例处理请求时才计费,而在这里,您希望在请求之外执行一些处理(不计费)。 您需要有一个强有力的用例来证明这一点! 本着 Cloud Run 的精神,该服务是无状态的。我可以理解,必须关闭连接以防止任何守护程序连接到外部服务,但在 Cloud Run 容器合同中,刷新缓存不是有效用例。
-
@guillaumeblaquiere - 这是个好主意!谢谢你。这让我想到了推论……那就是“我们是否需要为在收到请求之前发生的处理/启动时间付费?”。我的猜测是肯定的,并开辟了一条全新的考虑途径(面向未来)。
-
@johnmich,如果您 ping Cloud Run,您可以防止冷启动(如果它是您服务的最新活动实例)。我在this article 中描述了这一点。但是触发关闭的实例将关闭。
标签: google-cloud-platform google-cloud-run