什麼是 Cloud Run?

Cloud Run 是全代管應用程式平台,可在 Google 高擴充性的基礎架構上執行程式碼、函式或容器。

只要能從程式碼建構容器映像檔,就能將以任何程式設計語言編寫的程式碼部署到 Cloud Run。事實上,建立容器映像檔是選用步驟。如果您使用的是 Go、Node.js、Python、Java、.NET、Ruby 或支援的架構,可以利用「以來源為基礎的部署」選項,透過所用語言的最佳做法來建構容器。

Google 打造的 Cloud Run 可與其他服務 Google Cloud順暢搭配運作,方便您打造功能完整的應用程式。

簡而言之,開發人員可透過 Cloud Run 專心編寫程式碼,不必花費太多時間操作、設定及擴充 Cloud Run 服務。您不必建立叢集或管理基礎架構,就能使用 Cloud Run 提高生產力。

服務、工作、worker 集區和執行個體:四種執行程式碼的方式

在 Cloud Run 中,您的程式碼可以做為 服務工作工作集區執行個體。所有這些資源類型都會在相同的執行環境中執行沙箱化的容器例項,並可與Google Cloud 服務整合。

決定適合工作負載的 Cloud Run。
決定適合工作負載的 Cloud Run 資源。

下表概略列出各 Cloud Run 資源類型提供的選項。

資源 說明
服務 使用無狀態容器執行個體回應傳送至專屬穩定端點的 HTTP 要求,支援動態自動調整資源配置和手動調整資源配置,也會回應事件和函式。
工作 執行可平行處理的工作,這些工作會手動或依排程執行,直到完成為止。
工作站集區 處理持續運作的背景工作負載,例如來自訊息佇列 (Kafka、Pub/Sub、RabbitMQ) 的工作負載。
執行個體 執行需要單例執行階段環境的長期工作負載。

Cloud Run 服務

Cloud Run 服務提供執行可靠 HTTPS 端點所需的基礎架構。如要使用這項服務,請務必確保程式碼監聽 TCP 通訊埠,並處理傳入的 HTTP 要求。

下圖說明 Cloud Run 服務如何執行多個容器執行個體,處理來自用戶端的網路要求和事件:

Cloud Run 服務會執行容器,處理網路要求和事件

標準服務包含下列功能:

每個服務都有專屬的 HTTPS 端點
每個 Cloud Run 服務都有 HTTPS 端點,位於 *.run.app 網域的專屬子網域中,您也可以設定自訂網域。Cloud Run 會為您管理 TLS,並支援 WebSocket、HTTP/2 (端對端) 和 gRPC (端對端)。
根據要求快速自動調度資源
如果帳單設定為以執行個體為準的計費方式,Cloud Run 會快速擴充,處理所有傳入要求,或處理要求以外的 CPU 使用率增加情況。服務可以快速水平擴展至一千個執行個體,如果要求增加配額,甚至可以擴展至更多執行個體。如果需求減少,Cloud Run 會移除閒置容器。如果您擔心費用或下游系統負載過重,可以限制執行個體數量上限。
手動調整資源配置 (選用)
根據預設,Cloud Run 會自動調度更多執行個體來處理更多流量,但您可以透過手動調度來控管調度行為,藉此覆寫這項行為。
內建流量管理

為降低部署新修訂版本的風險,Cloud Run 支援漸進式推出,包括將傳入流量導向最新修訂版本、復原至先前的修訂版本,以及同時將流量分配給多個修訂版本。

舉例來說,您可以先將 1% 的要求傳送至新修訂版本,然後在監控遙測資料時提高該百分比。

公開和私人服務

Cloud Run 服務可從網際網路連線,您也可以透過下列方式限制存取權:

您可以透過內容傳遞聯播網 (CDN) (例如 Firebase 託管和 Cloud CDN) 服務前端,從更靠近用戶端的邊緣位置提供可快取的資產。

