AWS ECS 與 AWS Lambda:五大主要區(qū)別
云計(jì)算在過去 10 年徹底改變了軟件行業(yè)。如今,由于與本地基礎(chǔ)設(shè)施相比易于部署、高安全性、可擴(kuò)展性和低維護(hù)成本,大多數(shù)組織更喜歡在云上托管應(yīng)用程序和服務(wù)。
2006 年,亞馬遜推出了其云服務(wù)平臺Amazon Web Services (AWS),這是迄今為止領(lǐng)先的云服務(wù)提供商之一。目前,AWS 提供超過 200 種云服務(wù),包括云托管、存儲、機(jī)器學(xué)習(xí)和容器管理。
AWS Elastic Container Service (ECS) 和 AWS Lambda都是 Amazon 代碼部署解決方案,各有優(yōu)勢和用例。在本文中,我們將比較 AWS ECS 與 AWS Lambda,它們各自如何實(shí)現(xiàn)其功能,以及哪一個更適合您的業(yè)務(wù)需求。
什么是 AWS ECS?
AWS ECS 是一種容器管理解決方案,用于管理和部署 Docker 容器。它將每個容器視為一項(xiàng)任務(wù),并為用戶提供使用以下組件輕松運(yùn)行、停止和管理它們的功能:
- 任務(wù)定義: 這些定義了任務(wù)的配置。如果需要,用戶可以將單個定義應(yīng)用于多個任務(wù)。
- 任務(wù): 任務(wù)定義的實(shí)例稱為任務(wù)。任務(wù)可以獨(dú)立運(yùn)行,也可以作為服務(wù)的一部分運(yùn)行。簡單來說,任務(wù)就是一個正在運(yùn)行的容器。
- 集群: 多個正在運(yùn)行的任務(wù)組成一個集群。一個集群可以在其中應(yīng)用多個任務(wù)定義。
從本質(zhì)上講,容器化是一種部署技術(shù),它使用容器將整個應(yīng)用程序存儲在一個映像文件中,包括代碼、所有相關(guān)安裝和操作系統(tǒng) (OS) 要求。這些文件非常輕量級,易于部署,并為應(yīng)用程序運(yùn)行構(gòu)建了完整的環(huán)境。開發(fā)人員使用容器來避免依賴性問題的麻煩,并使部署盡可能順利。
現(xiàn)代基于微服務(wù)的應(yīng)用程序使用容器進(jìn)行部署。然而,管理多個容器變得具有挑戰(zhàn)性,這意味著大多數(shù)公司選擇 AWS ECS 來簡化他們的容器管理需求。AWS ECS 允許開發(fā)人員使用AWS Elastic Compute Cloud ( EC2 ) 部署他們的容器,用戶必須在其中維護(hù) EC2 基礎(chǔ)設(shè)施。
AWS ECS 和 AWS Fargate
AWS ECS 也可以通過AWS Fargate部署。 AWS Fargate 是一種新的計(jì)算引擎,可以自動創(chuàng)建和管理運(yùn)行容器所需的底層基礎(chǔ)設(shè)施。Fargate 只需要用戶上傳要部署的鏡像并選擇 CPU 和內(nèi)存需求。易于部署使 AWS Fargate 成為使用 AWS ECS 的更好選擇。
需要注意的一個關(guān)鍵點(diǎn)是 AWS ECS 解決了大規(guī)模應(yīng)用程序的部署問題,但這可能并不總是您想要管理的。如果需要部署一小段代碼怎么辦?或者您需要使用特定觸發(fā)器執(zhí)行的功能?在這種情況下,您可以求助于 AWS Lambda。
什么是 AWS Lambda?
AWS Lambda 是一種計(jì)算服務(wù),允許用戶在無服務(wù)器環(huán)境中部署少量代碼,在該環(huán)境中,服務(wù)器完全由云提供商在幕后管理。它原生支持 Java、Go、PowerShell、Node.js、C#、Python 和 Ruby,并提供允許用戶使用任何其他編程語言的運(yùn)行時 API。
AWS Lambda 中定義的函數(shù)在隔離的環(huán)境中運(yùn)行,每個函數(shù)都有其獨(dú)立的資源和文件系統(tǒng)視圖。這些函數(shù)綁定到觸發(fā)器,并在某些事件發(fā)生時執(zhí)行。例如,您可以為圖像創(chuàng)建預(yù)處理函數(shù)并將其存儲在 AWS Lambda 上?,F(xiàn)在,每當(dāng)有圖像文件上傳到AWS S3 bucket時,該函數(shù)就會被觸發(fā),圖像會在上傳前通過算法運(yùn)行。
其他 AWS Lambda 觸發(fā)器包括:
- 插入、更新和刪除數(shù)據(jù) Dynamo DB 表
- 對 S3 存儲桶中對象的修改
- 從 Amazon Simple Notification Service (SNS) 發(fā)送的通知。
另一個需要注意的基本點(diǎn)是 AWS Lambda 函數(shù)在容器中執(zhí)行,這進(jìn)一步有助于代碼的隔離和安全。適當(dāng)?shù)倪\(yùn)行時環(huán)境(Python、Node.js)在執(zhí)行期間在容器內(nèi)初始化。執(zhí)行完成后,容器將暫停并僅在后續(xù)調(diào)用時恢復(fù)。如果在特定時間段內(nèi)沒有調(diào)用,AWS 運(yùn)行時會刪除容器,之后必須初始化一個新容器。
AWS ECS 與 AWS Lambda:有何區(qū)別?
這兩種服務(wù)都可以幫助客戶部署應(yīng)用程序和代碼,但它們的用例卻截然不同。探索這些差異以了解兩者中哪一個最適合您的要求很重要。
下表概述了 AWS ECS 與 AWS Lambda 的并排比較:
亞馬遜云服務(wù)器AWS 拉姆達(dá)高性能和可擴(kuò)展的容器管理服務(wù)為響應(yīng)觸發(fā)器而運(yùn)行的功能執(zhí)行服務(wù),由無服務(wù)器環(huán)境提供支持。僅適用于容器。您需要做的就是將您的 Docker 鏡像指向一個容器注冊表,其余的由服務(wù)管理。只需要你寫代碼。目前,AWS Lambda 支持 Python、NodeJS、Java、Ruby、GO、C# 和 Powershell。用于運(yùn)行 Docker 容器和部署整個企業(yè)級應(yīng)用程序。用于使用幾行代碼構(gòu)建的小型應(yīng)用程序。任務(wù)可以運(yùn)行很長時間,并且可以通過與 Amazon CloudWatch 警報集成來擴(kuò)展任務(wù)計(jì)數(shù)。Lambda 函數(shù)執(zhí)行時間限制為 15 分鐘。正在運(yùn)行的 EC2 集群按小時收費(fèi),這意味著它們的成本更高。AWS Fargate 的 vCPU 起價約為每小時 0.04 美元。AWS Lambda 根據(jù)對更具成本效益的函數(shù)的請求數(shù)量計(jì)費(fèi)。
沒有明顯的贏家,因?yàn)檫@兩種服務(wù)似乎都有利于不同的領(lǐng)域。但是,比較中有一些關(guān)鍵要點(diǎn):
- AWS ECS 旨在處理大型應(yīng)用程序并提供可擴(kuò)展性,而 AWS Lambda 可快速執(zhí)行代碼以執(zhí)行重要的運(yùn)行時任務(wù)。
- 成本是另一個重要因素,AWS Lambda 在這方面勝出,因?yàn)槟恍铻檫\(yùn)行 Lambda 函數(shù)時使用的處理能力付費(fèi)。
要做出明智的決定,您首先需要探索您的業(yè)務(wù)需求。
AWS ECS 與 AWS Lambda:如何選擇
在上述服務(wù)中進(jìn)行選擇時,以下問題可以幫助明確決定:
- 我的應(yīng)用程序的大小是多少?
大型應(yīng)用程序在 AWS Lambda 上將難以管理;因此,AWS ECS 是更好的選擇。
- 我的應(yīng)用程序的運(yùn)行時間是多少?
AWS Lambda 將程序執(zhí)行時間限制為 15 分鐘,因此如果應(yīng)用程序要運(yùn)行更長時間,AWS ECS 是更好的選擇。
- 我的軟件開發(fā)和部署預(yù)算是多少?
這兩種服務(wù)似乎都非常適合各自的場景,但 AWS Lambda 更便宜的定價結(jié)構(gòu)使其比 AWS ECS 更具優(yōu)勢。
- 我的項(xiàng)目配置要求是什么?
盡管簡單,AWS ECS 仍然比 AWS Lambda 有更多的設(shè)置要求,但它提供了更大的配置靈活性。相比之下,如果您希望程序以最少的配置立即執(zhí)行,AWS Lambda 是更好的選擇。
這些問題應(yīng)該有助于在 AWS ECS 與 AWS Lambda 之間選擇部署服務(wù)時做出更好的決策。
結(jié)論
如果您使用 Amazon Web Services,您目前可能至少使用了這些核心 AWS 功能中的一項(xiàng)。它們提供的好處有時似乎重疊。但是每項(xiàng)服務(wù)都有獨(dú)特的功能,您可能希望在某些情況下使用這些功能,而在其他情況下則不需要那么多。
我們詳細(xì)的 AWS ECS 與 AWS Lambda 比較強(qiáng)化了這一觀點(diǎn),很明顯,前者適用于大型應(yīng)用程序,而后者在您需要快速執(zhí)行代碼以執(zhí)行重要的運(yùn)行時任務(wù)時效果更好。