MongoDB、Express、AngularJS和Node.js組合成一個全棧JavaScript應(yīng)用。AWS提供了各種服務(wù)來支持這些MEAN堆棧。
開發(fā)人員在構(gòu)建Web應(yīng)用時有許多選擇。市面上有無數(shù)的框架和語言可選,而像AWS這樣的云平臺可以方便地部署和擴展應(yīng)用程序。
MEAN堆棧由MongoDB、Express、AngularJS和Node.js組成,是AWS上最常用的Web開發(fā)框架之一。MEAN框架由構(gòu)建全棧JavaScript Web應(yīng)用程序所需的所有組件組成。
MongoDB作為NoSQL數(shù)據(jù)庫的后端,可以存儲應(yīng)用程序的數(shù)據(jù)。Express是最小的Node.js框架,可以輕松使用Javascript構(gòu)建服務(wù)器端Web應(yīng)用程序。AngularJS是一個用于構(gòu)建動態(tài)Web前端的客戶端Javascript框架。Node.js是一個基于Google Chrome的JavaScript引擎的服務(wù)器平臺,用于構(gòu)建網(wǎng)絡(luò)應(yīng)用。開發(fā)人員可以使用這些組件在AWS上部署一個MEAN堆棧。
EC2上安裝MEAN堆棧
要在單個彈性計算云(EC2)實例上安裝MEAN堆棧,請下載Node.js和MongoDB。開發(fā)人員需要安裝一些其他依賴項用于構(gòu)建和管理前端軟件包,包括Gulp和Bower。安裝完所有這些先決條件后,從NPM下載mean-cli軟件包。這給與開發(fā)人員對MEAN命令行接口的訪問,提供安裝,管理和更新應(yīng)用程序的功能。
MEAN堆棧適合在單個的AWS EC2實例上運行,但對生產(chǎn)應(yīng)用來說應(yīng)防止單點故障。
通常我們會看到應(yīng)用的數(shù)據(jù)庫層是在自己的EC2實例集上運行。在這種模型下,IT團(tuán)隊可以在多個EC2實例上托管一個MongoDB的副本集,即一個主實例和一個或多個分布在多個可用區(qū)中的輔助實例。如果主實例發(fā)生故障,則其中一個輔助實例將接管成為新的主實例,從而提供自動故障轉(zhuǎn)移的功能。這種架構(gòu)消除了應(yīng)用程序的數(shù)據(jù)庫層單點故障;它還提供地理冗余,因為AWS的可用區(qū)域是在物理上不同的數(shù)據(jù)中心。
當(dāng)構(gòu)建在MongoDB副本集上時,最少有兩個EC2實例可以托管剩余的組件。使用AngularJS構(gòu)建的應(yīng)用程序前端和用Express和Node.js編寫的JavaScript后端都可以在每個服務(wù)器上運行。開發(fā)人員還可以使用Auto Scaling組,該組可以啟動相同配置的其他實例,動態(tài)支持最終用戶請求的突增。在這兩種情況下,開發(fā)人員都可以使用Elastic Load Balancing來保持服務(wù)器的健康運行。
Docker容器中的MEAN堆棧
除了AWS的EC2實例上運行MEAN堆棧之外,容器也是開發(fā)人員使用的一種常見的選擇。這對于已經(jīng)為其他應(yīng)用使用容器技術(shù)的IT團(tuán)隊來說尤其如此。使用Docker容器在AWS上運行MEAN堆棧可以讓開發(fā)人員快速入手。
開發(fā)人員可以簡單地從Docker Hub中提取MEAN鏡像,而不是在EC2實例上自己安裝所有先決條件。當(dāng)在容器中運行鏡像時,IT團(tuán)隊就擁有了MEAN部署所需的一切。
對于生產(chǎn)環(huán)境,開發(fā)人員可以使用多個容器來實現(xiàn)高可用性和可擴展性。 數(shù)據(jù)庫層可以在自己的容器內(nèi)或跨多個容器運行;開發(fā)人員可以使用Docker Hun上的MEAN鏡像來快速構(gòu)建數(shù)據(jù)庫層。
對于需要多個容器的大型應(yīng)用,亞馬遜EC2容器服務(wù)(ECS)可以幫助在多個EC2實例之間進(jìn)行容器的管理和擴展。
Elastic Beanstalk上部署MEAN
構(gòu)建一個可擴展的高可用性的應(yīng)用對于開發(fā)人員來說不是一件容易的事。如果他們不想陷入支持AWS Auto Scaling和高可用性所需的所有基礎(chǔ)架構(gòu)工作,AWS Elastic Beanstalk是一個更輕松的選擇。
開發(fā)人員可以使用圖形和命令行工具來監(jiān)控和管理應(yīng)用,并且能夠?qū)W⒂趹?yīng)用的開發(fā),而讓Elastic Beanstalk來處理其他的任何事情。 該服務(wù)可以構(gòu)建由EC2實例或Docker容器組成的環(huán)境。
MEAN堆棧加無服務(wù)器組件
一種新興的開發(fā)模式是從架構(gòu)中剔除服務(wù)器,轉(zhuǎn)而使用托管服務(wù)。最終帶來可擴展和彈性的應(yīng)用架構(gòu),最大限度地減少開發(fā)人員必須管理的服務(wù)器基礎(chǔ)架構(gòu)的數(shù)量。
例如,使用AngularJS構(gòu)建的MEAN堆棧應(yīng)用的前端是由HTML和JavaScript文件組成。這些靜態(tài)資源可以存儲在亞馬遜簡單存儲服務(wù)中,由Amazon CloudFront內(nèi)容交付網(wǎng)絡(luò)服務(wù)來奉上。
Express可以在AWS Lambda中運行,運行Node.js的運行時環(huán)境。AWS Lambda允許開發(fā)人員無需配置或管理服務(wù)器就可以運行代碼。開發(fā)人員創(chuàng)建Lambda函數(shù),在AWS平臺上以服務(wù)的方式運行,他們可以通過亞馬遜API網(wǎng)關(guān)來創(chuàng)建一個托管API,通過HTTP提供對AWS Lambda的訪問。參照這種模型,IT團(tuán)隊使用AWS Lambda和亞馬遜API網(wǎng)關(guān)構(gòu)建后端API,前端應(yīng)用代碼通過HTTP調(diào)用該API。
最后一部分是數(shù)據(jù)庫層。EC2實例或Docker容器可以運行一個或多個MongoDB服務(wù)器。但是,如果總體目標(biāo)是要消除開發(fā)人員必須管理的服務(wù)器,DynamoDB(AWS云托管的NoSQL數(shù)據(jù)庫服務(wù))可以替換MongoDB層。
構(gòu)建一個無服務(wù)器模型絕對是超前沿的,但對于想要減少需要配置和管理的服務(wù)器基礎(chǔ)架構(gòu)數(shù)量的開發(fā)者來說,這是一個頗具吸引力的方法。最近發(fā)布的一個參考架構(gòu)包括了有關(guān)如何在AWS上搭建MEAN堆棧的代碼示例和指南,可以幫助企業(yè)IT開始動手執(zhí)行此項任務(wù)。