作者 丁建
本文根據(jù)歐特克中國(guó)研究院(ACRD)高級(jí)軟件工程師丁建在2014年6月7日的QClub活動(dòng)分享內(nèi)容整理而成。
過去一些年來,云計(jì)算逐漸發(fā)展起來,有人開始為云計(jì)算的設(shè)計(jì)總結(jié)可復(fù)用的模式,目前形成了不同的流派。
所有流派基本都遵循六條原則:
無狀態(tài),包括無狀態(tài)的鏡像和無狀態(tài)的實(shí)例。云上的實(shí)例是虛擬化的,很容易被搞壞,所以把需要持久化的數(shù)據(jù)和實(shí)例分離,無論是故障遷移、應(yīng)用擴(kuò)展還是升級(jí)都很容易。
松耦合,包括地緣、平臺(tái)、時(shí)間、數(shù)據(jù)格式方面的解耦
彈性。層、服務(wù)和組件都應(yīng)該是有彈性的
自動(dòng)化。一方面可適應(yīng)頻繁的擴(kuò)展,另一方面也是避免人工失誤導(dǎo)致的問題
全面的監(jiān)控/日志。線上做debug很困難,需要全面依賴詳細(xì)的日志
設(shè)計(jì)模式這一概念源自于建筑架構(gòu)師Christopher Alexander,其目的是通過為特定專業(yè)領(lǐng)域的設(shè)計(jì)問題的解決方案形成文檔,以形成某一類問題的通用解決方案。這一概念被引入計(jì)算機(jī)領(lǐng)域后,就有了軟件設(shè)計(jì)模式這一概念,即針對(duì)軟件設(shè)計(jì)的常見問題提供通用的、可復(fù)用的解決方案。
云計(jì)算設(shè)計(jì)模式,即為云計(jì)算系統(tǒng)設(shè)計(jì)領(lǐng)域歸納出一套通用的、可復(fù)用的解決方案。目前流傳較為廣泛的云計(jì)算設(shè)計(jì)模式有四個(gè)流派,分別來自微軟高級(jí)總監(jiān)Simon Guest,cloudpatterns.org在線社區(qū),德國(guó)斯圖加特大學(xué)的Frank Leymann教授等人所寫的Cloud Computing Patterns一書,以及AWS的三位日本同仁Ninja of Three。
Simon Guest是2010年微軟關(guān)鍵技術(shù)人才之一,他所描述的設(shè)計(jì)模式強(qiáng)調(diào)五個(gè)方面:可伸縮、多租戶、計(jì)算、存儲(chǔ)、通信(網(wǎng)絡(luò))。其他方面大家比較熟悉,這里提到的多租戶主要是指一個(gè)應(yīng)用實(shí)例服務(wù)多個(gè)用戶的場(chǎng)景,每個(gè)用戶被授權(quán)對(duì)應(yīng)用做一些定制,如界面或業(yè)務(wù)流程,但不能動(dòng)應(yīng)用代碼。Salesforce就是典型的多租戶模式。
CloudPatterns.org提出的模式是一種通過提問來進(jìn)展的模式,問題涉及到基礎(chǔ)架構(gòu)、可擴(kuò)展的資源池、可靠性與災(zāi)難恢復(fù)、安全、監(jiān)控等多個(gè)方面。一個(gè)典型的問答流程為:
共享資源的場(chǎng)景
疑問:如何將物理資源的使用率最大化?
問題:將每臺(tái)IT資源分配給一個(gè)獨(dú)立用戶會(huì)造成IT資源的浪費(fèi)。
解決方案:將物理IT資源虛擬化,拆分成更小的IT資源分配給多個(gè)用戶使用。
應(yīng)用:在物理機(jī)上創(chuàng)建虛擬機(jī)實(shí)例,將每一個(gè)虛擬機(jī)實(shí)例指定給用戶,而底層的物理IT資源是多用戶共享的。
涉及的機(jī)制:審計(jì)監(jiān)控、云存儲(chǔ)設(shè)備、云資源使用監(jiān)控、虛擬機(jī)系統(tǒng)、邏輯網(wǎng)絡(luò)設(shè)備、資源復(fù)制、虛擬服務(wù)器
復(fù)合模式:Burst In,Burst Out至私有云/公共云,彈性環(huán)境,IaaS,多租戶環(huán)境,PaaS,私有云,公共云,彈性環(huán)境,SaaS
Frank Leymann教授提出的模式跟上述模式類似,也是以問題作為起點(diǎn),然后描述背景,最后提出解決方案。比如對(duì)于松耦合,提出的問題是:
如何降低分布式應(yīng)用之間的依賴性以及應(yīng)用的各個(gè)組件之間的依賴性?
背景描述大意是降低依賴性的好處,即可伸縮性、故障處理與升級(jí)管理的簡(jiǎn)化。解決方案是引入broker作為交互的中轉(zhuǎn)。
Ninja of Three(簡(jiǎn)稱NoT)在2012年提出的AWS云系統(tǒng)設(shè)計(jì)模式列出了九大類48個(gè)模式,九大類分別是基本模式、靜態(tài)內(nèi)容、批處理、高可用、動(dòng)態(tài)內(nèi)容、數(shù)據(jù)上傳、關(guān)系數(shù)據(jù)庫(kù)、運(yùn)維、網(wǎng)絡(luò)。
AutoDesk主要使用AWS,因此本次分享主要會(huì)介紹NoT的設(shè)計(jì)模式。目前AutoCAD 360、在線渲染、以及Autodesk 360都在AWS上運(yùn)行。AutoDesk使用AWS的方式是所有的開發(fā)在內(nèi)部域網(wǎng)絡(luò)中進(jìn)行,源代碼不出域網(wǎng)絡(luò);所有的server都是EC2實(shí)例,包括負(fù)載均衡、度量、授權(quán)驗(yàn)證都是通過EC2實(shí)例完成;監(jiān)控采用CloudWatch;SNS用于做狀態(tài)異常郵件的推送;SQS在進(jìn)行Scaling的時(shí)候啟用;EBS用來存儲(chǔ)Server依賴庫(kù)與中間數(shù)據(jù),比如激光掃描文件,每一個(gè)文件都有幾十個(gè)G;數(shù)據(jù)庫(kù)采用SDB而不是DynamoDB,因?yàn)橛脩魯?shù)量不多,主要是單用戶資源量很大;S3用來做各種各樣的事情,比如客戶端安裝包、補(bǔ)丁、配置文件、日志信息都存在上面,因?yàn)樗鼙阋?、帶寬很穩(wěn)定、對(duì)并發(fā)訪問的支持很好,這個(gè)要好好利用;IAM用于管理資源的可訪問權(quán)限,以保證安全性。
VPC目前還沒有使用,因?yàn)锳utodesk開始用AWS的時(shí)候還沒有這個(gè)服務(wù)(2011年之前),而從非VPC環(huán)境遷移到VPC環(huán)境需要花很多功夫。不過VPC的好處很多,提供了一個(gè)簡(jiǎn)化、可靠的安全性,所以終歸考慮要上的。
回到NoT的云系統(tǒng)設(shè)計(jì)模式。首先是基本模式,其中覆蓋了縱向擴(kuò)展(Scale Up)、橫向擴(kuò)展(Scale Out)、計(jì)劃的橫向擴(kuò)展、按需擴(kuò)容、Snapshot和Stamp這幾種。對(duì)于每一種模式,NoT列出了該模式的優(yōu)點(diǎn)及相關(guān)注意事項(xiàng)。
縱向擴(kuò)展,即將small的實(shí)例換成large(增大)或micro(減少),優(yōu)點(diǎn)是容易操作,缺點(diǎn)是擴(kuò)展上限受限于該平臺(tái)最大能提供的實(shí)例資源,而且調(diào)整時(shí)間在30秒到數(shù)分鐘不等。目前對(duì)于應(yīng)用而言,Scale Up已經(jīng)不是主流的擴(kuò)展模式,主要是關(guān)系數(shù)據(jù)庫(kù)由于難以多機(jī)并行訪問而不得不主要從該模式下手。不過有時(shí)候,我們可以通過Scale Up獲得更好的經(jīng)濟(jì)性,比如1個(gè)large + 1個(gè)x-large的組合就要比3個(gè)large便宜,效果卻差不多。
橫向擴(kuò)展,即增加服務(wù)節(jié)點(diǎn)數(shù),好處是無需中斷服務(wù)即可完成擴(kuò)展,而且可以擴(kuò)展的上限高于Scale Up方案。理想的情況下,CloudWatch可以實(shí)現(xiàn)autoscaling,但事實(shí)是啟動(dòng)新的實(shí)例是有延時(shí)的,這導(dǎo)致該模式對(duì)突發(fā)增長(zhǎng)起不到什么作用。
相比之下,計(jì)劃的橫向擴(kuò)展更加適合容易預(yù)測(cè)的服務(wù)。比如我們做推廣活動(dòng),到了那個(gè)時(shí)間之前就可以提前把機(jī)器都起來warm up,活動(dòng)開始的時(shí)候?qū)嵗鸵呀?jīng)在線上ready了。
我們之所以要把負(fù)載均衡放在EC2上自己跑,就是因?yàn)槲覀兪褂昧硕喾Nscaling模式:Scale Out、Scale Up和Scheduled Scale,用自己的負(fù)載均衡就可以支持多種AMI類型,還可以精準(zhǔn)的控制擴(kuò)展開始和結(jié)束的時(shí)間——因?yàn)锳WS是按小時(shí)收費(fèi)的,如果autoscale,結(jié)果可能是用了2小時(shí)1分鐘,我們不得不花3小時(shí)的錢,而如果采用計(jì)劃模式就可以避免花這種冤枉錢。另外我們會(huì)時(shí)不時(shí)的把運(yùn)行了太久的實(shí)例踢出去,因?yàn)閷?shí)例運(yùn)行時(shí)間長(zhǎng)了之后穩(wěn)定性會(huì)變差。
對(duì)于靜態(tài)文件模式,NoT列出了Web Storage、Direct Hosting、Private Distribution、Cache Distribution和Rename Distribution等五種模式。我們首先用到Direct hosting,正如上面所說,我們的客戶端安裝文件和補(bǔ)丁文件、用戶配置文件、新版本說明、大文件都是存儲(chǔ)在S3上的。不過除此之外,我們還有一些特別的用法,就是用S3來生成日志數(shù)據(jù):我們將參數(shù)放在URL當(dāng)中,以此來傳遞度量數(shù)據(jù)。
更多建議: