關於服務執行環境

根據預設,Cloud Run 服務不會指定執行環境,因此 Cloud Run 會根據使用的功能選取執行環境。因此,除非您為服務指定執行環境,否則 Cloud Run 可以選取第一代或第二代環境。

請注意,Cloud Run 作業只會使用第二代執行環境,且無法變更。

第一代執行環境的冷啟動速度很快,且可模擬大部分 (但不是全部) 的作業系統呼叫。原本這是 Cloud Run 服務唯一可用的執行環境。

第二代執行環境提供完整的 Linux 相容性,而非系統呼叫模擬。這個執行環境提供:

  • 提升 CPU 效能
  • 網路效能更快,尤其是在封包遺失的情況下
  • 與 Linux 完全相容,包括支援所有系統呼叫、命名空間和 cgroup
  • 支援網路檔案系統

雖然第二代執行環境在持續負載下通常執行速度較快,但對大多數服務而言,冷啟動時間比第一代長。

如何選擇執行環境

如有下列任一情況,請使用第一代:

  • Cloud Run 服務的流量突然暴增,需要快速擴充至多個執行個體,或服務對冷啟動時間很敏感。
  • 您的 Cloud Run 服務流量不穩定,導致系統經常從零開始擴充。
  • 您想使用的記憶體容量小於 512 MiB。 第二代執行環境至少需要 512 MiB 的記憶體。

如果您的 Cloud Run 服務符合下列任一條件,建議使用第二代:

  • 您的服務需要使用網路檔案系統,但只有第二代支援這項功能。
  • 您的服務流量相當穩定,且可容忍冷啟動速度稍慢。
  • 服務有耗用大量 CPU 資源的工作負載。
  • 服務可望獲得更快的網路效能。
  • 您的服務需要使用軟體,但由於未實作的系統呼叫,導致軟體無法在第一代中執行。
  • 您的服務需要 Linux cgroup 功能。
  • 您的服務使用第三方基礎架構來保護容器安全。

使用第二代執行環境的最佳做法

建議容器安裝 SIGTERM 處理常式,尤其是使用以要求為準的計費方式時。

處理 SIGTERM 可讓容器有機會執行必要的清除作業,例如在結束前排清記錄。如果容器未擷取 SIGTERM,系統仍會提供 10 秒執行這些工作,這 10 秒會計費。

如何檢查容器是否處理 SIGTERM

如要判斷容器是否已安裝 SIGTERM 處理常式,請執行下列操作:

  1. 啟動 Cloud Shell。您可以在說明文件頁面的標題中找到「啟用 Cloud Shell」啟動 Cloud Run 按鈕。你可能需要授權,並等待系統佈建。 或者,啟動獨立工作階段

  2. 在 Cloud Shell 中於本機執行容器:

    docker run IMAGE_URL

    IMAGE_URL 替換為容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

  3. 在 Cloud Shell 中開啟另一個分頁,並取得目前 Cloud Shell 工作階段中執行的容器清單:

    docker container ls

    您需要找出指令傳回的容器 ID。

  4. 使用容器 ID 將 SIGTERM 信號傳送至容器

    docker kill -s SIGTERM CONTAINER_ID
  5. 返回叫用 docker run 的分頁,查看容器是否已結束 (停止)。如果 SIGTERM 信號導致容器結束,表示容器正在處理 SIGTERM。

如何處理 SIGTERM

如果容器未處理 SIGTERM,新增 SIGTERM 處理常式的最簡單方法,就是使用 tini 包裝服務。這樣做可讓服務以 tini 的子程序形式執行,而 tini 則會擔任容器初始化程序的角色。如需操作說明,請參閱 Docker 指令

或者,您也可以變更應用程式,直接處理 SIGTERM。

後續步驟