设置会话亲和性(服务)

本页面介绍了如何为 Cloud Run 服务修订版本启用会话亲和性。

会话亲和性的工作原理

默认情况下,会话亲和性不启用,因此来自同一客户端的请求可能会由不同的实例处理,如下所示:图片

如果您启用会话亲和性,则 Cloud Run 会将给定客户端的依序请求路由到同一修订版本实例。Cloud Run 会使用 TTL 为 30 天的会话亲和性 Cookie,并检查其值以识别由同一客户端发出的多个请求,并将所有这些请求定向到同一实例,如下所示:图片

需要加以注意的关键行为

如上图所示,如果启用会话亲和性,客户端将访问同一个实例。但请注意,该实例可以接收来自不同客户端的请求。启用会话亲和性并不意味着该实例只能专用于一个客户端。

由于 Cloud Run 的自动扩缩行为,会话亲和性会尽最大努力实现亲和性。如果实例因任何原因终止,或者达到最大请求并发数或最大 CPU 利用率,则会话亲和性会遭到破坏,并且系统会将其他请求路由到其他实例。

虽然您可以在实例的内存中缓存客户端会话数据,但您不能假设客户端始终重新连接到同一实例,即使启用了会话亲和性也是如此。

Cloud Load Balancing 会话亲和性和 Cloud Run 会话亲和性是会话亲和性的两种独立实现。您可以在 Cloud Run 服务上启用 Cloud Run 的会话亲和性,即使该服务位于负载均衡器后面也是如此。不过,您不应在无服务器网络端点组中启用 Cloud Load Balancing 会话亲和性,因为它不受支持。

会话亲和性和流量拆分

您可以在修订版本级层启用或停用会话亲和性。如果您在 Cloud Run 修订版本上启用了会话亲和性,并且还使用流量拆分,则会话亲和性优先于任何流量拆分。在极端情况下,如果使用会话亲和性的单个客户端负责所有请求的绝大部分,则无论流量拆分配置如何,所有这些请求都可以路由到给定修订版本。

如果您为修订版本启用了流量拆分(其中部分修订版本启用了会话亲和性,部分修订版本未启用会话亲和性),则结果是请求会逐步转移到启用了会话亲和性的修订版本,即使您未明确更改流量拆分配置也是如此。这是因为每个未附加会话亲和性 Cookie 的请求都受随机分块的影响,其中部分请求最终会分配给具有会话亲和性的修订版本,随后这些请求会保留在此特定修订版本。

更新 Cloud Run 服务的流量拆分配置时,附加了会话亲和性 Cookie 的后续请求可能会分配给其他修订版本。Cloud Run 会最大限度地减少重定向到新修订版本的客户端数量。

例如,如果服务按 90%/10% 拆分流量,并且流量拆分更新为 80%/20%,则 10% 的流量会重定向到目前在传送 20% 流量的修订版本。

设置会话亲和性

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

您可以在创建新服务部署新修订版本时使用 Google Cloud 控制台、gcloud 命令行或使用 .yaml 文件来设置会话亲和性:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击网络标签页。

    图片

    • 点击“会话亲和性”文本框。
  5. 点击创建部署

gcloud

如需指定会话亲和性,请使用以下命令:

gcloud run services update SERVICE --session-affinity

您需要进行如下替换

  • SERVICE 替换为您要更新的服务的名称。

如需移除会话亲和性,请使用以下命令:

gcloud run services update SERVICE --no-session-affinity

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 添加 run.googleapis.com/sessionAffinity: 注解:

    spec:
     template:
       metadata:
         annotations:
           run.googleapis.com/sessionAffinity: 'BOOL'

    您需要进行如下替换

    • 将“BOOL”设置为“true”值以设置会话亲和性,或替换为“false”以移除会话亲和性。
  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

查看会话亲和性设置

如需查看 Cloud Run 服务的当前会话亲和性设置,请按照以下所述操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,“网络”标签页下列出了会话亲和性设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到会话亲和性设置。