本頁說明如何為 Cloud Run 服務修訂版本啟用工作階段親和性。
工作階段相依性的運作方式
根據預設,工作階段相依性不會啟用,因此來自相同用戶端的要求可能會由不同執行個體處理,如下所示:
啟用工作階段相依性後,Cloud Run 會將特定用戶端的連續要求轉送至相同的修訂版本執行個體。Cloud Run 會使用存留時間為 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:
從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。
按一下 [網路] 分頁標籤。
- 按一下「工作階段親和性」文字方塊。
按一下 [Create] (建立) 或 [Deploy] (部署)。
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
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列項目新增至google_cloud_run_v2_service
資源:resource "google_cloud_run_v2_service" "default" {
name = "cloudrun-service-aff"
location = "REGION"
deletion_protection = false
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
session_affinity = BOOL
}
}
取代:
- REGION 替換成 Google Cloud 地區。例如:
europe-west1
。 - BOOL (值為
true
) 可設定工作階段相依性,false
則可移除工作階段相依性。
查看工作階段相依性設定
如要查看 Cloud Run 服務目前的會期親和性設定:
控制台
前往 Google Cloud 控制台的 Cloud Run:
按一下感興趣的服務,開啟「服務詳細資料」頁面。
按一下「Revisions」(修訂版本) 分頁標籤。
在右側的詳細資料面板中,工作階段親和性設定會列在「Networking」(網路) 分頁下方。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中找出工作階段相依性設定。