App Engine 网络最佳实践

本页面概述了为 App Engine 资源配置网络选项的最佳实践。我们建议您查看本页面中的所有部分,了解 App Engine 支持的网络选项及其影响。

IP 管理

您必须管理 IP 地址,因为 App Engine 服务的每个实例都会使用子网中的 IP 地址。使用以下策略管理 IP 地址:

  • 备用 IP 分配:分配标准专用范围或备用 IP 范围,以缓解 IP 地址耗尽问题。请参阅 IP 地址耗尽应对策略。

  • 子网大小:确保子网的 IPv4 地址范围为 /26 或更大,以便为伸缩提供足够的 IP 地址。

  • 超额预配 IP 地址:我们建议您超额预配子网中的可用 IP 地址数量,以避免耗尽。与其他 App Engine 服务类似,您通常应使用 4 倍于运行实例数量的 IP 地址(稳定状态下为 2 倍,部署期间再增加 2 倍),以实现顺畅伸缩和更新。

监控 IP 地址使用情况

如果您使用的是直接 VPC 出站流量,请确保您为子网分配了足够的 IP 地址。您使用的 IP 地址数量取决于工作负载运行的实例数量,因此我们建议您监控 IP 地址使用情况。请确保您的 IP 使用量在一段时间内保持在子网支持的范围内。

如需估算您的 IP 地址使用情况,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Metrics Explorer 页面:

    转到 Metrics Explorer

  2. 使用 appengine.googleapis.com/system/instance_count 指标类型查找项目的实例数量。此指标会统计整个项目中的所有 App Engine 实例。对于配置了直接 VPC 出站流量的版本,请按 module_id 标签(用于标识服务)或 version_id 标签进行过滤。借助 Cloud Monitoring,您可以查看此指标的值随时间的变化情况。

  3. 将“实例数”指标的值乘以 2,即可估算出正在使用的 IP 地址数。

IP 地址耗尽应对策略

如果使用 RFC 1918 专用 IP 地址空间和直接 VPC 出站流量,大量 App Engine 工作负载可能会导致 IP 地址耗尽问题。以下策略可帮助您通过使用替代 IP 地址范围来管理 IP 地址耗尽问题。

使用非 RFC 1918 IPv4 地址

除了 RFC 1918 IPv4 地址范围之外,App Engine 还支持 RFC 6598 和 Class E/RFC 5735 范围。所有Google Cloud 服务和功能都可与这些非 RFC 1918 范围搭配使用,包括 VPC 网络、Cloud Load Balancing 和 Private Service Connect。

为获得最佳兼容性,我们建议您先使用 RFC 6598 (100.64.0.0/10) 范围。如果您已在其他位置使用此范围,请考虑改用 E 类/RFC 5735 (240.0.0.0/4)。E 类是一个巨大的空间,可提供超过 2.68 亿个 IP 地址,因此可长时间支持您的增长。但需要注意,E 类地址存在一些使用限制。例如,Windows 系统和某些本地硬件不支持 E 类地址。了解如何利用 E 类 IPv4 地址空间来缓解 GKE 中的 IPv4 耗尽问题。

使用 Cloud NAT 或 Private Service Connect

如果您的 App Engine 工作负载位于非 RFC 1918 范围内,并且需要访问仅接受 RFC 1918 的本地目标,请选择以下解决方案之一:

使用 IPv4 和 IPv6(双栈)子网

虽然迁移到 IPv6 并不能缓解 IPv4 耗尽问题,但仍建议您考虑迁移。为避免将来出现 IPv4 耗尽问题,请设置双栈资源。

端口耗尽缓解策略

以下部分介绍了通过 App Engine 减少端口耗尽的策略。

使用连接池并重复使用连接

当从 App Engine 应用向单个目标 IP 地址发送大量请求时,请使用连接池来维护和重复使用与目标的连接。如果与单个 IP 地址的连接速率过高,可能会耗尽出站端口并导致连接被拒绝错误。

性能和吞吐量策略

本部分介绍可扩缩的选项,用于提升网络性能和吞吐量,以访问互联网和 Google 服务。

使用受支持的运行时

只有标准第二代运行时支持直接 VPC 出站流量。受支持的运行时可运行标准语言实现、支持现代库集成,并提供更快、更强大的网络性能。

使用直接 VPC 出站流量实现更快的网络出站流量吞吐量

如需跨网络出站流量连接实现更快的吞吐量,请使用直接 VPC 出站流量来通过您的 VPC 网络路由流量。

示例 1:发送到互联网的外部流量

如果您要向公共互联网发送外部流量,请在 app.yaml 文件中将 vpc_egress 字段设置为 all-traffic,以通过 VPC 网络路由所有流量。使用此方法时,您必须设置 Cloud NAT 以访问公共互联网。

如需为 App Engine 服务设置 Cloud NAT,请参阅设置静态出站 IP 地址。如需了解要与直接 VPC 出站流量搭配使用的 Cloud NAT 网关设置(适用于 Public NAT 或 Private NAT),请参阅 Cloud NAT 直接 VPC 出站流量互动。

示例 2:发送到 Google API 的内部流量

如果您使用直接 VPC 出站流量将流量发送到 Google API(例如 Cloud Storage),请选择以下选项之一:

  • 使用专用 Google 访问通道指定 private-ranges-only(默认值):
    1. 在 app.yaml 文件中设置 vpc_egress: private-ranges-only。
    2. 启用专用 Google 访问通道。
    3. 为专用 Google 访问通道配置 DNS。 确保您的目标网域(例如 storage.googleapis.com)映射到以下内部 IP 地址范围之一:
      • 199.36.153.8/30
      • 199.36.153.4/30
  • 使用专用 Google 访问通道指定 all-traffic:
    1. 在 app.yaml 文件中设置 vpc_egress: all-traffic。
    2. 启用专用 Google 访问通道。

使用 App Engine 的默认 MTU 设置

将 VPC 网络与 App Engine 结合使用时,请勿更改该网络的最大传输单元 (MTU) 设置。请改用 1,460 字节的默认 MTU。

费用注意事项

为资源配置网络选项时,请考虑以下事项:

  • 共置资源:尝试将 App Engine 资源部署在与后端数据库(例如 Cloud SQL、Firestore 和 Cloud Storage 存储桶)相同的区域中。同一区域内的 Google Cloud 资源之间的数据传输是免费的。
  • 切换到直接 VPC 出站流量:如果您要安全地将流量路由到内部 VPC 网络资源,请考虑从无服务器 VPC 访问通道连接器切换到直接 VPC 出站流量。直接 VPC 出站流量不会产生基准计算费用,从而消除了与连接器实例关联的基准计算开销和空闲费用。
  • 使用 Cloud CDN:通过在 App Engine 资源前面放置 Cloud CDN,分流静态资源和高度可缓存的内容。从边缘传送数据比直接从 App Engine 支付标准互联网出站流量费用要便宜得多。您无法直接在默认的 appspot.com 网址上启用 Cloud CDN。而是通过具有无服务器网络端点组 (NEG) 后端的外部应用负载均衡器路由请求。如需了解详情,请参阅设置使用 App Engine 的全球外部应用负载均衡器。
  • 监控互联网出站流量:跨区域边界或流向公共互联网的出站流量会产生标准费用。将监控工作重点放在跨区域边界的出站流量上。

如需了解详情,请查看 App Engine 价格或使用价格计算器估算费用。

后续步骤