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