- Languages supported
-
Fargate: AWS Fargate 是容器的無伺服器運算引擎,與 Amazon ECS 搭配使用以進行協同運作。它支援任何可封裝至 Docker 容器的程式設計語言或執行時間環境。這種靈活性意味著您可以使用幾乎任何符合您應用程式需求的語言、架構或程式庫。您可以使用 Python、Java、Node.js、Go、.NET、、RubyPHP,甚至是自訂語言和環境。只要 Fargate 封裝在容器中,就可以執行它們。這種廣泛的語言支援使 Fargate 非常適合執行各種應用程式。這些包括舊版系統、多語言微服務和現代雲端原生應用程式。
Lambda:相較於 Fargate, AWS Lambda 提供較有限語言集的原生支援。Lambda 函數專為事件驅動的工作負載而打造。Lambda 正式支援下列語言和執行時間:
-
Node.js
-
Python
-
Java
-
Go
-
Ruby
-
C#
-
PowerShell
Lambda 也支援自訂執行期。使用自訂執行時間,您可以擁有自己的語言或執行時間環境。不過,相較於使用原生支援的選項,這需要更多的設定和管理。如果您從容器映像部署 Lambda 函數,則可以在 中寫入函數Rust。使用僅限 AWS 作業系統的基礎映像,並在映像中包含Rust執行時間用戶端。如果您使用的語言沒有 AWS提供的執行時間界面用戶端,則必須建立自己的 。
- Event-driven invocation
-
Lambda 本質上專為事件驅動型運算而設計。系統會觸發 Lambda 函數,以回應資料、使用者動作或排程任務的變更。它原生與許多 整合 AWS 服務。這些包括 Amazon S3 (例如,在上傳檔案時叫用 函數)、DynamoDB (例如,在資料更新時觸發) 和 API Gateway (例如,處理 HTTP 請求)。Lambda 事件驅動架構非常適合需要立即回應事件的應用程式。這些應用程式不需要持久性運算資源。
Fargate 不是原生的事件驅動型。不過,透過一些額外的樣板邏輯,它可以與 Amazon SQS 和 Kinesis 等事件來源整合。Lambda 會為您處理此整合邏輯的大量內容。使用 Fargate,您必須使用這些服務APIs 自行實作此整合。
- Runtime/use cases
-
Fargate 旨在執行容器化應用程式。它提供一個靈活的執行期環境,您可以在其中定義容器的 CPU、記憶體和聯網設定。Fargate 在容器型模型上運作。它支援長時間執行的程序、持久性服務和具有特定執行期需求的應用程式。Fargate 中的容器可以無限期執行,因為執行時間沒有硬性限制。這使得它非常適合需要持續執行的應用程式。透過 Fargate 中的容器重新啟動政策,任務中的個別容器可以自動重新啟動,而無需重新啟動整個任務。這可改善多容器工作負載的彈性。Fargate 與 CloudWatch Container Insights 整合,具有增強的可觀測性。透過此功能,您可以取得每個容器的詳細指標和追蹤,以監控應用程式效能。
Lambda 函數已針對短期的事件驅動任務進行最佳化。Lambda 函數的執行時間上限為每次調用 15 分鐘。這使得 Lambda 函數非常適合檔案處理、即時資料串流和 HTTP 請求處理等案例。這些任務很簡短,不需要長時間執行的程序。
使用 Lambda 中的耐用函數,您可以建立長時間執行的工作流程,在多個調用中保留狀態長達 1 年。耐用的 函數提供內建的錯誤處理、自動重試和失敗後的復原。耐用函數 SDK 適用於 JavaScript、TypeScript、Java、 Python和 C# (.NET)。在等待期間,您的函數會暫停,而不會產生運算費用。透過耐用的 函數,您可以解決先前需要持久性運算環境的使用案例。
在長期執行工作負載的持久函數和 Fargate 之間進行選擇時,請考慮執行模式。對於花費大部分時間等待的工作流程而言,耐用的函數具有成本效益,例如人工核准、排程延遲或外部 API 回呼。您在等待期間不會產生運算費用。Fargate 更適合需要持續運算的工作負載,例如資料處理、持久性網路連線,或必須在不中斷的情況下保持作用中狀態的服務。
在 Lambda 中,執行時間環境較抽象。您對基礎基礎設施的控制較低。對於標準函數,每個叫用都是獨立的無狀態。必須在調用之間保留的任何狀態或資料都必須從外部管理。範例包括資料庫或儲存服務。
- Scaling
-
Fargate 透過調整執行中的任務數量來擴展。這是根據容器協同運作服務 (Amazon ECS) 中定義的所需狀態。擴展可以透過 Amazon EC2 Auto Scaling 手動或自動完成。如需詳細資訊,請參閱 AWS Containers 部落格上的 Under the hood:Amazon ECS and Fargate 會增加任務啟動率。
在 Fargate 中,每個任務都會在其隔離的環境中執行。擴展涉及啟動其他任務或根據負載停止這些任務。Amazon ECS 服務排程器在每個服務一分鐘內最多可啟動 500 個任務。這適用於 Web 和其他長時間執行的服務。Amazon ECS 也支援預測擴展。它使用歷史模式,在需求激增發生之前主動增加任務。CPU 和記憶體使用率的目標追蹤政策支援 20 秒的指標解析度。這可讓擴展訊號偵測速度更快。Amazon ECS 也可以自動重新平衡跨可用區域的服務任務。這可維持高可用性。Fargate 與 AWS Fault Injection Service (FIS) 整合。透過 FIS,您可以執行受控制的故障注入實驗,以測試應用程式彈性。
對於 Lambda,並行是 AWS Lambda 函數同時處理的傳輸中請求數量。這與 Fargate 中的並行不同。只要有可用的運算和網路資源,每個 Fargate 任務都可以處理並行請求。Lambda 會針對每個並行請求佈建個別的執行環境執行個體。隨著函數收到更多請求,Lambda 會自動擴展執行環境的數量。這會持續到您達到帳戶並行限制為止。根據預設,Lambda 為您的帳戶提供 1,000 個並行執行的總並行限制。此限制適用於 中的所有函數 AWS 區域。如有需要,您可以請求提高配額。
使用 Lambda 受管執行個體時,擴展的運作方式不同。受管執行個體不會為每個並行請求佈建新的執行環境,而是根據 CPU 資源使用率以非同步方式擴展。每個執行環境都可以處理多個並行調用。此方法可將資源使用率最大化。它非常適合穩定狀態或可預測的工作負載。
對於使用預設運算類型的每個 Lambda 函數,並行擴展速率為每 10 秒 1,000 個執行執行個體。這會持續達到帳戶並行上限。如需詳細資訊,請參閱 AWS 運算部落格上的 Lambda 函數現在以 12 倍的速度處理大量請求。如果 10 秒期間內的請求數量超過 1,000,則會調節額外的請求。下圖示範 Lambda 擴展如何運作,假設帳戶並行 7000。
- Cold start and cold-start mitigation
-
Lambda 函數可能會遇到冷啟動。這些會在閒置一段時間後叫用函數時發生。在冷啟動期間,Lambda 服務會初始化新的執行環境。這包括載入執行時間、相依性和函數程式碼。冷啟動持續時間從不到 100 毫秒到超過 1 秒不等,取決於執行時間、套件大小和初始化邏輯。對於初始化時間較長的執行時間,例如 Java或 C#,冷啟動可能會更長,無需最佳化。冷啟動可能會影響需要低延遲回應的應用程式效能。
若要緩解 Lambda 中的冷啟動,請考慮下列策略:
-
最小化函數大小:減少函數套件的大小及其相依性。這可以減少初始化所需的時間。
-
增加記憶體配置:較高的記憶體配置會增加 CPU 容量。這可以縮短初始化時間。
-
保持函數暖機:定期叫用 Lambda 函數 (例如,使用 CloudWatch Events)。這可讓它們保持作用中狀態,並降低冷啟動的可能性。
-
Lambda SnapStart:針對 Java、 Python和 .NET 函數使用 Lambda SnapStart,以減少啟動時間。SnapStart 會拍攝初始化執行環境的快照。後續調用會從快照繼續,而不是執行完全冷啟動。
-
佈建並行:此功能可讓指定數量的函數執行個體保持暖機狀態,並準備好處理請求。這可減少冷啟動延遲。不過,它會增加成本。即使佈建的執行個體未主動處理請求,您仍需支付這些執行個體的費用。
-
Lambda 受管執行個體:在各種 EC2 執行個體類型上執行函數。這些包括處理器,例如 Graviton4和高頻寬聯網選項。預先佈建的執行環境可消除冷啟動。Lambda 會處理執行個體生命週期、作業系統和執行期修補、路由、負載平衡和自動擴展。Lambda 受管執行個體也支援每個執行環境的多並行調用。它們提供 EC2 定價優勢,例如 Compute Savings Plans 和預留執行個體。
Fargate 通常不會像 Lambda 一樣受到冷啟動的影響。啟動 Fargate 任務的時間與從映像登錄檔提取任務中定義的容器映像所花費的時間直接相關。Fargate 也支援以 Seekable OCI (SOCI) 編製索引的容器映像延遲載入。使用 SOCI 延遲載入容器映像可減少在 Fargate 上啟動 Amazon ECS 任務的時間。Fargate 使用 SOCI 索引資訊清單 v2。這可改善延遲載入的效能。在 Fargate 上啟動任務後,這是一個長時間執行的程序。它隨時準備好處理請求。如果您需要啟動新任務以回應擴展事件,初始化期間可能會有一些延遲。相較於 Lambda 冷啟動,這通常不太重要。
- Memory and CPU options
-
Fargate 為您的容器化應用程式提供記憶體和 CPU 資源的精細控制。當您在 Fargate 中啟動任務時,您可以指定應用程式的確切 CPU 和記憶體需求。CPU 和記憶體配置是獨立的。您可以選擇最適合工作負載的組合。您可以選擇從 0.25 個 vCPUs 到 32 個 vCPUs的 CPU 值。視您的組態而定,每個任務的記憶體範圍從 0.5 GB 到 244 GB。
此彈性非常適合具有特定效能特性的應用程式。範例包括記憶體密集型資料庫或 CPU 繫結運算任務。Fargate 可讓您最佳化資源配置。您可以有效平衡成本和效能。
在 Lambda 中,會連結記憶體和 CPU。CPU 會根據您選取的記憶體量按比例自動配置。您可以選擇介於 128 MB 到 10 GB 之間的記憶體配置,以 1 MB 為單位遞增。CPU 會隨記憶體擴展,最多 6 個 vCPU。較高的記憶體設定會產生更多 CPU 功率。不過,您無法直接控制 CPU 配置本身。
此模型專為簡化而設計。您可以快速調整記憶體設定,而無需管理 CPU 組態。不過,對於需要 CPU 和記憶體資源之間特定平衡的工作負載,其彈性可能較低。Lambda 模型適用於您希望根據記憶體需求直接擴展的任務。它可能不適用於具有複雜或高度特定資源需求的應用程式。
- Networking
-
當您在 Fargate 中部署任務時,它們會在 Amazon VPC (Amazon Virtual Private Cloud) 中執行。這可讓您完全控制聯網環境。您可以設定安全群組、網路存取控制清單 (ACLs) 和路由表。每個 Fargate 任務都會使用專用的私有 IP 地址取得自己的網路介面。如有需要,您可以指派公有 IP 地址。
Fargate 支援進階聯網功能,例如負載平衡 (使用 AWS Elastic Load Balancing)、VPC 對等互連,以及直接存取 VPC AWS 服務 中的其他 。您也可以使用 與支援的 AWS PrivateLink 進行安全的私有連線 AWS 服務。這可避免周遊網際網路。Fargate 任務也支援 Amazon VPC Lattice。這可提供標準化service-to-service連線能力、安全性和可觀測性。Fargate 任務可以在IPv6-only的組態中執行。這可讓任務僅透過 IPv6 進行通訊。
根據預設,Lambda 函數會在受管網路環境中執行。您無法直接控制網路介面或 IP 地址。不過,Lambda 可以使用 AWS Hyperplane 連接到客戶管理的 VPC。這可讓您控制對 VPC 內資源的存取。
當 Lambda 函數連接到客戶管理的 VPC 時,它們會繼承 VPC 安全群組和子網路組態。這可讓它們安全地與相同 VPC 中的其他 AWS 服務 (例如 RDS 資料庫) 互動。由於 Lambda 透過建立許多並行執行環境來擴展,因此每個 都會維護自己的資料庫連線。高並行可能會耗盡資料庫連線限制。對於關聯式資料庫存取,請使用 Amazon RDS Proxy 集區和管理連線。這可避免高並行期間的連線耗盡。
Lambda 服務使用 Network Function Virtualization 平台來提供 NAT 功能。這會將 Lambda VPC 連接到客戶 VPCs。它會在建立或更新 Lambda 函數時設定所需的彈性網路介面 (ENIs)。它也可讓您帳戶的 ENIs多個執行環境中共用。這可讓 Lambda 在函數擴展時更有效率地使用網路資源。
ENIs詳盡的資源,每個區域的軟性限制為 250。如果您為 VPC 存取設定 Lambda 函數,請監控彈性網路介面使用情況。相同 AZ 和相同安全群組中的 Lambda 函數可以共用 ENIs。如果您在 Lambda 中增加並行限制,請評估是否需要增加彈性網路界面。如果達到限制,則會調節呼叫已啟用 VPC 的 Lambda 函數。
- Pricing model
-
Fargate 定價是以分配給您容器的資源為基礎。具體而言,這表示您為每個任務選取的 vCPU 和記憶體。您每秒需支付 ,最低收費為一分鐘。成本直接與您的應用程式使用的資源相關。無論應用程式是否正在積極處理請求,您都會支付佈建項目的費用。Fargate 非常適合您需要特定資源組態的可預測工作負載。您可以透過調整配置的資源來最佳化成本。Fargate Spot 適用於 x86 和 ARM 型 Linux 工作負載。這可為容錯應用程式大幅節省成本。相關服務可能會產生額外費用。這些包括資料傳輸、儲存和聯網 (例如 VPC、Elastic Load Balancing)。
Lambda 具有不同的定價結構,其為事件驅動型和pay-per-execution。您需要根據請求數量和執行持續時間付費。持續時間的測量單位為毫秒。Lambda 也會考量您配置給函數的記憶體量。成本會根據使用的記憶體和執行時間來擴展。定價模型包含免費方案。它每月提供 100 萬個免費請求和 400,000 GB 的運算時間。這使得 Lambda 特別符合低容量、零星工作負載的成本效益。
Lambda 定價模型適用於流量模式無法預測或爆量的應用程式。您只需支付實際函數叫用和執行時間的費用。您不需要佈建或支付閒置容量。
透過 Lambda 受管執行個體,Lambda 提供使用 EC2 定價模型的執行個體型定價。這些包括隨需執行個體、預留執行個體和Compute Savings Plans。這可以提高穩定狀態或可預測工作負載的成本效率。
Fargate 和 Lambda 都符合 Compute Savings Plans 的資格。這些可以降低成本高達 66%,以換取對一致運算用量的承諾。這是以每小時美元為單位,為期 1 年或 3 年。
當您比較兩個服務之間的成本時,使用 Lambda 的流量通常較低。不過,Fargate 的每秒資源計費對於持續、高輸送量的工作負載往往更經濟。隨著請求量的增加,Lambda 成本會線性擴展。相反地,無論佈建資源中處理的請求為何,Fargate 成本都相對穩定。