实例的管理方式

实例是 App Engine 用于自动扩缩应用的计算单元。在任何给定的时间,您的应用都有可能在一个或者许多实例上运行,传入的请求会分配到所有这些实例。

采用手动和基本扩缩方式的实例应该无限期运行,但其正常运行时间没有保证。硬件或软件故障可能会毫无征兆地出现,导致实例提前终止或频繁重启,这些故障可能需要相当长的时间才能解决。

所有柔性实例都会每周重启一次。重启期间,在有向后兼容的关键补丁时,底层操作系统会自动更新。应用的映像将保持不变,而不会受重启影响。

运行状况检查

App Engine 会定期发送运行状况检查请求,以确认实例正在运行,并检查实例是否已完全启动并准备好接受传入请求。这些运行状况检查默认启用,称为分组运行状况检查。收到运行状况检查的实例必须在指定的时间间隔内响应运行状况检查。

如果您需要将分组运行状况检查的默认行为扩展到您的应用,可以自定义 app.yaml 文件以配置两种类型的运行状况检查:

  • 活跃性检查检测虚拟机实例及其容器是否正在运行。如果虚拟机实例未通过活跃性检查,该实例将自动重启。配置的阈值和时间间隔或者容器崩溃可能会导致活跃性检查失败。
  • 就绪性检查检测虚拟机实例是否准备好接受传入请求。如果虚拟机实例未通过就绪性检查,则表示该虚拟机实例尚未完成启动并且未准备好接收请求。如果虚拟机实例通过就绪性检查并完成启动,则会被添加到可用实例池中。

如需详细了解分组运行状况检查行为,请参阅迁移到分组运行状况检查指南。

在实例进行这些运行状况检查时,App Engine 日志可能表明实例处于以下任何状态:

  • Healthy。实例收到运行状况检查请求,并且正在处理请求。运行状况良好的应用以 HTTP 状态代码 200 响应运行状况检查。
  • Unhealthy。实例拒绝了运行状况检查请求,并且未能响应指定数量的连续运行状况检查请求。如果实例仍然无法响应运行状况检查并且连续失败次数达到预定值,App Engine 会继续发送运行状况检查请求并重启该实例。
  • Lameduck。实例将关停或重启。在关停期间,实例会完成正在进行的请求,并拒绝新请求。应用返回 503 代码以表明实例无法处理请求。在实例关停或重启之前,关停脚本的运行时间有限,并且不能配置为更短或更长时间。
  • App Lameduck。实例正在准备处理流量。应用返回 503 代码以表明实例无法处理请求。如果虚拟机实例已完成启动并准备好处理流量,该实例将变为运行状况良好并将处理请求。如果虚拟机实例未及时启动,该实例将变为运行状况不佳并被移除。

lameduck 和 app lameduck 行为都是虚拟机实例经历的正常过程的一部分。

监控资源使用量

通过 Cloud Console 的“实例”页面,您可以查看实例的性能。该页面会提供每个实例的内存和 CPU 用量、正常运行时间、请求数及其他统计信息。您也可以对任何实例手动启动关停过程。

实例位置

实例根据项目设置按地理区域自动定位。

实例扩缩

当应用正在运行时,传入请求将被路由到适当的服务/版本的现有实例或新实例。每个活跃版本必须至少运行一个实例,服务/版本的扩缩类型控制着额外实例的创建方式。您可以在 app.yaml 文件中配置扩缩设置。扩缩类型分为两种:

自动扩缩
自动扩缩会根据请求速率、响应延迟时间和其他应用指标来创建实例。您可以为其中的每个指标指定阈值,以及指定应始终保持运行的最小实例数。
手动扩缩
手动扩缩会指定无论负载水平如何都持续运行的实例数。这种类型支持复杂初始化等任务,以及持久依赖内存状态的应用。