后端服务概览

后端服务定义了 Cloud Load Balancing 如何分配流量。后端服务配置包含一组值,例如用于连接到后端的协议、各种分发和会话设置、健康检查和超时。这些设置可对负载均衡器的行为进行精细控制。为了帮助您尽快开始,大多数设置都具有允许快速配置的默认值。后端服务的范围为全球或区域。

负载均衡器、Envoy 代理和无代理 gRPC 客户端使用后端服务资源中的配置信息执行以下操作:

  • 将流量定向到正确的后端(实例组或网络端点组 (NEG))。
  • 根据均衡模式(这是每个后端的设置)分配流量。
  • 确定哪个健康检查正在监控后端的运行状况。
  • 指定“会话亲和性”
  • 确定是否已启用其他服务,包括仅适用于特定负载均衡器的以下服务:
    • Cloud CDN
    • Google Cloud Armor 安全政策
    • Identity-Aware Proxy
  • App Hub预览版)中将区域后端服务指定为服务。

您可以在创建后端服务或将后端服务添加到后端服务时设置这些值。

下表汇总了哪些负载均衡器使用后端服务。您使用的产品还决定了后端服务的数量上限、后端服务的范围、支持的后端类型以及后端服务的负载均衡方案。负载均衡方案是 Google 用于对转发规则和后端服务进行分类的标识符。每个负载均衡产品都会为其转发规则和后端服务使用一种负载均衡方案。部分方案在产品之间共享。

表格:后端服务和受支持的后端类型
产品 最大后端服务数量 后端服务的范围 受支持的后端类型 负载均衡方案
全球外部应用负载均衡器 多个 全球 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
  • 所有无服务器 NEG:一个或多个 App Engine、Cloud Run 或 Cloud Functions 服务
  • Private Service Connect NEG:如果指定了多个 NEG,则 NEG 必须位于不同的区域
  • 一个用于外部后端的全球互联网 NEG(预览版
EXTERNAL_MANAGED
传统应用负载均衡器 多个 全球1 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
  • 所有无服务器 NEG:一个或多个 App Engine、Cloud Run 或 Cloud Functions 服务,或者
  • 一个用于外部后端的全球互联网 NEG
外部
区域级外部应用负载均衡器 多个 区域级 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
  • 单个无服务器 NEG(仅限 Cloud Run)
  • 单个 Private Service Connect NEG
  • 用于一个外部后端的所有区域级互联网 NEG
EXTERNAL_MANAGED
跨区域内部应用负载均衡器 多个 全球 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
  • 单个无服务器 NEG(仅限 Cloud Run)
  • 单个 Private Service Connect NEG
INTERNAL_MANAGED
区域级内部应用负载均衡器 多个 区域级 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
  • 单个无服务器 NEG(仅限 Cloud Run)
  • 单个 Private Service Connect NEG
  • 用于一个外部后端的所有区域级互联网 NEG
INTERNAL_MANAGED
全局外部代理网络负载均衡器 1 全球 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
EXTERNAL_MANAGED
传统代理网络负载均衡器 1 全球1 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG2
外部
区域级外部代理网络负载均衡器 1 区域级 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 用于一个外部后端的所有区域级互联网 NEG
EXTERNAL_MANAGED
区域内部代理网络负载均衡器 1 区域级 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 用于一个外部后端的所有区域级互联网 NEG
INTERNAL_MANAGED
跨区域内部代理网络负载均衡器 多个 Global 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORT 类型可用区级 NEG
  • 所有混合连接 NEG:一个或多个 NON_GCP_PRIVATE_IP_PORT 类型 NEG
  • 可用区 NEG 和混合 NEG 的组合:GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型 NEG
INTERNAL_MANAGED
外部直通式网络负载均衡器 1 区域级 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP 类型可用区级 NEG
外部
内部直通式网络负载均衡器 1 范围为区域,但可以配置为可在全球访问 后端服务支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP 类型可用区级 NEG
INTERNAL
Traffic Director 多个 全球 每项后端服务都支持以下后端组合之一:
  • 所有实例组后端:一个或多个代管实例组后端、非代管实例组后端或代管实例组后端与非代管实例组后端的组合
  • 所有可用区级 NEG:一个或多个 GCE_VM_IP_PORTNON_GCP_PRIVATE_IP_PORT 类型可用区级 NEG
  • 一个类型为 INTERNET_FQDN_PORT 的互联网 NEG
  • 一个或多个服务绑定
INTERNAL_SELF_MANAGED
1 在标准或高级网络层级中,传统应用负载均衡器和传统代理网络负载均衡器使用的后端服务始终覆盖全球范围。但是,在标准层级中,存在以下限制:
2 对于 GKE 部署,只有独立 NEG 支持混合 NEG 后端。

后端

后端是指接收来自 Google Cloud 负载均衡器、Traffic Director 配置的 Envoy 代理或无代理 gRPC 客户端的流量的一个或多个端点。后端有多种类型:

您无法删除与后端服务关联的后端实例组或 NEG。在删除实例组或 NEG 之前,必须先从引用它的所有后端服务中将其作为后端移除。

实例组

本部分介绍实例组如何使用后端服务。

后端虚拟机和外部 IP 地址

后端服务中的后端虚拟机不需要外部 IP 地址:

  • 对于全球外部应用负载均衡器和外部代理网络负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Google Front End (GFE) 通信。GFE 通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。通过特殊路由,可以实现 GFE 与后端虚拟机或端点之间的通信。
    • 对于实例组后端,内部 IPv4 地址始终是与虚拟机的 nic0 接口对应的主要内部 IPv4 地址。
    • 对于可用区级 NEG 中的 GCE_VM_IP_PORT 端点,您可以将该端点的 IP 地址指定为与虚拟机的任何网络接口关联的主要 IPv4 地址,也可以指定为与虚拟机的任何网络接口关联的别名 IP 地址范围中的任何 IPv4 地址。
  • 对于区域级外部应用负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Envoy 代理通信。Envoy 代理通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。
    • 对于实例组后端,内部 IPv4 地址始终是与虚拟机 nic0 接口对应的主要内部 IPv4 地址,并且 nic0 必须与负载均衡器位于同一网络中。
    • 对于可用区级 NEG 中的 GCE_VM_IP_PORT 端点,您可以将端点的 IP 地址指定为与虚拟机的任何网络接口关联的主要 IPv4 地址,也可以指定为与虚拟机的任何网络接口关联的别名 IP 地址范围中的任何 IPv4 地址,只要网络接口与负载均衡器位于同一网络中即可。
  • 对于外部直通网络负载均衡器:客户端通过 Google 的 Maglev 直通式负载均衡基础架构直接与后端通信。数据包被路由和递送至后端,并保留原始来源和目标 IP 地址。后端使用直接服务器返回来响应客户端。用于选择后端和跟踪连接的方法是可配置的
    • 对于实例组后端,数据包始终递送到虚拟机的 nic0 接口。
    • 对于可用区级 NEG 中的 GCE_VM_IP 端点,数据包会递送到与 NEG 关联的子网中的虚拟机网络接口。

已命名端口

后端服务的已命名端口特性仅适用于使用实例组后端的代理负载均衡器。已命名端口定义用于代理(GFE 或 Envoy)与后端实例之间的 TCP 连接的目标端口。

已命名端口的配置如下:

  • 在每个实例组后端上,您必须使用键值对配置一个或多个已命名端口。键表示您选择的有意义的端口名称,值表示分配给该名称的端口号。系统会为每个实例组后端单独完成名称到数字的映射。

  • 在后端服务上,仅使用端口名称 (--port-name) 指定单个已命名端口。

在实例组后端上,后端服务会将端口名称转换为端口号。如果实例组的已命名端口与后端服务的 --port-name 匹配,则后端服务使用此端口号与实例组的虚拟机通信。

例如,您可以在实例组中使用名称 my-service-name 和端口 8888 设置已命名端口:

gcloud compute instance-groups unmanaged set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

然后,您可以引用后端服务配置中已命名的端口,并将 --port-name 上的后端服务设置为 my-service-name

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

如果每个实例组为同一端口名称指定了不同的端口号,则后端服务在与不同实例组中的虚拟机通信时可以使用不同的端口号。

代理负载均衡器的后端服务使用的已解析端口号不需要与负载均衡器的转发规则使用的端口号相匹配。代理负载均衡器会侦听发送到其转发规则的 IP 地址和目的地端口的 TCP 连接。由于代理打开其后端的第二个 TCP 连接,因此第二个 TCP 连接的目的地端口可以不同。

已命名端口仅适用于实例组后端。具有 GCE_VM_IP_PORT 端点的可用区级 NEG、具有 NON_GCP_PRIVATE_IP_PORT 端点的混合 NEG 和互联网 NEG 使用不同的机制(即在端点本身上)定义端口。通过使用不涉及指定目标端口的抽象,无服务器 NEG 引用 Google 服务,而 PSC NEG 引用服务连接。

内部直通式网络负载均衡器和外部直通式网络负载均衡器不使用已命名端口。这是因为它们是直通式负载均衡器,用于将连接直接路由到后端,而不是创建新连接。数据包被传送到后端,并保留负载均衡器的转发规则的目的地 IP 地址和端口。

如需了解如何创建已命名端口,请参阅以下说明:

有关实例组的限制和指南

在为负载均衡器创建实例组时,请记住以下限制和指南:

  • 不要将一个虚拟机放在多个负载均衡实例组中。如果虚拟机是两个或更多非代管实例组的成员,或者是一个代管实例组和一个或多个非代管实例组的成员,则 Google Cloud 限制您一次只能将其中一个实例组用作特定后端服务的后端。

    如果您需要一个虚拟机参与多个负载均衡器,则必须将同一实例组用作每个后端服务上的后端。

  • 对于代理负载均衡器,当您想要将流量均衡到不同端口时,请在一个实例组上指定所需的命名端口,并让每个后端服务订阅一个唯一的命名端口。

  • 您可以将同一实例组用作多个后端服务的后端。在这种情况下,后端必须使用兼容的平衡模式。兼容表示平衡模式必须相同,或者它们必须是 CONNECTIONRATE 的组合。

    不兼容的平衡模式组合如下:

    • CONNECTION - UTILIZATION
    • RATE - UTILIZATION

    请思考以下示例:

    • 您有两项后端服务:external-https-backend-service 用于外部应用负载均衡器,internal-tcp-backend-service 用于内部直通式网络负载均衡器。
    • 您在 internal-tcp-backend-service 中使用名为 instance-group-a 的实例组。
    • internal-tcp-backend-service 中,您必须应用 CONNECTION 均衡模式,因为内部直通网络负载均衡器仅支持 CONNECTION 均衡模式。
    • 如果在 external-https-backend-service 中应用 RATE 均衡模式,那么您也可以在 external-https-backend-service 中使用 instance-group-a
    • 如果使用 UTILIZATION 均衡模式,您也无法在 external-https-backend-service 中使用 instance-group-a
  • 若要更改用作多个后端服务的后端的实例组的均衡模式,请执行以下操作:

    • 从一个后端服务以外的其他所有后端服务中移除实例组。
    • 更改一个剩余后端服务上的后端的均衡模式。
    • 将实例组作为后端重新添加到剩余的后端服务(如果这些服务支持新均衡模式)。
  • 如果您的实例组与多个后端服务相关联,则每个后端服务都可以引用实例组上相同或不同的已命名端口。

  • 我们不建议在多个后端服务中添加自动扩缩式代管实例组,这可能导致实例组中的实例进行不可预测和不必要的扩缩,尤其是在您使用 HTTP 负载均衡利用率自动扩缩指标时。

    • 建议不要这样做,但如果自动扩缩指标是 CPU 利用率或者与负载均衡器的服务容量无关的 Cloud Monitoring 指标,则此方案可能适用。使用其中一个自动扩缩指标可防止不稳定的扩缩。

区域网络端点组

网络端点通过 IP 地址或 IP 地址和端口组合表示服务,而不是引用实例组中的虚拟机。网络端点组 (NEG) 是网络端点的逻辑分组。

可用区级网络端点组 (NEG) 是可用区级资源,表示单个子网内 Google Cloud 资源的 IP 地址的集合或 IP 地址和端口组合的集合。

将可用区级 NEG 用作后端的后端服务在虚拟机内运行的应用或容器之间分配流量。

可用区级 NEG 有两种类型的网络端点:

  • GCE_VM_IP 端点(仅受内部直通式网络负载均衡器和基于后端服务的外部直通式网络负载均衡器支持)。
  • GCE_VM_IP_PORT 端点。

如需查看哪些产品支持可用区级 NEG 后端,请参阅表格:后端服务和受支持的后端类型

如需了解详情,请参阅可用区级 NEG 概览

互联网网络端点组

互联网 NEG 是定义外部后端的资源。外部后端是在本地基础架构中或由第三方提供的基础架构上托管的后端。

互联网 NEG 是主机名或 IP 地址以及可选端口的组合。互联网 NEG 有两种类型的网络端点:INTERNET_FQDN_PORTINTERNET_IP_PORT

互联网 NEG 有两种范围:全球和区域。如需查看哪些产品支持每个范围的互联网 NEG 后端,请参阅表格:后端服务和受支持的后端类型

如需了解详情,请参阅互联网网络端点组概览

无服务器网络端点组

网络端点组 (NEG) 为负载均衡器指定了一组后端端点。无服务器 NEG 是指向 Cloud RunApp EngineCloud FunctionsAPI Gateway 服务的后端。

无服务器 NEG 可以表示以下各项之一:

  • 一项 Cloud Run 服务或一组服务。
  • 一个 Cloud Functions 函数或一组函数。
  • 一个 App Engine 应用(标准或 Flex 应用)、应用内的一项特定服务、应用的某一特定版本或一组服务。
  • 一种 API Gateway,用于通过所有服务一致的 REST API 访问您的服务,而不考虑服务实现。此功能目前为预览版

如需为共享网址格式的无服务器应用设置无服务器 NEG,请使用网址掩码。网址掩码是网址架构的模板(例如 example.com/<service>)。无服务器 NEG 将使用此模板从传入请求的网址中提取 <service> 名称,并将请求路由到相同名称的匹配的 Cloud Run、Cloud Functions 或 App Engine 服务。

如需查看哪些负载均衡器支持无服务器 NEG 后端,请参阅表格:后端服务和受支持的后端类型

如需详细了解无服务器 NEG,请参阅无服务器网络端点组概览

服务绑定

服务绑定是在 Traffic Director 中的后端服务与在 Service Directory 中注册的服务之间建立连接的后端。后端服务可以引用多个服务绑定。具有服务绑定的后端服务不能引用任何其他类型的后端。

混合后端

将不同类型的后端添加到单个后端服务时,以下使用注意事项适用:

  • 单个后端服务不能同时使用实例组和可用区级 NEG。
  • 您可以在同一后端服务中使用不同类型的实例组的组合。例如,单个后端服务可以引用代管式实例组和非代管式实例组的组合。如需详细了解哪些后端与哪些后端服务兼容,请参阅上一部分中的表格。
  • 在某些代理负载均衡器中,您可以结合使用可用区级 NEG(具有 GCE_VM_IP_PORT 端点)和混合连接 NEG(具有 NON_GCP_PRIVATE_IP_PORT 端点)来配置混合负载均衡。如需查看哪些负载均衡器具有此功能,请参阅表格:后端服务和受支持的后端类型

后端协议

创建后端服务时,您必须指定用于与后端通信的协议。每个后端服务只能指定一个协议,您不能指定次要协议来作为后备。

哪种协议有效取决于负载均衡器的类型,或者您是否使用 Traffic Director。

表格:后端协议
产品 后端服务协议选项
应用负载均衡器 HTTP、HTTPS、HTTP/2
代理网络负载均衡器

TCP 或 SSL

区域级代理网络负载均衡器仅支持 TCP。

直通式网络负载均衡器 TCP、UDP 或 UNSPECIFIED
Traffic Director HTTP、HTTPS、HTTP/2、gRPC、TCP

更改后端服务的协议,会使后端在几分钟的时间里无法通过负载均衡器访问。

在负载均衡器和后端之间进行的加密

如需了解负载均衡器和后端之间的加密,请参阅到后端的加密

流量分配

后端行为的某些方面由后端服务资源中以下字段的值决定:

  • 平衡模式定义了负载均衡器如何为新请求或连接衡量后端就绪情况。
  • 目标容量,用于定义目标最大连接数、目标最大速率或目标最大 CPU 利用率。
  • 容量扩缩器,可调整总体可用容量,而无需修改目标容量。

均衡模式

均衡模式确定负载均衡器的后端或 Traffic Director 是可以处理额外的流量还是已完全加载。Google Cloud 有三种均衡模式:

  • CONNECTION:根据后端可以处理的连接总数确定负载的分配方式。
  • RATE:每秒的目标请求次数 (RPS) 或查询次数 (QPS) 上限。如果所有后端都达到或超过容量,则实际 RPS/QPS 可以超过目标 RPS/QPS 上限。
  • UTILIZATION:根据实例组中的实例利用率来确定负载的分配方式。

适用于每种负载均衡器的均衡模式

在后端服务中添加后端时可设置均衡模式。负载均衡器可用的均衡模式取决于负载均衡器的类型和后端的类型。

直通式网络负载均衡器需要采用 CONNECTION 均衡模式,但不支持设置任何目标容量

应用负载均衡器对于实例组后端支持 RATEUTILIZATION 均衡模式,对于具有 GCE_VM_IP_PORT 端点的可用区级 NEG 支持 RATE 均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT 端点)支持 RATE 均衡模式。 对于任何其他类型的受支持的后端,必须省略均衡模式。

  • 对于传统应用负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量确定)来选择区域。然后,在某个区域内,使用均衡模式的目标容量计算要发送到该区域中的每个后端的请求数的比例。然后,请求或连接会在后端的实例或端点之间以轮询方式分配。
  • 对于全球外部应用负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量,根据负载均衡模式的目标容量选择区域。在一个区域内,使用均衡模式的目标容量计算要发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以通过服务负载均衡政策 (serviceLbPolicy) 和“首选后端”设置来选择区域内的任何特定后端。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy) 会确定流量如何分配到实例组内的实例或端点。
  • 对于区域级外部应用负载均衡器、区域级内部应用负载均衡器和跨区域内部应用负载均衡器,使用均衡模式的目标容量计算要发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy) 会确定流量如何分配到组内的实例或端点。 只有跨区域内部应用负载均衡器支持使用服务负载均衡政策 (serviceLbPolicy)首选后端设置,以影响一个区域内任何特定后端的选择。

