实例是 App Engine 用于自动扩缩应用的计算单元。在任何给定的时间,您的应用都有可能在一个或者许多实例上运行,传入的请求会分配到所有这些实例。
采用手动伸缩方式的实例应该无限期运行,但其正常运行时间没有保证,因为实例可能会因故障而提前终止,或因更新而重启。硬件或软件故障可能会毫无征兆地出现,导致实例提前终止或频繁重启,这些故障可能需要相当长的时间才能解决。
如果有可用的更新,则柔性环境下的所有实例都会每周重启。不过,我们不保证此时间表一定会按期执行。重启期间,在有向后兼容的关键补丁时,底层操作系统会自动更新。应用的映像将保持不变,而不会受重启影响。
健康检查
App Engine 会定期发送健康检查请求,以确认实例正在运行,并检查实例是否已完全启动并准备好接受传入请求。这些健康检查默认启用,称为分组健康检查。收到健康检查的实例必须在指定的时间间隔内响应健康检查。
如果您需要将分组健康检查的默认行为扩展到您的应用,可以自定义 app.yaml
文件以配置两种类型的健康检查:
- 活跃性检查检测虚拟机实例及其容器是否正在运行。如果虚拟机实例未通过活跃性检查,该实例将自动重启。配置的阈值和时间间隔或者容器崩溃可能会导致活跃性检查失败。
- 就绪性检查检测虚拟机实例是否准备好接受传入请求。如果虚拟机实例未通过就绪性检查,则表示该虚拟机实例尚未完成启动并且未准备好接收请求。如果虚拟机实例通过就绪性检查并完成启动,则会被添加到可用实例池中。
如需详细了解分组健康检查行为,请参阅迁移到分组健康检查指南。
在实例进行这些健康检查时,App Engine 日志可能表明实例处于以下任何状态:
- Healthy。实例收到健康检查请求,并且正在处理请求。运行状况良好表示实例具有超过 820 MB 的磁盘可用空间,应以 HTTP 状态代码
200
响应健康检查。 - Unhealthy。实例拒绝了健康检查请求,并且未能响应指定数量的连续健康检查请求。如果实例仍然无法响应健康检查并且连续失败次数达到预定值,App Engine 会继续发送健康检查请求并重启该实例。
- Lameduck。实例将关停或重启。在关停期间,实例会完成正在进行的请求,并拒绝新请求。应用返回
503
代码以表明实例无法处理请求。在实例关停或重启之前,关停脚本的运行时间有限,并且不能配置为更短或更长时间。 - App Lameduck。实例正在准备处理流量。应用返回
503
代码以表明实例无法处理请求。如果虚拟机实例已完成启动并准备好处理流量,该实例将变为运行状况良好并将处理请求。如果虚拟机实例未及时启动,该实例将变为运行状况不佳并被移除。
lameduck 和 app lameduck 行为都是虚拟机实例经历的正常过程的一部分。
监控资源使用量
通过 Google Cloud 控制台的“实例”页面,您可以了解实例的运行情况。该页面会提供每个实例的内存和 CPU 用量、正常运行时间、请求数及其他统计信息。您也可以对任何实例手动启动关停过程。
NTP 与 App Engine 柔性环境
App Engine 柔性环境具有使用 Google NTP 服务器的网络时间协议 (NTP) 服务。但是,柔性环境中的 NTP 服务无法修改。
实例位置
实例根据项目设置按地理区域自动定位。
实例扩缩
当应用正在运行时,传入请求将被路由到适当的服务/版本的现有实例或新实例。每个活跃版本必须至少运行一个实例,服务/版本的扩缩类型控制着额外实例的创建方式。
您可以在应用的 app.yaml
中指定扩缩类型。
默认情况下,您的应用使用自动扩缩功能,这意味着 App Engine 将管理空闲实例的数量。
- 自动扩缩
- 自动扩缩会根据请求速率、响应延迟时间和其他应用指标来创建实例。您可以配置
automatic_scaling
元素为其中的每个指标指定阈值,以及指定应始终保持运行的最小实例数。
- 手动扩缩
- 手动扩缩会指定无论负载水平如何都持续运行的实例数。这种类型支持复杂初始化等任务,以及持久依赖内存状态的应用。
管理服务
根据实例的伸缩类型,您可以在 Google Cloud 控制台或 Google Cloud CLI 中管理服务和版本。
停止版本
App Engine 中的每个版本都在一个或多个实例中运行,具体取决于您将其配置为处理多少流量。
点击相应标签页即可获取有关所选工具的使用说明:
控制台
如需停止或停用服务的某个版本,请执行以下操作:
前往 Google Cloud 控制台中的 App Engine 版本页面:
从表格中选择一个版本,然后点击停止。
gcloud
运行以下命令:
gcloud app versions stop --service=SERVICE VERSION
您需要进行如下替换:
- 将 SERVICE 替换为您的服务名称。
- 将 VERSION 替换为您的服务的版本名称。
删除服务
每项服务都可以配置为使用不同的运行时环境和性能设置。您无法删除默认服务。删除服务也会删除项目中与其关联的所有版本。
点击相应标签页即可获取有关所选工具的使用说明:
控制台
要删除服务,请执行以下操作:
前往 Google Cloud 控制台中的 App Engine Service 页面:
从表格中选择一项服务,然后点击删除。
gcloud
运行以下命令:
gcloud app services delete SERVICE
您需要进行如下替换:
- 将 SERVICE 替换为您的服务名称。