亞馬遜Elastic Beanstalk應(yīng)用警告一二三
亞馬遜的Elastic Beanstalk是該公司的一個(gè)平臺(tái)即服務(wù)(PaaS),它是在彈性計(jì)算云、彈性負(fù)載平衡器以及簡(jiǎn)單存儲(chǔ)服務(wù)基礎(chǔ)之上開(kāi)發(fā)的。消費(fèi)者只需為他們所使用的基礎(chǔ)服務(wù)支付費(fèi)用,而亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)則免費(fèi)為其提供平臺(tái)?,F(xiàn)在,有兩種類型的Elastic Beanstalk應(yīng)用程序:網(wǎng)絡(luò)應(yīng)用程序和后端應(yīng)用程序。在這個(gè)平臺(tái)上開(kāi)始工作之前,選擇正確的應(yīng)用程序類型是非常重要的。
從本質(zhì)上來(lái)說(shuō),亞馬遜Elastic Beanstalk是一個(gè)配置管理和代碼部署的系統(tǒng),它可自動(dòng)管理各種AWS資源。用戶可以在GIT版本控制系統(tǒng)中存放自己的代碼,并把新版本的代碼直接推至Beanstalk以便于發(fā)布一個(gè)新版本。Elastic Beanstalk把壓縮版本的代碼存放在簡(jiǎn)單存儲(chǔ)服務(wù)(即S3)中,它可允許開(kāi)發(fā)人員把代碼部署至由AutoScaling組管理的彈性計(jì)算云(EC2)實(shí)例中。一個(gè)彈性負(fù)載平衡器(ELB)能夠自動(dòng)將流量發(fā)送至AutoScaling組,后者也是由Elastic Beanstalk配置的。
開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序
網(wǎng)絡(luò)應(yīng)用程序直接通過(guò)瀏覽器響應(yīng)用戶請(qǐng)求。它們可以處理由ELB發(fā)送來(lái)的流量,可以有選擇地通過(guò)諸如Nginx這樣的代理。當(dāng)然,用戶還可以讓Nginx 直接提供靜態(tài)內(nèi)容——而不是要求應(yīng)用程序來(lái)管理靜態(tài)文件。但是,通常最好還是通過(guò)AWS的CloudFront來(lái)提供靜態(tài)內(nèi)容,這樣用戶就不必從應(yīng)用程序服務(wù)器提供任何靜態(tài)資源了。
因?yàn)榇矸?wù)器會(huì)增加限制(它不支持Socket.io或諸如SPDY、HTTP2這樣的高級(jí)HTTP協(xié)議),我建議完全禁用代理服務(wù)器。盡管它們被稱為網(wǎng)絡(luò)應(yīng)用程序,這一類型的應(yīng)用程序可以監(jiān)聽(tīng)任何的端口(或者多個(gè)端口),以及所有的協(xié)議。網(wǎng)絡(luò)應(yīng)用程序的關(guān)鍵在于它們是直接響應(yīng)用戶請(qǐng)求的,并在彈性負(fù)載平衡器后被代理。
開(kāi)發(fā)后端應(yīng)用程序
后端應(yīng)用程序監(jiān)聽(tīng)一個(gè)SQS隊(duì)列以捕獲請(qǐng)求。后端應(yīng)用程序的一個(gè)應(yīng)用示例就是處理上傳視頻,并將視頻文件轉(zhuǎn)換成一個(gè)流行的移動(dòng)格式。SQS和基于亞馬遜 Beanstalk的后端應(yīng)用程序可以管理多個(gè)工作負(fù)載。如果用戶正在使用SQS來(lái)處理批量的后端應(yīng)用程序,那么就可以考慮使用一個(gè)Beanstalk的后端應(yīng)用程序來(lái)自動(dòng)實(shí)現(xiàn)對(duì)代碼更新的管理。
Elastic Beanstalk中的應(yīng)用程序監(jiān)控
時(shí)刻關(guān)注應(yīng)用程序的運(yùn)行狀態(tài)總是一個(gè)好主意。AWS的Elastic Beanstalk有很多自動(dòng)化檢查措施來(lái)檢測(cè)一些常見(jiàn)的問(wèn)題。任何環(huán)境的運(yùn)行狀態(tài)都可以通過(guò)Elastic Beanstalk控制面板反映出來(lái),這是一個(gè)解決問(wèn)題的良好開(kāi)端。
紅色的應(yīng)用程序環(huán)境。如果用戶的應(yīng)用程序環(huán)境是紅色的,那么這通常意味著所有的連接都沒(méi)有處于正常工作狀態(tài)。這往往表明,用戶的所有服務(wù)器都發(fā)生了問(wèn)題,或者通用服務(wù)中出現(xiàn)了問(wèn)題。
為了解決這樣一個(gè)紅色的環(huán)境,可將不再接受連接的現(xiàn)有服務(wù)器移除。如果用戶制定了一個(gè)AutoScaling策略來(lái)使用ELB運(yùn)行狀態(tài)檢測(cè)而不是實(shí)例運(yùn)行狀態(tài)檢測(cè),那么系統(tǒng)將自動(dòng)移除服務(wù)器。如果用戶還沒(méi)有這么做,那么可以使用EC2管理控制臺(tái)嘗試手動(dòng)關(guān)閉這一環(huán)境中的所有實(shí)例。用戶應(yīng)當(dāng)能夠在控制臺(tái)中搜索環(huán)境名稱,并確定哪一個(gè)服務(wù)器與之匹配。
檢查位于運(yùn)行狀態(tài)正常指標(biāo)以下的日志;有時(shí)候用戶會(huì)看到表示已刪除實(shí)例或正在啟動(dòng)實(shí)例的日志。如果是這樣的話,用戶可能需要等待系統(tǒng)自行恢復(fù)正常。如果不是這樣,那么可能需要用戶進(jìn)行進(jìn)一步的調(diào)查。
黃色的應(yīng)用程序環(huán)境。如果用戶的應(yīng)用程序環(huán)境是黃色的,那么這意味著該服務(wù)正處于一個(gè)“降級(jí)”狀態(tài)。這意味著,有部分的服務(wù)器發(fā)生了故障或者系統(tǒng)檢測(cè)到一個(gè)連鎖的故障,但還沒(méi)有導(dǎo)致系統(tǒng)的完全停用。
當(dāng)用戶看到這樣一個(gè)圖標(biāo)時(shí),用戶就應(yīng)當(dāng)立即著手進(jìn)行服務(wù)檢查。Beanstalk通??梢栽谶@一點(diǎn)上恢復(fù)并啟動(dòng)替代的服務(wù)器,但是如果用戶發(fā)現(xiàn)服務(wù)器處于 “垂死”或者“死亡”狀態(tài),那么直接手動(dòng)關(guān)閉往往是一個(gè)好主意。如果服務(wù)器啟動(dòng)時(shí)間過(guò)長(zhǎng)以及能夠響應(yīng)請(qǐng)求的等候時(shí)間過(guò)長(zhǎng),那么就會(huì)發(fā)生這樣的問(wèn)題。AWS 的Elastic Beanstalk會(huì)對(duì)實(shí)例進(jìn)行運(yùn)行狀態(tài)檢查以確保它們?cè)谶M(jìn)入ELB之前接受流量,但是如果實(shí)例要花費(fèi)5到10分鐘以上的時(shí)間來(lái)接受請(qǐng)求,那么我們就會(huì)假定它們發(fā)生了問(wèn)題,同時(shí)系統(tǒng)就會(huì)自動(dòng)替換它們。這可能會(huì)導(dǎo)致系統(tǒng)無(wú)休止地啟動(dòng)和關(guān)閉服務(wù)器,所以請(qǐng)務(wù)必確保服務(wù)器啟動(dòng)的平均時(shí)間低于10分鐘。
灰色的應(yīng)用程序環(huán)境。灰色狀態(tài)表示AWS Elastic Beanstalk正在對(duì)應(yīng)用程序環(huán)境進(jìn)行變更,或者無(wú)法對(duì)應(yīng)用程序環(huán)境進(jìn)行變更。一旦對(duì)應(yīng)用程序環(huán)境進(jìn)行了變更——要么是通過(guò)代碼部署或者用戶在控制臺(tái)進(jìn)行配置變更——用戶在進(jìn)行任何其它變更之前必須等待這些變更生效。
如果用戶的環(huán)境長(zhǎng)時(shí)間地處于這一狀態(tài)下,那么可首先嘗試重建該環(huán)境。用戶可能需要使用一個(gè)新的環(huán)境來(lái)替代它。在大多數(shù)情況下,如果用戶需要確保所有的設(shè)置都與之前相同,那么就可以基于一個(gè)現(xiàn)有的環(huán)境進(jìn)行環(huán)境復(fù)制。如果由于變更仍在列表中等待的原因,用戶無(wú)法更換出現(xiàn)問(wèn)題的環(huán)境,那么可能需要“取消變更”。如果還是不行,請(qǐng)聯(lián)系A(chǔ)WS的技術(shù)支持團(tuán)隊(duì)來(lái)移除有問(wèn)題的環(huán)境。
一直以來(lái),我經(jīng)常遇到這種出現(xiàn)灰色狀態(tài)環(huán)境的問(wèn)題,因?yàn)镋lastic Beanstalk無(wú)法實(shí)現(xiàn)其配置同步。如果用戶嘗試手動(dòng)修改任何處于Beanstalk控制下的資源(例如負(fù)載平衡器),那么就會(huì)發(fā)生這個(gè)問(wèn)題。如果用戶嘗試修改負(fù)載平衡器配置,那么就必須通過(guò)Elastic Beanstalk來(lái)進(jìn)行修改,或者可以完全終止打破環(huán)境并讓其進(jìn)入一個(gè)無(wú)法恢復(fù)的狀態(tài)。
綠色的應(yīng)用程序環(huán)境。綠色狀態(tài)的應(yīng)用程序環(huán)境表明應(yīng)用程序一切運(yùn)行狀態(tài)良好。
如果用戶仍然遇到問(wèn)題,那可能是代碼的或配置的——而不會(huì)是服務(wù)器的或者Beanstalk能夠檢測(cè)到的。此時(shí),可檢查應(yīng)用程序日志文件以求獲得更多信息。用戶也可以使用Elastic Beanstalk來(lái)執(zhí)行日志快照功能或者直接登錄服務(wù)器以嘗試對(duì)問(wèn)題進(jìn)行調(diào)試。
原文鏈接:http://www.searchcloudcomputing.com.cn/showcontent_89001.htm