代理网络负载均衡器对于虚拟机实例组后端支持 CONNECTIONUTILIZATION 均衡模式,对于具有 GCE_VM_IP_PORT 端点的可用区级 NEG 支持 CONNECTION 均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT 端点)支持 CONNECTION 均衡模式。对于任何其他类型的受支持的后端,必须省略均衡模式。

  • 对于全球外部代理网络负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量)来选择区域。在一个区域内,系统会使用均衡模式的目标容量来计算应发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以使用服务负载均衡政策 (serviceLbPolicy) 和首选后端设置来影响一个区域内任何特定后端的选择。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy) 会确定流量如何分配到实例组内的实例或端点。

  • 对于跨区域内部代理网络负载均衡器,系统会首先选择已配置的区域。在一个区域内,系统会使用均衡模式的目标容量来计算应发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以使用服务负载均衡政策 (serviceLbPolicy) 和首选后端设置来影响一个区域内任何特定后端的选择。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy) 会确定流量如何分配到实例组内的实例或端点。

  • 对于传统代理网络负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量)来选择区域。然后,系统会在某个区域内使用负载均衡模式的目标容量来计算传送至该区域中每个后端(实例组或 NEG)的请求或连接数的比例。在负载均衡器选择后端后,系统会在每个后端中的虚拟机实例或网络端点之间以轮循方式分配请求或连接。

  • 对于区域级外部代理网络负载均衡器和区域级内部代理网络负载均衡器,系统会使用负载均衡模式的目标容量来计算应发送到每个后端(实例组或 NEG)的请求数量的比例。在每个实例组或 NEG 中,负载均衡政策 (localityLbPolicy) 会确定流量如何分配到实例组内的实例或端点。

