本页面介绍了如何为 Cloud Run 服务修订版本启用会话亲和性。
会话亲和性的工作原理
默认情况下,会话亲和性不启用,因此来自同一客户端的请求可能会由不同的实例处理,如下所示:
如果您启用会话亲和性,则 Cloud Run 会将给定客户端的依序请求路由到同一修订版本实例。Cloud Run 会使用 TTL 为 30 天的会话亲和性 Cookie,并检查其值以识别由同一客户端发出的多个请求,并将所有这些请求定向到同一实例,如下所示:
需要加以注意的关键行为
如上图所示,如果启用会话亲和性,客户端将访问同一个实例。但请注意,该实例可以接收来自不同客户端的请求。启用会话亲和性并不意味着该实例只能专用于一个客户端。
由于 Cloud Run 的自动扩缩行为,会话亲和性会尽最大努力实现亲和性。如果实例因任何原因终止,或者达到最大请求并发数或最大 CPU 利用率,则会话亲和性会遭到破坏,并且系统会将其他请求路由到其他实例。
虽然您可以在实例的内存中缓存客户端会话数据,但您不能假设客户端始终重新连接到同一实例,即使启用了会话亲和性也是如此。
如果您使用 Cloud Load Balancing,则 Cloud Run 服务的会话亲和性可以与全球和内部负载均衡器的会话亲和性相结合。
会话亲和性和流量拆分
您可以在修订版本级层启用或停用会话亲和性。如果您在 Cloud Run 修订版本上启用了会话亲和性,并且还使用流量拆分,则会话亲和性优先于任何流量拆分。在极端情况下,如果使用会话亲和性的单个客户端负责所有请求的绝大部分,则无论流量拆分配置如何,所有这些请求都可以路由到给定修订版本。
如果您为修订版本启用了流量拆分(其中部分修订版本启用了会话亲和性,部分修订版本未启用会话亲和性),则结果是请求会逐步转移到启用了会话亲和性的修订版本,即使您未明确更改流量拆分配置也是如此。这是因为每个未附加会话亲和性 Cookie 的请求都受随机分块的影响,其中部分请求最终会分配给具有会话亲和性的修订版本,随后这些请求会保留在此特定修订版本。
更新 Cloud Run 服务的流量拆分配置时,附加了会话亲和性 Cookie 的后续请求可能会分配给其他修订版本。Cloud Run 会最大限度地减少重定向到新修订版本的客户端数量。
例如,如果服务按 90%/10% 拆分流量,并且流量拆分更新为 80%/20%,则 10% 的流量会重定向到目前在传送 20% 流量的修订版本。
设置会话亲和性
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
您可以在创建新服务或部署新修订版本时使用 Google Cloud 控制台、gcloud 命令行或使用 .yaml 文件来设置会话亲和性:
控制台
在 Google Cloud 控制台中,前往 Cloud Run:
如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。
点击网络标签页。
- 点击“会话亲和性”文本框。
点击创建或部署。
命令行
如需指定会话亲和性,请使用以下命令:
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 run services describe SERVICE
在返回的配置中找到会话亲和性设置。