將資源調度率降至零並使用最少執行個體

根據預設,如果帳單設定為以例項為準的帳單,Cloud Run 會自動新增及移除例項,以處理所有傳入要求,或處理要求以外的 CPU 使用率增加情況。

將資源縮減為零

如果服務沒有任何傳入要求,即使是最後一個例項也會遭到移除。這種行為通常稱為「擴充至零」。

如果服務沒有任何作用中執行個體,Cloud Run 會在收到新要求時建立新的執行個體。視容器準備好處理流量的速度而定,這個程序可能會增加這些初始要求的回應時間。

變更資源調度行為

您可以透過下列任一方法修改這項預設行為:

服務的即付即用價格

從經濟角度來看,縮減至零很有吸引力,因為系統會以 100 毫秒為單位,針對分配給執行個體的 CPU 和記憶體收費。如果未設定執行個體下限,且服務未啟用,您就不必支付費用。提供超值的免費方案。詳情請參閱定價

您可以啟用兩項帳單設定:

以要求為依據
如果執行個體未處理要求,就不會產生費用。您需要支付每項要求的費用。
以執行個體為依據
系統會向您收取執行個體完整生命週期的費用。不會收取單次要求費用。

提供超值的免費方案。詳情請參閱定價,並參閱帳單設定,瞭解如何為服務啟用以要求為準或以執行個體為準的計費方式。

可拋棄式容器檔案系統

Cloud Run 上的執行個體是可拋棄式的。每個容器都有可寫入的記憶體內檔案系統疊加層,如果容器關閉,這個疊加層就不會保留。Cloud Run 會判斷何時停止將要求傳送至執行個體,並關閉執行個體,例如在縮減規模時。

如要在 Cloud Run 即將關閉執行個體時收到警告,應用程式可以截取 SIGTERM 信號。這可讓程式碼排清本機緩衝區,並將店面資料保存至外部資料儲存區。

如要永久保留檔案,請與 Cloud Storage 整合掛接網路檔案系統 (NFS)

Cloud Run 服務的使用時機

Cloud Run 服務非常適合處理要求、事件或函式的程式碼。使用案例範例包括:

網站和網頁應用程式
利用最常用的堆疊建構網頁應用程式、存取 SQL 資料庫,以及呈現動態 HTML 網頁。
API 與微服務
您可以建構 REST API、GraphQL API,或是透過 HTTP 或 gRPC 通訊的私人微服務。
串流資料處理
Cloud Run 服務可以接收 Pub/Sub 推送訂閱項目的訊息和 Eventarc 的事件。
非同步工作負載
Cloud Run functions 可以回應非同步事件,例如 Pub/Sub 主題上的訊息、Cloud Storage bucket 的變更或 Firebase 事件。
AI 推論
Cloud Run 服務 (無論是否已設定 GPU) 都能代管 AI 工作負載,例如推論模型和模型訓練。

Cloud Run 工作

如果您的程式碼會執行作業,然後停止 (例如使用指令碼),則可以使用 Cloud Run 工作執行程式碼。您可以使用 Google Cloud CLI 從指令列執行工作、排定重複執行工作,或將工作做為工作流程的一部分執行

陣列工作是執行工作的更快方式

作業可以啟動單一執行個體來執行程式碼,這是執行指令碼或工具的常見方式。

不過,您也可以使用陣列工作,平行啟動許多相同的獨立執行個體。如果工作可拆分成多個獨立任務,陣列工作就是更快速的處理方式。

下圖顯示有七項工作的作業依序執行時,所需時間比四個執行個體並行處理獨立工作時更長:

陣列工作是執行可平行處理工作的更快方式

舉例來說,如果您要調整 Cloud Storage 中 1,000 張圖片的大小並裁剪,連續處理這些圖片的速度會比使用多個執行個體平行處理慢,而 Cloud Run 會管理自動調整資源配置。