下表汇总了每个负载均衡器和后端组合可用的负载均衡模式。

表格:适用于每个负载均衡器的均衡模式
负载均衡器 后端 可用的均衡模式
应用负载均衡器 实例组 RATEUTILIZATION
可用区级 NEG(GCE_VM_IP_PORT 端点) RATE
混合 NEG(NON_GCP_PRIVATE_IP_PORT 端点) RATE
  • 全局外部代理网络负载均衡器
  • 传统代理网络负载均衡器
  • 区域外部代理网络负载均衡器
  • 区域级内部代理网络负载均衡器
  • 跨区域内部代理网络负载均衡器
实例组 CONNECTIONUTILIZATION
可用区级 NEG(GCE_VM_IP_PORT 端点) CONNECTION

混合 NEG(NON_GCP_PRIVATE_IP_PORT 端点)

CONNECTION
直通式网络负载均衡器 实例组 CONNECTION
可用区级 NEG(GCE_VM_IP 端点) CONNECTION

如果与后端服务相关联的所有虚拟机的平均利用率低于 10%,则 Google Cloud 可能会首选特定区域。当您使用区域级代管式实例组、不同可用区中的可用区级代管式实例组以及可用区级非代管式实例组时,可能会发生这种情况。随着发送到负载均衡器的流量越来越多,这种区域不均衡问题会自动得以解决。

如需了解详情,请参阅 gcloud compute backend-services add-backend

目标容量

每个均衡模式都有一个对应的目标容量,用于定义下列目标最大值之一:

  • 连接数
  • 费率
  • CPU 占用率

对于每种均衡模式,目标容量都不是断路器。在某些情况下,负载均衡器将超过最大值,例如在所有后端虚拟机或端点都已达到最大值的情况下。

连接均衡模式

对于 CONNECTION 均衡模式,目标容量可定义目标最大开放连接数。除了内部直通网络负载均衡器和外部直通网络负载均衡器之外,您必须使用以下某一设置来指定目标连接数上限:

  • max-connections-per-instance(每个虚拟机):单个虚拟机的目标平均连接数。
  • max-connections-per-endpoint(每个可用区 NEG 中的端点):单个端点的目标平均连接数。
  • max-connections(每个可用区 NEG 和可用区实例组):整个 NEG 或实例组的目标平均连接数。 对于区域代管式实例组,请改用 max-connections-per-instance

下表显示了目标容量参数如何定义以下内容:

  • 整个后端的目标容量
  • 每个实例或端点的预期目标容量
表格:使用 CONNECTION 均衡模式的后端的目标容量
后端类型 目标容量
如果您指定 整个后端容量 每个实例或每个端点的预期容量
实例组
N 实例,
H 运行状况良好
max-connections-per-instance=X X × N (X × N)/H
可用区 NEG
N 端点,
H 运行状况良好
max-connections-per-endpoint=X X × N (X × N)/H
实例组
(区域代管式实例组除外)

H 运行状况良好的实例
max-connections=Y Y Y/H

如图所示,max-connections-per-instancemax-connections-per-endpoint 设置是代理,它用于计算整个虚拟机实例组或整个可用区 NEG 的目标连接数上限:

  • 在包含 N 实例的虚拟机实例组中,设置 max-connections-per-instance=X 的含义与设置 max-connections=X × N 相同。
  • 在具有 N 端点的可用区 NEG 中,设置 max-connections-per-endpoint=X 的含义与设置 max-connections=X × N 相同。

速率均衡模式

对于 RATE 均衡模式,您必须使用以下参数之一定义目标容量:

  • max-rate-per-instance(每个虚拟机):为单个虚拟机提供目标平均 HTTP 要求率。
  • max-rate-per-endpoint(可用区级 NEG 中的每个端点):提供单个端点的目标平均 HTTP 请求速率。
  • max-rate(每个可用区 NEG 和可用区实例组):为整个 NEG 或实例组提供目标平均 HTTP 要求率。 对于区域代管式实例组,请改用 max-rate-per-instance

下表显示了目标容量参数如何定义以下内容:

  • 整个后端的目标容量
  • 每个实例或端点的预期目标容量
表格:使用 RATE 均衡模式的后端的目标容量
后端类型 目标容量
如果您指定 整个后端容量 每个实例或每个端点的预期容量
实例组
N 实例,
H 运行状况良好
max-rate-per-instance=X X × N (X × N)/H
可用区 NEG
N 端点,
H 运行状况良好
max-rate-per-endpoint=X X × N (X × N)/H
实例组
(区域代管式实例组除外)

H 运行状况良好的实例
max-rate=Y Y Y/H

如图所示,max-rate-per-instancemax-rate-per-endpoint 设置是代理,它用于计算整个实例组或整个可用区 NEG 的 HTTP 请求的目标上限:

  • 在包含 N 实例的实例组中,设置 max-rate-per-instance=X 的含义与设置 max-rate=X × N 相同。
  • 在具有 N 端点的可用区 NEG 中,设置 max-rate-per-endpoint=X 的含义与设置 max-rate=X × N 相同。

利用率均衡模式

UTILIZATION 均衡模式没有强制的目标容量。您有多种选项取决于后端类型,如下一部分中的表格所示。

max-utilization 目标容量只能按实例组指定,并且不能应用于组中的特定虚拟机。

UTILIZATION 均衡模式没有强制的目标容量。使用 Google Cloud 控制台将后端实例组添加到后端服务时,如果选择了 UTILIZATION 均衡模式,Google Cloud 控制台会将 max-utilization 的值设置为 0.8 (80%)。除了 max-utilization 之外,UTILIZATION 均衡模式还支持更复杂的目标容量,如下一部分表中所述。

更改负载均衡器的平衡模式

对于某些负载均衡器或负载均衡器配置,您无法更改均衡模式,因为后端服务可能只有一种均衡模式。对于其他负载均衡器,您可以更改均衡模式,因为那些后端服务可以使用多个模式。

如需查看每个负载均衡器支持的均衡模式,请参阅表格:每个负载均衡器可用的均衡模式

均衡模式和目标容量设置

此表总结了针对给定负载均衡器和后端类型的所有可能的均衡模式。它还显示了您必须使用均衡模式指定的可用或必需的容量设置。

表格:均衡模式的目标容量规范
负载均衡器 后端类型 均衡模式 目标容量
  • 应用负载均衡器
  • Traffic Director
实例组 RATE 必须指定以下其中一项:
  • 每个可用区级实例组的 max-rate
  • max-rate-per-instance
     (可用区级或区域级实例组)
