【问题标题】:Is it possible to restart a process in Google Cloud run是否可以在 Google Cloud 运行中重新启动进程
【发布时间】:2023-03-09 17:38:01
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 子服务是否在同一个容器中运行(如本图gist.githubusercontent.com/igponce/…)?
  • 如果架构文件对于运行服务至关重要,您可能需要将其包含在运行服务的容器中。可能会在文件更改时为他们触发云构建,然后重新部署云运行服务。
  • 感谢您的想法。架构在子项之间是动态的,不属于容器。
  • 不,每个孩子在自己的容器中作为单独的微服务运行

标签: node.js express google-cloud-run


【解决方案1】:

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

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

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


编辑 1

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

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

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

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

【讨论】:

  • 非常感谢您的回复!我故意省略了应用程序的详细信息,因为我想专注于 Google Cloud Run,如果有办法重新加载容器,请重新启动服务。由于我们的开发人员总是想要细节,这是一个 GraphQL 联合 API 配置。父节点是网关,子节点是子图端点。刷新架构的唯一方法是通过轮询,我真的不想在 Google Cloud Run 中这样做
  • 太好了,感谢您的编辑。如果我们确实有办法从代码库中重新启动进程或容器,以获取一个认为使用 pub/sub 的所有实例,所有实例将在启动时订阅,并且如果消息通过指示它,所有实例都可以重置到。
  • 它可以工作,也可以不工作,没有保证。首先是因为您需要为每个实例创建一个请求订阅。在这里,除了冷启动和要管理的清理(在启动时创建拉取订阅,并在收到终止信号时将其删除)之外,没有问题。问题来自 Cloud Run:没有(或很少)分配给空闲进程的 CPU,因此拉连接随时可能丢失。如果发布了消息,则可能无法处理该消息。没有保修,但它可以工作
  • 是的,没想到拉订阅,轮询和云运行不是一个好的组合。我发现推送是行不通的,因为每个实例都没有唯一的端点。谢谢,有用的评论可以理清我的想法。
  • 记住你的想法,它可能会在今年年底前奏效;)敬请期待!
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 2012-05-09
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
相关资源
最近更新 更多