工作階段相依性可讓您將用戶端的連續要求轉送至同一個 Cloud Run 修訂版本執行個體。將用戶端要求轉送至同一個執行個體,有助於您針對有狀態的工作負載使用記憶體內快取。如果目標執行個體停止,或達到並行或 CPU 限制上限,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」頁面:
從 Cloud Run 導覽選單中選取「服務」:
如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開服務設定頁面。
如要設定現有服務,請按一下該服務。
按一下 [網路] 分頁標籤。
按一下「工作階段相依性」方塊。
按一下「建立」,建立新服務。依序點選「查看差異並重新部署」和「部署變更」,即可更新現有服務。
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
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 的「Services」(服務) 頁面:
按一下您感興趣的服務,開啟「Service details」(服務詳細資料) 頁面。
按一下「網路」分頁標籤查看設定。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中找出工作階段相依性設定。