UTILIZATION 您可以选择指定以下其中一项:
  • (1) max-utilization
  • (2) 每个可用区级实例组的 max-rate
  • (3) max-rate-per-instance
     (可用区级或区域级实例组)
  • (1) 和 (2) 组合在一起
  • (1) 和 (3) 组合在一起
可用区级 NEG (GCP_VM_IP_PORT) RATE 必须指定以下其中一项:
  • 每个可用区级 NEG 的 max-rate
  • max-rate-per-endpoint
混合 NEG (NON_GCP_PRIVATE_IP_PORT) RATE 必须指定以下其中一项:
  • 每个混合 NEG 的 max-rate
  • max-rate-per-endpoint
  • 全局外部代理网络负载均衡器
  • 传统代理网络负载均衡器
  • 区域外部代理网络负载均衡器
  • 区域级内部代理网络负载均衡器
  • 跨区域内部代理网络负载均衡器
实例组 CONNECTION 必须指定以下其中一项:
  • 每个可用区实例组的 max-connections
  • max-connections-per-instance  (可用区性或区域性实例组)
UTILIZATION 您可以选择指定以下其中一项:
  • (1) max-utilization
  • (2) 每个可用区实例组的 max-connections
  • (3) max-connections-per-instance
     (可用区性或区域性实例组)
  • (1) 和 (2) 组合在一起
  • (1) 和 (3) 组合在一起
可用区级 NEG (GCP_VM_IP_PORT) CONNECTION 必须指定以下其中一项:
  • 每个可用区 NEG 的 max-connections
  • max-connections-per-endpoint

混合 NEG (NON_GCP_PRIVATE_IP_PORT)

CONNECTION 必须指定以下其中一项:
  • 每个混合 NEG 的 max-connections
  • max-connections-per-endpoint
直通式网络负载均衡器 实例组 CONNECTION 您不能指定目标连接数上限。
可用区级 NEG (GCP_VM_IP) CONNECTION 您不能指定目标连接数上限。

容量扩缩器

使用容量扩缩器扩缩目标容量(最大利用率、最大速率或最大连接数),而无需更改目标容量。

对于 Google Cloud 参考文档,请参阅以下内容:

您可以调整容量扩缩器以扩缩有效目标容量,而无需明确更改其中一个 --max-* 参数。

您可以将容量扩缩器设置为以下任一值:

  • 默认值为 1,表示该组达到其配置容量的 100%(取决于 balancingMode)。
  • 0 表示实例组已完全排空,提供 0% 的可用容量。如果只有一个后端挂接到后端服务,则无法配置 0 设置。
  • 一个介于 0.1 (10%) 到 1.0 (100%) 之间的值。

以下示例演示了容量调节器如何与目标容量设置搭配使用:

  • 如果均衡模式是 RATEmax-rate 设置为 80 RPS,且容量扩缩器为 1.0,则可用容量也是 80 RPS。

  • 如果均衡模式是 RATEmax-rate 设置为 80 RPS,且容量扩缩器为 0.5,则可用容量为 40 RPS (0.5 times 80)。

  • 如果均衡模式是 RATEmax-rate 设置为 80 RPS,且容量扩缩器为 0.0,则可用容量为零 (0)。

服务负载均衡政策

服务负载均衡政策 (serviceLbPolicy) 是与负载均衡器的后端服务关联的资源。您可通过该政策来自定义一些参数,以控制如何在与某一后端服务关联的各个后端中分配流量:

  • 自定义负载均衡算法,以确定如何在各区域或可用区之间分配流量。
  • 启用自动容量排空,以便负载均衡器可以快速排空健康状况不佳的后端中的流量。

此外,您还可以将特定后端指定为“首选后端”。在这些后端的容量(即后端的均衡模式指定的目标容量)满之前,系统不会将请求发送到其余的后端。

如需了解详情,请参阅通过服务负载均衡政策优化高级负载均衡功能

Traffic Director 和流量分配

Traffic Director 也会使用后端服务资源。具体来说,Traffic Director 使用负载均衡方案为 INTERNAL_SELF_MANAGED 的后端服务。对于内部自行管理的后端服务,流量分配依据负载均衡模式和负载均衡政策的组合。后端服务根据后端的均衡模式将流量定向到后端。然后,Traffic Director 根据负载均衡政策分配流量。

内部自行管理的后端服务支持以下均衡模式:

  • UTILIZATION(如果所有后端都是实例组)
  • RATE(如果所有后端都是实例组或可用区级 NEG)

如果您选择 RATE 均衡模式,则必须指定最大速率、每个实例的最大速率或每个端点的最大速率。

如需详细了解 Traffic Director,请参阅 Traffic Director 概念

后端子集

后端子集化是一项可选功能,通过为每个代理实例分配后端子集来提高性能和可扩缩性。

以下服务支持后端子集化:

  • 区域级内部应用负载均衡器
  • 内部直通式网络负载均衡器

区域级内部应用负载均衡器的后端子集化

跨区域内部应用负载均衡器不支持后端子集化。

对于区域级内部应用负载均衡器,后端子集化会自动仅将区域级后端服务中的后端子集分配给每个代理实例。默认情况下,每个代理实例都会打开与后端服务中所有后端的连接。如果代理实例和后端的数量都较大,那么打开与所有后端的连接便可能会导致性能问题。

启用子集化后,每个代理仅会开放与部分后端的连接,从而减少与每个后端保持开放的连接数。减少每个后端同时打开的连接数可以提高后端和代理的性能。

下图展示了包含两个代理的负载均衡器。如果没有后端子集化,来自这两个代理的流量便会分配到后端服务 1 中的所有后端。 启用后端子集化后,来自每个代理的流量将分配到后端子集。来自代理 1 的流量会分配到后端 1 和 2,来自代理 2 的流量则分配到后端 3 和 4。

比较使用和不使用后端子集化的内部应用负载均衡器。
比较使用和不使用后端子集化的内部应用负载均衡器(点击可放大)。

此外,您还可以设置 localityLbPolicy 政策,优化流向后端的负载均衡流量。如需了解详情,请参阅流量政策

如需了解如何为内部应用负载均衡器设置后端子集化,请参阅配置后端子集化

对内部应用负载均衡器使用后端子集化相关的注意事项
  • 虽然后端子集化旨在确保所有后端实例都得到充分利用,但它可能会为每个后端接收的流量引入一些偏差。对于对后端负载均衡敏感的后端服务,建议将 localityLbPolicy 设置为 LEAST_REQUEST
  • 启用并稍后停用子集会破坏现有连接。
  • 后端子集化要求会话亲和性为 NONE(5 元组哈希)。只有在后端子集化已停用的情况下才能使用其他会话亲和性选项。--subsetting-policy--session-affinity 标志的默认值都是 NONE,并且一次只能将其中一个设置为不同的值。

