設定服務的工作階段相依性

工作階段相依性可讓您將用戶端的連續要求轉送至同一個 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 檔案設定工作階段相依性:

控制台

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run。

  2. 從 Cloud Run 導覽選單中選取「服務」:

    1. 如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開服務設定頁面。

    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

    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 服務目前的工作階段相依性設定,請按照下列步驟操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run 的「Services」(服務) 頁面:

    前往 Cloud Run。

  2. 按一下您感興趣的服務,開啟「Service details」(服務詳細資料) 頁面。

  3. 按一下「網路」分頁標籤查看設定。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出工作階段相依性設定。