本页面介绍了如何为 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 文件来设置会话亲和性:
控制台
在 Google Cloud 控制台中,前往 Cloud Run:
点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。
点击网络标签页。
- 点击“会话亲和性”文本框。
点击创建或部署。
gcloud
如需指定会话亲和性,请使用以下命令:
gcloud run services update SERVICE --session-affinity
您需要进行如下替换
- 将 SERVICE 替换为您要更新的服务的名称。
如需移除会话亲和性,请使用以下命令:
gcloud run services update SERVICE --no-session-affinity
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
添加
run.googleapis.com/sessionAffinity:
注解:spec: template: metadata: annotations: run.googleapis.com/sessionAffinity: 'BOOL'
您需要进行如下替换
- 将“BOOL”设置为“
true
”值以设置会话亲和性,或替换为“false
”以移除会话亲和性。
- 将“BOOL”设置为“
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
查看会话亲和性设置
如需查看 Cloud Run 服务的当前会话亲和性设置,请按照以下所述操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Run:
点击您感兴趣的服务以打开“服务详细信息”页面。
点击修订版本标签页。
在右侧的详细信息面板中,“网络”标签页下列出了会话亲和性设置。
gcloud
使用以下命令:
gcloud run services describe SERVICE
在返回的配置中找到会话亲和性设置。