选择 App Engine 环境

您可以使用柔性环境标准环境在 App Engine 中运行应用。此外,您还可以同时用这两种环境运行您的应用,让您的服务同时利用这两种环境各自的优势。

App Engine 环境

App Engine 非常适合利用微服务架构设计的应用,您决定使用这两种环境时尤其如此。阅读以下部分,学习并了解哪种环境最符合您的应用需求。

何时选择标准环境

应用实例利用下列支持语言的运行时环境,在沙盒中运行。

需要处理快速扩缩的应用。

标准环境适合具有以下特征的应用:

  • 源代码用支持的编程语言的特定版本编写
    • Python 2.7、Python 3.7、Python 3.8
    • Java 8、Java 11
    • Node.js 8、Node.js 10 和 Node.js 12
    • PHP 5.5、PHP 7.2、PHP 7.3 和 PHP 7.4(测试版)
    • Ruby 2.5、Ruby 2.6(测试版)和 Ruby 2.7(测试版)
    • Go 1.11、Go 1.12、Go 1.13 和 Go 1.14
  • 运行成本为零或非常低,您只需在需要时为实际所需付费。例如,当没有流量时,应用的实例可以缩减为 0。
  • 突遇流量高峰,需要立即调节。

何时选择柔性环境

应用实例在 Compute Engine 虚拟机上的 Docker 容器中运行。

接收的流量一致但流量会定期波动的应用,或者能满足参数逐渐扩充和缩减的应用。

柔性环境适合具有以下特征的应用:

  • 源代码用以下任一支持的编程语言版本编写:
    PythonJavaNode.jsGoRubyPHP.NET
  • 在 Docker 容器中运行,其中 Docker 容器包含用其他编程语言编写的自定义运行时或源代码。
  • 使用或依赖包含原生代码的框架。
  • 访问位于 Compute Engine 网络的 Google Cloud 项目的资源或服务。

比较高级功能

下表总结了两种环境之间的差异:

功能 标准环境 柔性环境
实例启动时间 数秒 数分钟
请求超时上限 取决于运行时环境和扩缩类型 60 分钟
后台线程 是,但有限制
后台处理
SSH 调试
扩缩 手动、基本、自动 手动、自动
缩减至零 否,最少 1 个实例
写入本地磁盘
  • Java 8、Java 11、Node.js、Python 3、PHP 7、Ruby、Go 1.11 和 Go 1.12+ 都拥有对 /tmp 目录的读写权限。
  • Python 2.7 和 PHP 5.5 没有磁盘的写入权限。
是,临时写入(每个虚拟机启动时的初始化磁盘)
修改运行时 是(通过 Dockerfile)
部署时间 数秒 数分钟
自动就地安装安全补丁 是(不包括容器映像运行时)
访问 Google Cloud API 和服务,如 Cloud StorageCloud SQLMemorystoreTasks 等。
WebSocket 没有
Java 8、Python 2 和 PHP 5 提供专有 Sockets API(测试版),但该 API 在较新的标准运行时环境中不可用。
支持安装第三方二进制文件
  • 适用于 Java 8、Java 11、Node.js、Python 3、PHP 7、Ruby 2.5(测试版)、Go 1.11 和 Go 1.12+。
  • 对于 Python 2.7 和 PHP 5.5 为“否”。
位置 北美洲、亚太地区或欧洲 北美洲、亚太地区或欧洲
价格 基于实例小时数计费 基于 vCPU、内存和永久性磁盘的使用情况计费

要深入比较柔性环境与标准环境,请参阅以下语言指南:PythonJavaGo PHP

比较柔性环境与 Compute Engine

App Engine 柔性环境与 Compute Engine 的不同之处如下:

  • 柔性环境虚拟机实例每周重启一次。在重启期间,Google 的管理服务应用任何必要的操作系统和安全更新。

  • 您始终可以访问 Compute Engine 虚拟机实例的根目录。默认情况下,SSH 对柔性环境中虚拟机实例的访问将停用。您可以视情况启用对应用虚拟机实例的根目录访问权限。

  • 代码部署所需时间可能更长,因为容器映像通过使用 Cloud Build 服务构建。

  • 柔性环境虚拟机实例的地理区域由您为 Cloud 项目的 App Engine 应用指定的位置确定。Google 的管理服务确保所有虚拟机实例位于同一位置,以实现最佳性能。

从标准环境迁移到柔性环境

如果您有在标准环境中运行的应用,您可能想将部分服务迁移至柔性环境。如需指导,请参阅有关 PythonJavaGoPHP 的建议。

要迁移特定服务,请参阅有关 PythonJavaGoPHP 的说明。