Cloud Run 工作的使用時機

Cloud Run 工作非常適合執行特定作業的程式碼,會在完成後自動結束。以下是一些例子:

指令碼或工具
執行指令碼,進行資料庫遷移或其他作業工作。
陣列工作
對 Cloud Storage 值區中的所有檔案執行高度平行化處理。
已排定的工作
定期建立及傳送月結單,或將資料庫查詢結果儲存為 XML,並每隔幾小時上傳檔案。
AI 工作負載
無論是否設定 GPU,Cloud Run 工作都能代管 AI 工作負載,例如批次推論、微調模型和模型訓練。

Cloud Run worker 集區

worker 集區適用於不需處理 HTTP 要求的工作負載。這類集區提供彈性且可擴充的運算資源集區,專為持續性、非 HTTP 的提取式背景處理作業量身打造。以下主要特徵定義了工作站集區的運作方式:

  • worker 集區不會自動調整資源配置。手動調整 Cloud Run 工作站集區處理工作負載所需的執行個體數量。如要啟動並保持運作,工作負載必須至少有一個執行個體。如果將執行個體數量下限設為 0,即使部署成功,worker 執行個體也不會啟動。

  • 如要根據即時需求動態調整執行個體,請建立自己的自動配置器。如需範例,請參閱「自動調度 Kafka 消費者工作負載的資源」。

  • worker 集區會將執行個體拆分給不同修訂版本,藉此管理推出作業,而非拆分流量。舉例來說,如果工作站集區有四個執行個體,您可以將 25% (一個執行個體) 分配給新修訂版本,75% (三個執行個體) 分配給穩定修訂版本。

  • worker 集區支援直連虛擬私有雲輸出和輸入,且沒有負載平衡端點或網址。如要進一步瞭解中繼資料伺服器 (MDS) 支援,以及如何擷取工作站集區執行個體的私人 IP 位址,請參閱容器執行階段合約

  • Cloud Run 只會針對工作集區執行個體的執行時間向您收費。

Cloud Run worker 集區的使用時機

worker 集區不需要公開 HTTP 端點。這項功能可讓網路更安全,並簡化應用程式程式碼。您也不需要管理健康狀態檢查的通訊埠。工作站集區適用於下列用途:

  • 提取式工作負載:部署工作負載,從佇列提取訊息以進行處理。例如 Kafka Consumer Pub/Sub 提取RabbitMQ

    下圖顯示部署工作站集區以處理提取式工作負載的使用案例:

    Cloud Run worker 集區提取式工作負載

    在 Pub/Sub 用例中,自動調整規模的 Cloud Run 訂閱者會從 Pub/Sub 訂閱項目提取訊息。在 Kafka 用例中,自動調整的 Cloud Run 取用端會從 Kafka 主題提取訊息。

  • 一般非要求工作負載:執行容器型工作負載,但這類工作負載並非用於處理傳入要求。

Cloud Run 執行個體

Cloud Run 執行個體適用於需要穩定、持續且可個別定址的單例項執行階段的工作負載,而非要求驅動的水平擴縮。

服務可以有多個容器執行個體,並設定為自動調度資源或手動調度資源,但 Cloud Run 執行個體只有一個。

比較 Cloud Run 服務和 Cloud Run 執行個體
比較 Cloud Run 服務和 Cloud Run 執行個體。

Cloud Run 執行個體具有下列特徵:

  • 可個別管理:您可以個別建立、更新及刪除每個執行個體、啟動及停止執行個體,並監控執行作業。
  • 可個別定址:每個執行個體都會獲派專屬網址。
  • 長期執行:執行個體可以不間斷地執行數小時或數天,如果設定為在基礎架構定期更新 (每 1 到 2 週) 後自動重新啟動,甚至可以執行更久。
  • 快速建立:執行個體會在約 20 秒內完成佈建並開始執行。

Cloud Run 執行個體的使用時機

