背景
隨著容器化的流行和普遍,我們對(duì)APP的部署和構(gòu)建方式都發(fā)生了很大的改變。
為了適應(yīng)這一潮流,很多云服務(wù)供應(yīng)商(比如AWS)發(fā)布了各種新的service,幫助簡(jiǎn)化APP所需容器在云上的編排,部署和管理。
比如在AWS上,最常見(jiàn)兩個(gè)容器編排service:
- ECS
- EKS
以ECS為例, 雖然ECS可以幫助我們編排APP中不同task所需的不同容器,以及容器之間的聯(lián)系。
但是我們不能僅僅只關(guān)注在容器上,我們還需考慮和配置容器運(yùn)行在什么樣的云服務(wù)上。
為了保證APP服務(wù)的可用性和可擴(kuò)展性,我們需要管理和配置容器所運(yùn)行在的云服務(wù)集群(比如所有的容器都運(yùn)行在EC2上,我們就需要管理我們的EC2集群)
由此,及時(shí)我們使用了ECS,我們?nèi)匀恍枰渲煤凸芾砣萜鬟\(yùn)行在的實(shí)例。
由于容器化的普及,我們希望關(guān)注點(diǎn)能夠更集中在打包了我們所有服務(wù)的容器上,而并非底層實(shí)例,此時(shí)fargate應(yīng)運(yùn)而生。
接下來(lái),我們就要開(kāi)始學(xué)習(xí)一種新的service: Fargate
一個(gè)專(zhuān)門(mén)處理容器的serverless計(jì)算平臺(tái), 簡(jiǎn)而言之,
就是一個(gè)專(zhuān)門(mén)用來(lái)運(yùn)行容器的serverless的云計(jì)算服務(wù)。
Need For AWS Fargate
當(dāng)docker容器化還沒(méi)有出現(xiàn)的時(shí)候,人們通常將自己的APP部署到VM上。
所以當(dāng)時(shí)的云服務(wù)商AWS發(fā)布了自己的云計(jì)算服務(wù)AWS EC2, EC2就是一個(gè)虛擬機(jī), 用戶(hù)可以直接將自己服務(wù)部署到EC2實(shí)例上。
為了讓APP更快的被部署,我們通常將自己的App和操作系統(tǒng)一起打包成一個(gè)AMI。
然后直接作為EC2的AMI被運(yùn)行即可。
然后docker 容器化開(kāi)始盛行,用戶(hù)開(kāi)始將自己的APP部署到docker容器中,將自己的APP和所需的所有工具打包成一個(gè)docker鏡像, 在需要的時(shí)候在任何有docker engine的實(shí)例上運(yùn)行起來(lái)即可。
那么容器和虛擬機(jī)的最大區(qū)別其實(shí)就是,在同一個(gè)實(shí)例上運(yùn)行的所有容器都共享主機(jī)的操作系統(tǒng), 而不同的虛擬機(jī)中都有自己的操作系統(tǒng),其實(shí)就是一個(gè)獨(dú)立的主機(jī), 一個(gè)EC2實(shí)例其實(shí)就是一個(gè)云上虛擬機(jī)。

隨著容器化的普及,人們更傾向于將自己的APP部署到容器中而不是虛擬機(jī)中,因此人們從以前操作虛擬機(jī)轉(zhuǎn)成了現(xiàn)在操作容器。通常一個(gè)APP能夠工作,需要多個(gè)容器配合工作, 為了方便APP的部署,AWS 發(fā)布了ECS
ECS就是一個(gè)擁有高擴(kuò)展性和高性能的容器編排工具,ECS幫助用戶(hù)減少了很多容器管理的開(kāi)銷(xiāo),但是用戶(hù)仍然需要管理容器運(yùn)行在的實(shí)例集群,也就是容器運(yùn)行的宿主虛擬機(jī)集群。
對(duì)于用戶(hù)來(lái)說(shuō)雖然ECS能夠幫助編排和管理容器, 但是用戶(hù)依然需
部署和管理容器運(yùn)行在的底層宿主虛擬機(jī)集群,那么如果還有一個(gè)工具,能夠負(fù)責(zé)部署和管理容器運(yùn)行在宿主集群,這樣用戶(hù)就可以只關(guān)注于APP。因此AWS Fargate出現(xiàn)
What is AWS Fargate
AWS Fargate 是 serverless 計(jì)算服務(wù), 專(zhuān)門(mén)用于運(yùn)行容器 。Fargate負(fù)責(zé)部署和配置你所有容器運(yùn)行所需要的實(shí)例集群(VM) , 并且根據(jù)流量對(duì)集群進(jìn)行擴(kuò)縮容。
AWS Fargate 也是 ECS 的compute engine,ECS作為容器編排工具,負(fù)責(zé)編排容器,但是不負(fù)責(zé)容器所運(yùn)行在的底層實(shí)例(虛擬機(jī))集群。Fargate和EC2是ECS現(xiàn)有的兩種不同的compute engine,也就是兩種不同的launch type
- Fargate是serverless的compute engine (Fargate Launch Type)
- EC2 是非serverless的compute engine(EC2 Launch Type)
AWS Fargate vs Lambda
AWS Fargate 是 serverless compute service, 這個(gè)定義想必你一定不會(huì)覺(jué)得陌生,因?yàn)槲覀冏畛S玫膌ambda就是一個(gè)serverless compute service.
AWS Fargate 和 lambda 雖然都是serverless的服務(wù)。區(qū)別在于:
- Fargate主要用于運(yùn)行container(容器)
在本地 通常為了讓你的APP能夠正常運(yùn)行,我們可能會(huì)使用docker-compose(docker容器編排工具)同時(shí)setup多個(gè)容器(APP + DB + nginx容器...),并讓他們能夠正常的運(yùn)行在我的機(jī)器上。
在AWS上 Fargate只是一種serverless的服務(wù),類(lèi)似于在云上按需部署并setup起來(lái)多個(gè)實(shí)例,用于運(yùn)行多個(gè)容器。由此觀之,想要Fargate單獨(dú)工作似乎還不行,還需要一個(gè)在AWS上的容器編排工具, 此時(shí)你應(yīng)該已經(jīng)猜到了,就是ECS(PS: EKS也可以作為容器編排工具和Fargate一起工作,本文就不提了)。
因此Fargate又被看作為ECS的compute engine。
- Lambda其實(shí)是一個(gè)按需啟動(dòng)的實(shí)例,使用AWS lambda你不需要考慮實(shí)例的配置和部署工作, 只要選擇一種運(yùn)行環(huán)境,并把需要運(yùn)行的代碼上傳到lambda上,lambda就會(huì)根據(jù)流量進(jìn)行自動(dòng)的擴(kuò)縮容工作,你完全不需要擔(dān)心。