gpt4 book ai didi

node.js - 是否可以在谷歌云运行中重新启动一个进程

转载 作者:行者123 更新时间:2023-12-05 05:57:38 25 4
gpt4 key购买 nike

我们为一个 API 运行了多个 Google Cloud Run 服务。有一个父服务和多个子服务。当父服务启动时,它会加载所有子服务的架构。

目前没有办法告诉父进程重新加载架构,因此当部署新的子进程时,需要重新启动父服务以重新加载架构。

我们知道有 1 个或多个 Google Cloud Run 实例在运行,并且有处理这个问题的想法,但想知道是否有办法重新启动父进程。没有办法实现,一个或多个暂时无关紧要。唯一的方法是通过部署父级来找到它,这似乎有点矫枉过正。

在谷歌云中运行的容器是带有 Nodejs 的 Alpine Linux,运行一个 express 应用程序/中间件。我可以停止运行 Node 应用程序但不能重新启动它。如果我停止该服务,Google Cloud Run 可能仍会继续为导致错误的实例提供流量。

也许我可以停止快速服务,以便 Google Cloud run 替换该实例?有这种可能吗?有没有一种优雅的方式来做到这一点,以便它首先尝试完成和当前请求(而不是简单地杀死 express)?

寻找任何强制 Google Cloud Run 重启或启动新实例的方法。想法?

最佳答案

您的设计在高层次上似乎是一个缓存系统:父服务从子服务获取数据并缓存数据。

因此,您拥有缓存管理的所有困难,尤其是缓存失效。对此没有简单的解决方案,但我的建议是使用 memorystore,其中所有子服务都会发布其架构的最新版本号(例如,在容器启动时)。然后,父服务检查(例如,在每次请求时)内存存储中的状态(个位数 ms 延迟)是否有新版本可用。如果是新的,请求子服务,并更新父服务架构缓存。

如果适用,您还可以在缓存上设置 TTL,例如每分钟重新加载一次。


编辑 1

如果我只关注 Cloud Run,您只能在一种情况下重启容器而不部署新版本:将 max-instance 参数设置为 1,并实现退出端点(只需执行 os.exit () 或您的代码中的类似内容)

好吧,你失去了所有的扩展能力,但这是唯一的一种情况,通过一个特殊的退出端点,你可以退出容器并强制 Cloud Run 在下一个请求时重新加载它。

如果您有超过 1 个实例,您将无法重新启动所有正在运行的实例,而只能重新启动处理“退出”请求的这个实例。

因此,唯一的解决方案是部署一个新修订版(简单部署,无需更改代码/配置)

关于node.js - 是否可以在谷歌云运行中重新启动一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68767190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com