規劃 Code Engine

IBM Cloud® Code Engine 支援以下這幾種基本工作負載類型:應用程式、工作、函式及叢集。

應用程式運行您的程式碼來處理 HTTP 請求。 除了傳統的 HTTP 請求之外,IBM Cloud® Code Engine 還支援使用 WebSockets 作為通訊協定的應用程式。 應用程式的執行中實例數會根據送入的要求及您的配置設定自動擴增或縮減 (至零)。 應用程式包含一個以上修訂。 修訂代表應用程式配置內容的不可變版本。 應用程式配置內容的每一項更新都會建立應用程式的新修訂。

工作會平行執行一個以上執行碼實例。 與處理 HTTP 請求的應用程式不同,作業被設計為運行一次並退出。 建立工作時,您可以指定每次執行工作時使用的工作量配置資訊。

函數是無狀態程式碼片段,在 HTTP 請求呼叫時執行任務。 借助 IBM Code Engine 功能,您可以以可擴展且無伺服器的方式運行業務邏輯。 IBM Code Engine 功能提供最佳化的執行環境來支援低延遲和快速橫向擴充場景。 您的函數程式碼可以在包含特定 Node.js 或 Python 版本的託管運行時編寫。

機群也稱為無伺服器機群,可執行一個或多個使用者程式碼實體,以完成一組指定的任務。 機群可處理大型、運算密集的工作負載,允許控制機器設定檔,並可在 GPU 資源上執行。 Fleets 為單一租戶,可執行動態任務排程,並提供對機器設定檔組態的完整控制。 此外,車隊可連線至虛擬私有雲 (VPC),以安全存取使用者資料和服務。

比較 Code Engine 的應用程式、工作、功能及車隊
性質 應用程式 工作 功能 Fleet
執行時間 (持續時間) 長時間執行 (每個要求 10 分鐘) 長時間執行 (最多 24 小時) 短執行 (2 分鐘或更少) 長時間運作(數分鐘至數星期)
啟動延遲 排定開始時間
終止 執行-連續 執行至完成 執行至完成 執行至完成
呼叫 在要求時或永久執行中 已排定 在要求時,即時 已排定
程式設計模型 儲存器型建置及執行 儲存器型建置及執行 特定語言的原始碼檔案和相依關係 meta 資料 儲存器型建置及執行
平行化 平行執行,彈性 低至中平行執行 高平行執行 高度平行執行與佇列
橫向擴充 根據要求數 根據工作工作量定義 根據事件或直接呼叫 基於任務和並發實例的數量
隔離 多租戶 多租戶 多租戶 單一承租戶
GPU 支援
對機器配置的控制 不控制 不控制 不控制 完整控制權
VPC 連線 穿越私密小徑 穿越私密小徑 穿越私密小徑 原生(透過子網區塊)
已針對下列項目進行最佳化: 長時間執行、高度複雜的工作負載及隨需應變橫向擴充 具有高資源需求的排程或計劃工作量 啟動時間與快速橫向擴充 大規模且運算密集型的工作負載

Code Engine 使用案例

雖然 Code Engine 的使用案例差異很大,但以下是一些可讓您開始使用的範例。

熟悉容器,但沒有管理叢集的技能或預算
您是瞭解儲存器的開發人員。 不過,您不想要管理叢集所耗用的複雜性或時間。 使用 Code Engine,您不需要擔心管理叢集所需的技能或管理叢集所需的時間。 相反地,Code Engine 會消除這些複雜性,而 IBM 團隊會將您的基礎架構作為 IBM Cloud 服務的一部分來管理。
具有間歇性尖峰的工作負載
您的網站在週末忙碌,但該週的資料流量較少。 因為此網站經歷活動激增後又有閒置期間,Code Engine 是很好的解決方案。 使用 Code Engine,網站應用程式會自動擴增應用程式實例以增加資料流量,然後在閒置期間 (甚至向下至零) 再次向下。
與儲存體整合的批次工作量
您的批次工作在每個月月底處理員工薪資。 由於這項工作是每月執行一次,因此大部分時間處於閒置狀態,但一旦執行時,便會消耗大量 CPU 和記憶體。 批次工作需要與儲存體整合以儲存結果。 透過使用 Code Engine,您可以整合批次工作與 IBM Cloud Object Storage,並僅針對工作執行時使用的資源收費。 當工作閒置時,它不會耗用任何資源,因此不會產生費用。 不過,工作可能會使用 IBM Cloud Object Storage 實例產生成本。
帶來您的工作負載
工作的一部分是建立映像檔並部署它們。 您具有建立容器映像檔及部署這些映像檔的經驗,但您想要簡化此處理程序,以便您可以專注於其他作業。 使用 Code Engine,您可以建置映像檔並直接從相同介面部署它們,從而簡化每日作業並騰出時間來開發更多程式碼。
測試、概念證明或「踢」
您有興趣進一步瞭解儲存器型架構。 您的團隊已開發應用程式,但想要在將應用程式呈現給利害關係人之前先進行測試。 此應用程式是小型應用程式,因此即使是小型專用叢集也不想要付費。 在此情況下,您可以測試應用程式,然後提供設計概念驗證給利害關係人,而不需要專用叢集可能需要的成本。

