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

本頁說明如何為 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. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  4. 按一下 [網路] 分頁標籤。

    圖片

    • 按一下「工作階段親和性」文字方塊。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

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

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:

    前往 Cloud Run

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

  3. 按一下「Revisions」(修訂版本) 分頁標籤。

  4. 在右側的詳細資料面板中,工作階段親和性設定會列在「Networking」(網路) 分頁下方。

gcloud

  1. 使用下列指令:

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