AWS利用微服務(wù)架構(gòu)提升自身性能
目前,一些大型企業(yè)都在AWS的基礎(chǔ)之上部署微服務(wù)架構(gòu)。這一舉措能夠?yàn)槠髽I(yè)帶來什么樣的好處呢?
微服務(wù)是一個(gè)新興的軟件架構(gòu),就是把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)十個(gè)的支持微服務(wù)。一個(gè)微服務(wù)的策略可以讓工作變得更為簡(jiǎn)便,它可擴(kuò)展單個(gè)組件而不是整個(gè)的應(yīng)用程序堆棧,從而滿足服務(wù)等級(jí)協(xié)議。
對(duì)于大型應(yīng)用程序來說,增加更多的用戶則意味著提供更大型的彈性計(jì)算云(EC2)實(shí)例規(guī)模,即便只是其中的一些功能擴(kuò)大了規(guī)模亦是如此。其最終結(jié)果就是企業(yè)用戶只需為支持超過微服務(wù)的那部分需求的EC2實(shí)例支付費(fèi)用。一些大型企業(yè)(如Netflix和Nike等)都在亞馬遜Web服務(wù)(AWS)的基礎(chǔ)之上部署了一個(gè)微服務(wù)架構(gòu),從而提高靈活性和以較低的價(jià)格來實(shí)現(xiàn)應(yīng)用程序的擴(kuò)展。Netflix橫跨其30個(gè)工程團(tuán)隊(duì)設(shè)計(jì)部署了500多個(gè)微服務(wù)。
在容器和代碼之間進(jìn)行選擇
微服務(wù)架構(gòu)是把應(yīng)用程序作為獨(dú)立可部署服務(wù)組合的一個(gè)設(shè)計(jì)方法。雖然對(duì)于這一概念還沒有確切的定義,但是這些架構(gòu)往往是圍繞業(yè)務(wù)能力、自動(dòng)化部署以及去中心化管理來組織設(shè)計(jì)的。
很多企業(yè)都正在使用容器技術(shù),例如基于亞馬遜EC2容器技術(shù)的Docker,就讓在EC2實(shí)例的托管集群上運(yùn)行應(yīng)用程序成為可能。這樣做就降低了對(duì)安裝、運(yùn)行和擴(kuò)展集群管理基礎(chǔ)設(shè)施的要求,而這正是部署單個(gè)微服務(wù)組件所需要的。但是并不需要為實(shí)施微服務(wù)而設(shè)計(jì)容器。
諸如AWS Lamba這樣的新服務(wù)讓部署一個(gè)微服務(wù)架構(gòu)且無需容器或虛擬機(jī)成為了可能。Lambda運(yùn)行代碼響應(yīng)事件和管理計(jì)算資源,從而讓建立響應(yīng)事件或流量的微服務(wù)集合變得更為簡(jiǎn)便。開發(fā)人員可以在Lambda上在諸如網(wǎng)站點(diǎn)擊這類毫秒級(jí)事件內(nèi)啟動(dòng)新服務(wù);計(jì)費(fèi)增量以100毫秒計(jì)。
簡(jiǎn)化至微服務(wù)架構(gòu)的轉(zhuǎn)移
企業(yè)的架構(gòu)師們有大量的***實(shí)踐可以遵循以便***地實(shí)現(xiàn)至微服務(wù)的轉(zhuǎn)移,具體包括正確選擇存儲(chǔ)設(shè)施、重新思考傳統(tǒng)IT豎井式系統(tǒng)、創(chuàng)建微服務(wù)組件之間的邊界,等等。
為每一個(gè)服務(wù)選擇***數(shù)據(jù)存儲(chǔ)。微服務(wù)架構(gòu)的優(yōu)點(diǎn)之一就是單個(gè)微服務(wù)都是松散耦合的。這樣就能夠讓開發(fā)人員選擇最適合某一特定微服務(wù)的開發(fā)語(yǔ)言和數(shù)據(jù)存儲(chǔ),而不是對(duì)所有的組件都使用一個(gè)數(shù)據(jù)庫(kù)。
使用微服務(wù)團(tuán)隊(duì)取代“豎井”。對(duì)于一個(gè)微服務(wù)架構(gòu),軟件開發(fā)團(tuán)隊(duì)必須保持密切協(xié)作和可擴(kuò)展的態(tài)勢(shì)。Conway的Law表示,一個(gè)軟件系統(tǒng)的接口結(jié)構(gòu)往往反映了開發(fā)這一軟件系統(tǒng)的組織的體系結(jié)構(gòu)。為了切換至微服務(wù)架構(gòu),企業(yè)需要組織員工成為有組織的生產(chǎn)團(tuán)隊(duì)并使用開發(fā)運(yùn)營(yíng)方法。
傳統(tǒng)軟件團(tuán)隊(duì)的組織架構(gòu)條塊分割,形成了涇渭分明的開發(fā)、質(zhì)保以及生產(chǎn)小組。“你需要一個(gè)小型團(tuán)隊(duì)來負(fù)責(zé)它的微服務(wù)——從概念形成、概要設(shè)計(jì)、詳細(xì)編碼、組織測(cè)試到實(shí)際部署——然后(據(jù)推測(cè))就是解bug和升級(jí)更新,一家應(yīng)用程序交付平臺(tái)供應(yīng)商N(yùn)ginx的產(chǎn)品負(fù)責(zé)人Owen Garret說。
像對(duì)待網(wǎng)絡(luò)應(yīng)用程序一樣看待微服務(wù)。必須在微服務(wù)組件之間建立強(qiáng)邊界。像對(duì)待網(wǎng)絡(luò)應(yīng)用程序一樣看待微服務(wù)意味著獨(dú)立開發(fā)團(tuán)隊(duì)不需要對(duì)不同微服務(wù)的內(nèi)部工作原理有一個(gè)透徹的理解。反之,微服務(wù)需要一個(gè)可執(zhí)行相關(guān)功能的API。
“你不需要透露你的微服務(wù)的任何內(nèi)部信息,”Garrett補(bǔ)充道。“另一個(gè)微服務(wù)的開發(fā)團(tuán)隊(duì)完全不需要了解微服務(wù)的表達(dá)方式或者內(nèi)部數(shù)據(jù)是如何對(duì)其進(jìn)行請(qǐng)求的。”只要相關(guān)API與其他微服務(wù)的關(guān)系不被打破,那么這個(gè)方法就可以讓開發(fā)人員按需求修改微服務(wù)。
使用聲明合同。程序使用服務(wù)合同的聲明特性,而不是執(zhí)行如何使用其它服務(wù)的程序。使用一個(gè)抽象方法來運(yùn)行需求是更簡(jiǎn)便的;一組解釋性的步驟將讓程序變得更為靜態(tài)。這意味著開發(fā)人員可以通過策略實(shí)施應(yīng)用程序并向基礎(chǔ)設(shè)施發(fā)送指令。
例如,開發(fā)人員可以不對(duì)EC2語(yǔ)義進(jìn)行編碼,他們可以使用策略把數(shù)據(jù)移至AWS產(chǎn)品。可以把聲明納入到容納微服務(wù)的容器中,或者把聲明嵌入到被用于與AWS產(chǎn)品進(jìn)行通訊的Lamba代碼中。
使用OODA循環(huán)。因?yàn)椴煌膱F(tuán)隊(duì)會(huì)開發(fā)不同的微服務(wù),所以企業(yè)必須確保軟件開發(fā)團(tuán)隊(duì)都有著一個(gè)共同的工作目標(biāo)。這樣,使用Netflix的Observe、Orient、Decide、Act(OODA)循環(huán)將會(huì)有很大幫助。
在一個(gè)OODA循環(huán)中,觀察(Observe)涉及檢查代碼庫(kù)的當(dāng)前狀態(tài)以尋求進(jìn)行創(chuàng)新的機(jī)會(huì);定向(Orient)表示分析指標(biāo)以了解已觀察到的現(xiàn)象;決定(Decide)則是制定和執(zhí)行項(xiàng)目計(jì)劃的過程;而行動(dòng)(act)是測(cè)試解決方案并將其投入生產(chǎn)的過程。
原文鏈接:http://www.searchcloudcomputing.com.cn/showcontent_89255.htm