内部直通式网络负载均衡器的后端子集化

借助内部直通式网络负载均衡器的后端子集化,您可以扩缩内部直通网络负载均衡器以支持每项内部后端服务的更多后端虚拟机实例。

如需了解子集如何影响此限制,请参阅负载均衡资源配额和限制的“后端服务”部分

默认情况下,子集功能会停用,这会将后端服务的分配范围限制为最多 250 个后端实例或端点。如果后端服务需要支持超过 250 个后端,您可以启用子集。启用子集后,系统将为每个客户端连接选择一个后端实例子集。

下图显示了两种操作模式之间的差异的缩减模型。

比较使用和不使用子集化的内部直通式网络负载均衡器。
比较使用和不使用子集化的内部直通式网络负载均衡器(点击可放大)。

如果没有子集,系统将更好地利用一组健康的后端,并根据流量分配在所有健康的后端之间分配新的客户端连接。这种子集存在负载均衡限制,但允许负载均衡器支持超过 250 个后端。

如需了解配置说明,请参阅子集

对内部直通式网络负载均衡器的后端子集化相关的注意事项
  • 启用子集设置后,即使后端数量较小,也并非所有后端都能接收来自给定发送者的流量。
  • 如需了解启用子集时的最大后端实例数,请参阅配额页面
  • 子集化仅支持 5 元组会话亲和性
  • 子集化不支持数据包镜像。
  • 启用并稍后停用子集会破坏现有连接。
  • 如果本地客户端需要访问内部直通网络负载均衡器,则子集化可以显著减少从本地客户端接收连接的后端数量。这是因为 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接的区域决定了负载均衡器后端的子集。特定区域中的所有 Cloud VPN 和 Cloud Interconnect 端点使用相同的子集。不同的子集用于不同的区域。
  • 您不能使用 UNSPECIFIED 后端服务协议。

后端子集化价格

使用后端子集化无需付费。如需了解详情,请参阅所有网络流量价格

会话亲和性

借助会话亲和性,您可以控制负载均衡器如何采用可预测的方式为新连接选择后端,前提是健康状况良好的后端数量保持不变。这对于需要将给定用户发出的多个请求定向到同一个后端或端点的应用非常有用。此类应用通常包括广告投放、游戏或具有大量内部缓存的服务所使用的有状态服务器。

Google Cloud 负载均衡器会尽最大努力提供会话亲和性。更改后端健康检查状态、添加或移除后端或者更改后端完整度的因素(以平衡模式衡量)可能会破坏会话亲和性。

当唯一连接有“合理大量”的分布时,具有会话亲和性的负载均衡很实用。“合理大量”是指至少是后端数量的几倍。使用少量连接测试负载均衡器不能准确地表示客户端连接在后端之间的分配。

默认情况下,所有 Google Cloud 负载均衡器都使用五元组哈希 (--session-affinity=NONE) 来选择后端,如下所示:

  • 数据包的来源 IP 地址
  • 数据包的来源端口(如果位于数据包的标头中)
  • 数据包的目标 IP 地址
  • 数据包的目的地端口(如果数据包的标头中出现)
  • 数据包的协议

对于直通式负载均衡器,新连接会分配到运行状况良好的后端实例或端点(如果配置了故障切换政策,则选择活跃池中的后端实例或端点)。您可以控制以下各项:

对于基于代理的负载均衡器,只要运行状况良好的后端实例或端点的数量保持不变,并且之前选择的后端实例或端点未达到容量上限,后续请求或连接将转到同一个后端虚拟机或端点。均衡模式的目标容量决定了后端达到容量上限的条件。

下表显示了每个产品支持的会话亲和性选项:

表格:受支持的会话亲和性设置
产品 会话粘性选项
  • 无 (NONE)
  • 客户端 IP (CLIENT_IP)
  • 生成的 Cookie (GENERATED_COOKIE)
  • 标头字段 (HEADER_FIELD)
  • HTTP Cookie (HTTP_COOKIE)

另外还需注意以下事项:

  • 负载均衡位置政策 (localityLbPolicy) 的有效默认值会根据您的会话亲和性设置而变化。如果未配置会话亲和性(也就是说,如果会话亲和性保持为默认值 NONE),则 localityLbPolicy 的默认值为 ROUND_ROBIN。如果会话亲和性设置为 NONE 以外的值,则 localityLbPolicy 的默认值为 MAGLEV
  • 对于全球外部应用负载均衡器,如果您使用加权流量拆分,请勿配置会话亲和性。即使您配置了该选项,也是加权流量拆分配置优先。
传统应用负载均衡器
  • 无 (NONE)
  • 客户端 IP (CLIENT_IP)
  • 生成的 Cookie (GENERATED_COOKIE)
  • 无 (NONE)
  • 客户端 IP (CLIENT_IP)
  • 生成的 Cookie (GENERATED_COOKIE)
  • 标头字段 (HEADER_FIELD)
  • HTTP Cookie (HTTP_COOKIE)

另外还需注意以下事项:

  • 负载均衡位置政策 (localityLbPolicy) 的有效默认值会根据您的会话亲和性设置而变化。如果未配置会话亲和性(也就是说,如果会话亲和性保持为默认值 NONE),则 localityLbPolicy 的默认值为 ROUND_ROBIN。如果会话亲和性设置为 NONE 以外的值,则 localityLbPolicy 的默认值为 MAGLEV
  • 对于内部应用负载均衡器,如果您使用加权流量拆分,请勿配置会话亲和性。即使您配置了该选项,也是加权流量拆分配置优先。
内部直通式网络负载均衡器
  • 无 (NONE)
  • 客户端 IP,无目的地 (CLIENT_IP_NO_DESTINATION)
  • 客户端 IP、目的地 IP (CLIENT_IP)
  • 客户端 IP、目的地 IP、协议 (CLIENT_IP_PROTO)
  • 客户端 IP、客户端端口、目的地 IP、目的地端口、协议 (CLIENT_IP_PORT_PROTO)

如需了解内部直通式网络负载均衡器和会话亲和性的具体信息,请参阅内部直通网络负载均衡器概览

外部直通网络负载均衡器1
  • 无 (NONE)
  • 客户端 IP、目的地 IP (CLIENT_IP)
  • 客户端 IP、目的地 IP、协议 (CLIENT_IP_PROTO)
  • 客户端 IP、客户端端口、目的地 IP、目的地端口、协议 (CLIENT_IP_PORT_PROTO)

如需了解外部直通网络负载均衡器和会话亲和性的具体信息,请参阅外部 TCP/UDP 直通网络负载均衡器概览

  • 全局外部代理网络负载均衡器
  • 传统代理网络负载均衡器
  • 区域外部代理网络负载均衡器
  • 区域级内部代理网络负载均衡器
  • 跨区域内部代理网络负载均衡器
  • 无 (NONE)
  • 客户端 IP (CLIENT_IP)