何時使用應用程式、工作或功能

應用程式和工作非常相似,最後兩者都只是執行程式碼。 然而,當您決定將程式碼架構為應用程式或工作時,有幾個關鍵方面需要考量。

您的程式碼是否需要回應事件?

在 Code Engine 的上下文中,任何傳入的 HTTP 請求(甚至載入網頁的請求)或 REST API 呼叫都被視為事件。 當您在應用程式或作業之間進行選擇時,事件驅動的概念通常是關鍵因素,因為根據定義,應用程式是因 HTTP 請求而運行,而作業是因呼叫結果而運行。

如果您知道您的工作負載回應傳入的 HTTP 請求,那麼應用程式是正確的選擇。 不過,如果您的工作量已執行,然後完成,則工作更適合。

您的程式碼如何擴充?

應用程式和工作都可擴充。 應用程式會調整以回應可測量的即時準則 (例如作用中送入要求數),因為應用程式的每一個實例一次可能只能處理特定數目的並行要求。 根據建立工作時指定的實例數來調整工作。

如果您知道希望運行特定數量的程式碼實例,並且每個實例都可以在沒有傳入 HTTP 請求的情況下運行,那麼作業是正確的選擇。 但是,如果實例數量必須根據傳入的 HTTP 負載動態擴展,那麼應用程式更適合。

Code Engine 的一般實務範例

請閱讀這些常見實務,以瞭解何時選擇特定類型的工作量。

您的工作負載需要低延遲還是互動式?
如果您的工作量需要用戶端或使用者同步等待要求的回應,且回應必須在幾毫秒內可用,請使用應用程式。 應用程式提供外部可聯繫端點,並同步回應要求。 這類工作負載的範例包括網站、聊天機器人及行動式應用程式。 使用 應用程式
您的計算是否輕量型,以及它是否需要低 CPU、記憶體及 I/O?
如果您的工作量是輕量型,且需要低 CPU、記憶體及 I/O,則應用程式可用的並行選項可能很有用。 一般範例是提供基本作業並由 NoSQL 資料庫支援的 API 伺服器。 這些類型的要求通常具有少量資料,且需要低記憶體或更少 CPU 循環。 使用較高的並行性,應用程式可以在第二個要求等待 I/O 時處理第一個要求的資料。 由於 CPU 和記憶體需求較低,許多要求可以同時執行。 使用 應用程式
您的計算是否連結至 CPU、記憶體或 I/O?
若要處理特定數量的資料 (其中每一個資料片段都很大,且需要大量 CPU 及記憶體),工作通常是較佳的選擇。 不過,如果工作負載需要要求/回應型樣,也可以使用應用程式。 在這兩種情況下,計算作業會以單一並行執行。 每一個應用程式實例或工作作業只會同時處理一個要求或資料片段,以充分運用針對實例所配置的資源。 平行化是透過實例或作業數目來達成,其中由於高資源限制,建立其他作業的成本可以忽略不計。 一般範例是處理 Object Storage 儲存區或提供機器學習模型的映像檔資料。 使用 應用程式工作
您的計算是否長時間執行?
如果計算執行的持續時間較長,由於其非同步本質,工作是更好的選擇。 應用程式的持續時間上限一律受到限制,因為大規模維護開放式連線的成本很高。 一般工作負載是訓練機器學習模型或超參數最佳化。 使用 工作
您可以預先指定計算的並行性嗎?
如果您知道需要執行多少計算,則可以執行具有確切實例數的工作,直到它完成為止。 一般範例是超參數調整或訓練類神經網路。 使用 工作
您的工作負載會對某個事件做出反應嗎?
如果您的工作負載需要對事件做出反應,例如推送至儲存庫的 Git 確定、上傳至 Object Storage 儲存區的物件,或在資料庫內修改的文件,請使用應用程式。 應用程式提供可配置為從事件來源接收事件的端點。 使用 應用程式
您是否需要在短時間內處理大量資料,以回應事件或要求?
如果您的工作量需要快速回應未預測的要求或事件,則應用程式通常會更適合,因為應用程式會動態調整,即使從零開始也一樣。 使用 應用程式
結合應用程式及工作
您甚至可以結合應用程式及工作,其中應用程式可以啟動工作以將特定計算外包。 工作也可以查詢應用程式。 工作及應用程式組合的典型範例是訓練及提供機器學習模型。 通常會使用工作來訓練模型,並使用應用程式來處理模型。 使用 應用程式工作