Cloud Run 執行個體專為持續性單例運算工作負載設計,適用於執行代理工作負載和非 AI 工作流程。使用案例範例包括:

長期運作的 AI 代理和 AI 工作流程引擎
建構長時間執行的背景代理程式,執行多步驟執行計畫、執行非同步程式碼輔助工具,或管理需要單一執行個體環境的有狀態工作流程。
長期執行的無伺服器運算
部署輕量型永久連線伺服器,類似於持續運作的虛擬私人伺服器 (VPS)。如果您希望工作負載不需要自動調度資源或處理網路規模的流量,且您想優先考量降低成本和單例項的生命週期,而非高可用性,那麼這個選項就非常適合您。
開發人員環境和偵錯迴圈
部署專屬環境,遠端偵錯容器程序、同步處理程式碼變更,以及排解當機問題,不必擔心容器自動終止。

Google Cloud 整合

Cloud Run 整合了廣大的 Google Cloud生態系統,可讓您建構功能齊全的應用程式。

必要的整合項目包括:

資料儲存
Cloud Run 可與 Cloud SQL (代管 MySQL、PostgreSQL 和 SQL Server)、Memorystore (代管 Redis 和 Memcached)、Firestore、Spanner、Cloud Storage 等服務整合。如需完整清單,請參閱「資料儲存」。
記錄和錯誤回報
Cloud Logging 會自動擷取容器記錄。如果記錄中含有例外狀況,Error Reporting 會匯總這些狀況,然後通知您。支援的語言包括 Go、Java、Node.js、PHP、Python、Ruby 和 .NET。
服務身分
每個 Cloud Run 修訂版本都會連結至服務帳戶,而 Google Cloud 用戶端程式庫會以透明方式使用這個服務帳戶,向 Google Cloud API 進行驗證。
持續推送軟體更新
如果原始碼儲存在 GitHub 中,您可以設定 Cloud Run 自動部署新的提交內容
私人網路
Cloud Run 執行個體可透過無伺服器 VPC 存取連接器存取虛擬私有雲 (VPC) 網路中的資源。服務可透過這種方式連線至 Compute Engine 虛擬機器,或以 Compute Engine 為基礎的產品,例如 Google Kubernetes Engine 或 Memorystore。
Google Cloud API
服務的程式碼會以透明方式向 Google Cloud API 進行驗證。包括 AI 和機器學習 API,例如 Cloud Vision API、Speech-to-Text API、AutoML Natural Language API、Cloud Translation API 等等。
背景工作
您可以安排程式碼在稍後執行,或在傳回網頁要求後立即執行。Cloud Run 可與 Cloud Tasks 搭配使用,提供可擴充且可靠的非同步執行作業。

如需可與 Cloud Run 搭配運作的眾多 Google Cloud 服務清單,請參閱「連線至 Google Cloud 服務」。

程式碼在容器映像檔中執行

雖然不一定要熟悉容器,才能將程式碼部署至 Cloud Run,但程式碼最終一律會在沙箱化容器執行個體中執行。

如果您不熟悉容器,請參閱簡短的概念簡介。

建構容器映像檔

如圖所示,您會使用原始碼、資產和程式庫依附元件建構容器映像檔。這個映像檔是包含服務執行所需一切項目的套件,包括建構構件、資產、系統套件,以及 (選用) 執行階段。容器化應用程式本質上可攜式,且可在任何可執行容器的環境中執行。建構構件包括已編譯的二進位檔或指令碼檔案,而執行階段則包括 Node.js JavaScript 執行階段或 Java 虛擬機器。

進階使用者很重視 Cloud Run 不會對執行程式碼造成額外負擔,而且您可以在 Cloud Run 上執行任何二進位檔。

如要更方便地將應用程式容器化,或將這項工作委派給 Google,Cloud Run 可與開放原始碼的 Google Cloud 建構包整合,提供以來源為基礎的部署作業

後續步驟