Traffic Director
  • 无 (NONE)
  • 客户端 IP (CLIENT_IP)
  • 生成的 Cookie (GENERATED_COOKIE)(仅限 HTTP 协议)
  • 标头字段 (HEADER_FIELD)(仅限 HTTP 协议)
  • HTTP Cookie (HTTP_COOKIE)(仅限 HTTP 协议)

如果配置了无代理 gRPC 服务,Traffic Director 不支持会话亲和性。

1 此表记录基于后端服务的外部直通网络负载均衡器支持的会话亲和性。基于目标池的外部直通网络负载均衡器不使用后端服务。您需要通过目标池中的 sessionAffinity 参数为外部直通网络负载均衡器设置会话亲和性。

配置会话亲和性时请注意以下几点:

  • 为进行身份验证或为了安全起见,请勿依赖会话亲和性。会话亲和性设计为在服务后端和运行状况良好的后端数量发生变化时被破坏。导致破坏会话亲和性的活动包括:

    • 将后端实例组或 NEG 添加到后端服务
    • 从后端服务中移除后端实例组或 NEG
    • 将实例添加到现有后端实例组(当您通过代管式实例组启用自动扩缩时,此过程会自动发生)
    • 从现有后端实例组中移除实例(在您通过代管式实例组启用自动扩缩功能时,此过程会自动发生)
    • 将端点添加到现有后端 NEG
    • 从现有后端 NEG 中移除端点
    • 当运行状况良好的后端未通过健康检查并且变得运行状况不佳时
    • 当运行状况不佳的后端通过其健康检查并且恢复正常时
    • 对于直通式负载均衡器:在故障切换和故障恢复期间,如果配置了故障切换政策
    • 对于代理负载均衡器:当后端达到或超过容量时
  • 不建议将 None 以外的会话亲和性与 UTILIZATION 平衡模式一起使用。这是因为实例利用率的更改可能会导致负载均衡服务将新请求或连接定向到不太完整的后端虚拟机。这会破坏会话亲和性。请改用 RATECONNECTION 平衡模式,以降低破坏会话亲和性的可能性。 如需了解详情,请参阅失去会话亲和性

  • 对于外部和内部 HTTP(S) 负载均衡器,当预期端点或实例超出其均衡模式的目标最大值时,会话亲和性可能会被破坏。请思考以下示例:

    • 一个负载均衡器有一个 NEG 和三个端点。
    • 每个端点的目标容量为 1 RPS。
    • 均衡模式为 RATE
    • 目前,每个端点分别处理 1.1、0.8 和 1.6 RPS。
    • 当最后一个端点具有亲和性的 HTTP 请求到达负载均衡器时,会话亲和性会声明以 1.6 RPS 处理的端点。
    • 新请求可能会发送到 RPS 为 0.8 的中间端点。
  • --session-affinity--subsetting-policy 标志的默认值都是 NONE,并且一次只能将其中一个设置为不同的值。

以下几个部分介绍了不同类型的会话亲和性。

客户端 IP、无目标亲和性

“客户端 IP、无目标亲和性”(CLIENT_IP_NO_DESTINATION) 会将来自同一客户端来源 IP 地址的请求定向到同一个后端实例。

使用“客户端 IP、无目标亲和性”时,请注意以下几点:

  • “客户端 IP、无目标亲和性”是一个由客户端的来源 IP 地址组成的元组哈希。

  • 如果客户端从一个网络切换到另一个网络,其 IP 地址会发生变化,导致粘性被破坏。

“客户端 IP、无目标亲和性”只是内部直通网络负载均衡器的一个选项。

客户端 IP 亲和性

客户端 IP 地址亲和性 (CLIENT_IP) 会将来自同一客户端 IP 地址的请求定向到同一个后端实例。客户端 IP 地址亲和性适用于所有使用后端服务的 Google Cloud 负载均衡器。

使用客户端 IP 亲和性时,请注意以下几点:

  • 客户端 IP 亲和性是一个二元组哈希,由客户端的 IP 地址以及客户端连接的负载均衡器转发规则的 IP 地址组成。

  • 如果原始客户端位于 NAT 后面或通过代理发出请求,则负载均衡器看到的客户端 IP 地址可能不是原始客户端。通过 NAT 或代理发出的请求会将 NAT 路由器或代理的 IP 地址用作客户端 IP 地址。这会导致传入的流量无谓汇集到同一个后端实例上。

  • 如果客户端从一个网络切换到另一个网络,其 IP 地址会发生变化,导致粘性被破坏。

如需了解哪些产品支持客户端 IP 亲和性,请参阅表格:受支持的会话亲和性设置

如果设置了生成的 Cookie 亲和性,则负载均衡器会针对第一个请求发出一个 Cookie。对于具有相同 Cookie 的每个后续请求,负载均衡器会将请求定向到同一个后端虚拟机或端点。

  • 对于全球外部应用负载均衡器,Cookie 名为 GCLB
  • 对于区域级外部应用负载均衡器、内部应用负载均衡器和 Traffic Director,Cookie 名为 GCILB

与基于客户端 IP 地址的亲和性相比,基于 Cookie 的亲和性可更准确地识别负载均衡器的客户端。例如:

  1. 使用基于 Cookie 的亲和性时,负载均衡器可以唯一标识共享同一来源 IP 地址的两个或更多客户端系统。使用基于客户端 IP 地址的亲和性,负载均衡器会处理来自同一来源 IP 地址的所有连接,就像它们来自同一客户端系统一样。

  2. 如果客户端更改其 IP 地址,则基于 Cookie 的亲和性可让负载均衡器识别来自该客户端的后续连接,而不是将此连接视为新连接。例如,当移动设备从一个网络切换到另一个网络时,客户端会更改其 IP 地址。

在负载均衡器为基于生成的 Cookie 亲和性创建一个 Cookie 时,它会将该 Cookie 的 path 特性设置为 /。 如果网址映射的路径匹配器具有一个主机名的多个后端服务,则所有后端服务会共用同一个会话 Cookie。

负载平衡器生成的 HTTP Cookie 的生命周期是可配置的。您可以将该生命周期设置为 0(默认值,这意味着 Cookie 只是会话 Cookie)。也可以将 Cookie 的生命周期设置为一个介于 186400 秒(24 小时)之间的值(含边界值)。

如需了解哪些产品支持生成的 Cookie 亲和性,请参阅表格:受支持的会话亲和性设置

标头字段亲和性

在同时满足以下两个条件时,Traffic Director 和内部应用负载均衡器可以使用标头字段亲和性:

  • 负载均衡位置政策是 RING_HASH 或 MAGLEV。
  • 后端服务的 consistentHash 指定 HTTP 标头的名称 (httpHeaderName)。

