在 GCP 上部署 SSR Web 应用程序的正确方法是什么?
What is the proper way to deploy SSR web app on GCP?
起点:我有一个通用 JS 应用程序(构建于 Next.js、Nuxt.js、通用 Angular 等),我希望它运行 & 运行 on GCP(我觉得同样的问题可以参考AWS,原理都是一样的)。该应用程序不是“真正的”后端(具有数据库连接、业务逻辑等),它更像是“前端-后端”——它所做的只是前端的 SSR。该应用程序使用 Docker 容器化。该应用程序应该是生产就绪的(不应部署在某些测试版服务上)。
我遇到了4种可能的选择:
- 计算引擎
- GKE(Kubernetes)
- 云运行
- 应用引擎
接下来的问题是:最适合此应用程序需求的 GCP 服务是什么?
我是 Cloud 运行 的忠实粉丝,我无法向您推荐其他最佳地点。但是为什么在文字
- Compute Engine:传统服务器,所有无聊的事情都需要自己管理(高可用性、备份、patch/update/upgrade)。并且不要扩展到 0。对于 HA,您需要 3 个 VM(至少在同一区域中)。挺贵的。
- GKE:与计算引擎非常相似。另外你还需要K8S的技能。
- AppEngine:出色的解决方案,但不像 Cloud 运行 那样可定制。此外,您不能在 App Engine 标准上直接提供容器,它只能在 flex 版本上,自定义 运行time(您不缩放到 0,而是缩放到 1);这里的主要优势是与 Compute Engine 相比更容易管理服务器,并且包含本地区域 HA。
对于 Cloud 运行、Cloud Function 和 App Engine(具有 automatic/basic 缩放模式的标准版本),服务可以缩放到 0。因此,当请求进来时,服务就会启动并在能够满足请求之前花了一段时间(大约 300 -> 500 毫秒,除非你使用重型框架,比如 Spring 引导,它需要几秒钟)。
如果这个冷启动有问题,你可以设置一个min instance来保温一个实例,从而放弃这个冷启动。
- 您不能使用 Cloud Functions 执行此操作
- App Engine,您无折扣地支付未使用的实例(保持温暖但不提供流量)
- 使用 Cloud 运行,您在闲置时支付的实例成本减少 10 倍(折扣的 90%)。
遗憾的是 min-instance on Cloud 运行 仍处于 Beta 阶段(我相信它很快就会在 GA 中发布,但今天还不是您所说的“生产就绪”。
注意:根据我的经验,Beta 版本已准备就绪,如果出现问题,您根本没有经济补偿
IMO,我建议您在没有最小实例参数的情况下在 Cloud 运行(处于 GA 状态)上进行测试,看看冷启动对您来说是否是一个真正的问题。如果是,你有beta参数,但考虑到它可能是GA!
起点:我有一个通用 JS 应用程序(构建于 Next.js、Nuxt.js、通用 Angular 等),我希望它运行 & 运行 on GCP(我觉得同样的问题可以参考AWS,原理都是一样的)。该应用程序不是“真正的”后端(具有数据库连接、业务逻辑等),它更像是“前端-后端”——它所做的只是前端的 SSR。该应用程序使用 Docker 容器化。该应用程序应该是生产就绪的(不应部署在某些测试版服务上)。
我遇到了4种可能的选择:
- 计算引擎
- GKE(Kubernetes)
- 云运行
- 应用引擎
接下来的问题是:最适合此应用程序需求的 GCP 服务是什么?
我是 Cloud 运行 的忠实粉丝,我无法向您推荐其他最佳地点。但是为什么在文字
- Compute Engine:传统服务器,所有无聊的事情都需要自己管理(高可用性、备份、patch/update/upgrade)。并且不要扩展到 0。对于 HA,您需要 3 个 VM(至少在同一区域中)。挺贵的。
- GKE:与计算引擎非常相似。另外你还需要K8S的技能。
- AppEngine:出色的解决方案,但不像 Cloud 运行 那样可定制。此外,您不能在 App Engine 标准上直接提供容器,它只能在 flex 版本上,自定义 运行time(您不缩放到 0,而是缩放到 1);这里的主要优势是与 Compute Engine 相比更容易管理服务器,并且包含本地区域 HA。
对于 Cloud 运行、Cloud Function 和 App Engine(具有 automatic/basic 缩放模式的标准版本),服务可以缩放到 0。因此,当请求进来时,服务就会启动并在能够满足请求之前花了一段时间(大约 300 -> 500 毫秒,除非你使用重型框架,比如 Spring 引导,它需要几秒钟)。
如果这个冷启动有问题,你可以设置一个min instance来保温一个实例,从而放弃这个冷启动。
- 您不能使用 Cloud Functions 执行此操作
- App Engine,您无折扣地支付未使用的实例(保持温暖但不提供流量)
- 使用 Cloud 运行,您在闲置时支付的实例成本减少 10 倍(折扣的 90%)。
遗憾的是 min-instance on Cloud 运行 仍处于 Beta 阶段(我相信它很快就会在 GA 中发布,但今天还不是您所说的“生产就绪”。
注意:根据我的经验,Beta 版本已准备就绪,如果出现问题,您根本没有经济补偿
IMO,我建议您在没有最小实例参数的情况下在 Cloud 运行(处于 GA 状态)上进行测试,看看冷启动对您来说是否是一个真正的问题。如果是,你有beta参数,但考虑到它可能是GA!