在 GCP 上部署 SSR Web 应用程序的正确方法是什么?

boh*_*val 2 cloud google-app-engine google-compute-engine google-cloud-platform kubernetes

起点:我有一个通用的 JS 应用程序(构建在 Next.js、Nuxt.js、Universal Angular 等上)并且我希望它在 GCP 上运行(我认为同样的问题可以参考 AWS,原则是相同)。该应用程序不是“真正的”后端(具有数据库连接、业务逻辑等),它更像是“前端-后端”——它所做的只是前端的 SSR。该应用程序使用 Docker 进行容器化。应用程序应该是生产就绪的(不应该部署在一些 beta 服务上)。

我遇到了 4 种可能的选择:

  1. 计算引擎
  2. GKE (Kubernetes)
  3. 云跑
  4. 应用引擎

接下来的问题是:什么是 GCP 服务,最适合该应用程序的需求?

gui*_*ere 6

我是 Cloud Run 的忠实粉丝,我无法向您推荐其他最佳地点。但为什么用文字

  • Compute Engine:传统服务器,需要自己管理所有无聊的事情(高可用性、备份、补丁/更新/升级)。并且不要缩放到 0。对于 HA,您需要 3 个 VM(至少在同一区域中)。挺贵的。
  • GKE:与计算引擎非常相似。此外,您还需要有关 K8S 的技能。
  • AppEngine:很棒的解决方案,但不像 Cloud Run 那样可定制。此外,您不能在 App Engine 标准上直接提供容器,只能在 flex 版本、自定义运行时(您不缩放到 0,而是缩放到 1);这里的主要优势是与 Compute Engine 相比更容易管理服务器,并且包括本地区域 HA。

对于 Cloud Run、Cloud Function 和 App Engine(具有自动/基本缩放模式的标准版本),该服务可以缩放到 0。因此,当请求进来时,该服务会启动并需要一段时间才能为请求提供服务(大约 300 -> 500 毫秒,除非您使用重型框架,例如 Spring Boot,需要几秒钟的时间)。

如果这个冷启动是一个问题,你可以设置一个最小实例来保持一个实例的温暖,从而丢弃这个冷启动。

  • 您无法使用 Cloud Functions 执行此操作
  • App Engine,您为未使用的实例(保持温暖但不提供流量)支付,无折扣
  • 使用 Cloud run,您可以在实例空闲时支付 10 倍的费用(90% 的折扣)。

遗憾的是,Cloud Run 上的最小实例仍处于 Beta 阶段(我相信它很快就会在 GA 中出现,但今天还没有如您所说的“生产就绪”。

注意:根据我的经验,Beta 版已准备好生产,如果出现问题,您根本没有经济补偿

IMO,我建议您在没有 min 实例参数的情况下对 Cloud Run(在 GA 中)进行测试,看看冷启动是否对您来说是一个真正的问题。如果是,则您有 beta 参数,但当您考虑它时,它可能是 GA!