如需了解哪些产品支持标头字段亲和性,请参阅表格:受支持的会话亲和性设置

Traffic Director、全球外部应用负载均衡器、区域级外部应用负载均衡器、全球外部代理网络负载均衡器、区域级外部代理网络负载均衡器、跨区域内部应用负载均衡器和区域级内部应用负载均衡器在同时满足以下两个条件时可以使用 HTTP Cookie 亲和性:

  • 负载均衡位置政策是 RING_HASH 或 MAGLEV。
  • 后端服务的一致性哈希指定 HTTP Cookie 的名称。

HTTP Cookie 亲和性根据 HTTP_COOKIE 标志中指定的 HTTP Cookie,将请求路由到 NEG 中的后端虚拟机或端点。如果客户端未提供 Cookie,则代理会生成 Cookie 并通过 Set-Cookie 标头将其返回给客户端。

如需了解哪些产品支持 HTTP Cookie IP 亲和性,请参阅表格:受支持的会话亲和性设置

失去会话亲和性

无论选择哪种类型的亲和性,在以下情况下,客户端都可能会失去与后端的亲和性:

  • 如果后端实例组或可用区级 NEG 的容量不足(根据均衡模式的目标容量定义)。在这种情况下,Google Cloud 会将流量定向到可能位于不同区域的其他后端实例组或可用区级 NEG。为解决此问题,请务必根据自己的测试为每个后端指定正确的目标容量。
  • 自动扩缩功能会向代管实例组添加实例或从中移除实例。发生这种情况时,实例组中的实例数量会发生变化,因此后端服务会为会话亲和性重新计算哈希值。为解决此问题,请确保代管实例组的最小大小可以应对典型负载。仅当负载意外增加时,系统才会执行自动扩缩功能。
  • 如果 NEG 中的后端虚拟机或端点未通过健康检查,则负载均衡器会将流量定向到其他健康状况良好的后端。如需详细了解当所有后端都未通过健康检查时负载均衡器如何应对,请参阅每个 Google Cloud 负载均衡器对应的文档。
  • UTILIZATION 均衡模式适用于后端实例组时,会话亲和性会因后端利用率的变化而被破坏。您可以使用 RATECONNECTION 均衡模式(具体取决于负载均衡器类型支持哪种模式)来解决此问题。

使用外部应用负载均衡器或外部代理网络负载均衡器时,请额外注意以下几点:

  • 如果从互联网上的客户端到 Google 的路由路径在请求或连接之间发生变化,则系统可能会选择其他 Google Front End (GFE) 前端作为代理。这可能会破坏会话亲和性。
  • 当您使用 UTILIZATION 均衡模式时(尤其是未定义目标最大容量时),如果负载均衡器的流量较低,会话亲和性可能会被破坏。请切换到所选负载均衡器支持的 RATECONNECTION 均衡模式。

后端服务超时

大多数 Google Cloud 负载均衡器都具有后端服务超时。默认值是 30 秒。 允许的超时值的完整范围为 1 - 2,147,483,647 秒。

  • 对于使用 HTTP、HTTPS 或 HTTP/2 协议的外部应用负载均衡器和内部应用负载均衡器,后端服务超时为 HTTP(S) 流量的请求和响应超时。

    如需详细了解每个负载均衡器的后端服务超时,请参阅以下内容:

    • 对于全球外部应用负载均衡器和区域级外部应用负载均衡器,请参阅超时和重试
    • 对于内部应用负载均衡器,请参阅超时和重试
  • 对于外部代理网络负载均衡器,超时为空闲超时。如需在删除连接之前允许更多或更少时间,请更改超时值。此空闲超时也用于 WebSocket 连接。

  • 对于内部直通式网络负载均衡器和外部直通网络负载均衡器,您可以使用 gcloud 或 API 设置后端服务超时的值,但系统会忽略该值。后端服务超时对于这些直通负载均衡器没有任何意义。

  • 对于 Traffic Director,无代理 gRPC 服务不支持后端服务超时字段(使用 timeoutSec 指定)。对于此类服务,请使用 maxStreamDuration 字段配置后端服务超时。这是因为 gRPC 不支持 timeoutSec 的语义,该函数指定了在发出请求后等待后端返回完整响应的时间。gRPC 的超时指定了从数据流开头直到响应完全处理的时间(包括所有重试)。

健康检查

后端为实例组或可用区级 NEG 的每个后端服务都必须进行相关的健康检查。使用无服务器 NEG 或全球互联网 NEG 作为后端的后端服务不得引用健康检查。

如果使用 Google Cloud 控制台创建负载均衡器,您可以在创建负载均衡器时创建健康检查(如果需要),也可以引用现有健康检查。

当您通过 Google Cloud CLI 或 API 创建使用实例组或可用区 NEG 后端的后端服务时,必须引用现有健康检查。如需详细了解所需健康检查的类型和范围,请参阅“健康检查概览”中的负载均衡器指南

如需了解详情,请参阅以下文档:

在后端服务资源上启用的额外功能

某些后端服务支持以下可选功能。

Cloud CDN

Cloud CDN 使用 Google 的全球边缘网络,在更靠近用户的位置传送内容,从而为您的网站和应用提速。全球外部应用负载均衡器使用的后端服务已启用 Cloud CDN。负载均衡器提供了用于接收请求的前端 IP 地址和端口以及用于响应这些请求的后端。

如需了解详情,请参阅 Cloud CDN 概览

Google Cloud Armor

如果您使用以下某个负载均衡器,则可以通过在创建负载均衡器期间在后端服务上启用 Google Cloud Armor 来为应用增加额外的保护:

如果您使用 Google Cloud 控制台,则可以执行以下操作之一:

  • 选择现有的 Google Cloud Armor 安全政策
  • 接受包含可自定义的名称、请求计数、间隔时间、键和速率限制参数的默认 Google Cloud Armor 速率限制安全政策的配置。如果您将 Google Cloud Armor 与上游代理服务(例如 CDN 提供商)搭配使用,则应将 Enforce_on_key 设置为 XFF IP 地址。
  • 通过选择来选择停用 Google Cloud Armor 保护。

流量管理功能

只有部分产品支持以下功能:

以下负载均衡器支持这些功能:

  • 全球外部应用负载均衡器(不支持熔断)
  • 区域级外部应用负载均衡器
  • 跨区域内部应用负载均衡器
  • 区域级内部应用负载均衡器
  • Traffic Director(但无代理 gRPC 服务不提供此支持)

API 与 gcloud 参考文档

如需详细了解后端服务资源的属性,请参阅以下参考文档:

后续步骤

如需获得说明如何在负载均衡中使用后端服务的相关文档和信息,请查看以下内容:

对于相关视频: