近年來(lái),對(duì)于打造高度可擴(kuò)展的應(yīng)用程序,軟件架構(gòu)師們挖掘了若干相關(guān)理念,并以最佳實(shí)踐的方式加以實(shí)施。在今天的“信息時(shí)代”,這些理念更加適用于不斷增長(zhǎng)的數(shù)據(jù)集,不可預(yù)知的流量模式,以及快速響應(yīng)時(shí)間的需求。本文將強(qiáng)調(diào)并重申其中的一些傳統(tǒng)觀念,并討論他們?nèi)绾卧谌诤显朴?jì)算的發(fā)展,還將討論由于云計(jì)算的動(dòng)態(tài)性而產(chǎn)生的一些前所未有的概念(如彈性)。
云計(jì)算的商業(yè)優(yōu)勢(shì)
在云中構(gòu)建應(yīng)用程序有一些明顯的商業(yè)優(yōu)勢(shì),這里列出機(jī)構(gòu)主要特點(diǎn):
前期基礎(chǔ)設(shè)施投資幾乎為零:如果你要建立一個(gè)大型的系統(tǒng),它可能需要大量投資用于于機(jī)房,物理安全,硬件(機(jī)架,服務(wù)器,路由器,備用電源),硬件管理(電源管理,散熱),和運(yùn)維人員。由于高昂的前期成本,該項(xiàng)目通常甚至開(kāi)始之前需要多輪的管理審批和論證。現(xiàn)在,采用公有云環(huán)境,幾乎沒(méi)有固定成本或啟動(dòng)成本。
基礎(chǔ)設(shè)施即時(shí)性:在過(guò)去,如果你的應(yīng)用程序開(kāi)始大規(guī)模上量,而你的系統(tǒng)或基礎(chǔ)設(shè)施沒(méi)有在規(guī)模上跟上來(lái),將會(huì)極大影響應(yīng)用的成功。相反,如果前期投入了大量資金,而應(yīng)用沒(méi)有得到普及,你的系統(tǒng)或基礎(chǔ)設(shè)施又將成為失敗的犧牲品。通過(guò)在云環(huán)境自適應(yīng)部署應(yīng)用程序,就可以不必?fù)?dān)心是否要預(yù)先采購(gòu)大型的系統(tǒng)。這增加了靈活性,降低了風(fēng)險(xiǎn)和運(yùn)營(yíng)成本,因?yàn)槟憧梢愿鶕?jù)用于成長(zhǎng)的規(guī)模而按需支付費(fèi)用。
更有效地利用資源:系統(tǒng)管理員通常會(huì)擔(dān)心新硬件的采購(gòu)(資源耗盡的情況)和更高的基礎(chǔ)設(shè)施利用率(資源冗余余或閑置的情況)。在云環(huán)境中,我們可以根據(jù)該應(yīng)用程序請(qǐng)求量更高效地管理資源以及有效地按需釋放資源。
根據(jù)使用計(jì)算成本:用工具式的定價(jià),可以只對(duì)已使用的基礎(chǔ)設(shè)施付費(fèi)而不必支付那些分配了但未使用的基礎(chǔ)設(shè)施。這增加了一個(gè)節(jié)省成本的新維度。當(dāng)部署了優(yōu)化補(bǔ)丁來(lái)更新云應(yīng)用時(shí),你可以立竿見(jiàn)影地看到成本節(jié)約(有時(shí)會(huì)提前出現(xiàn)在下個(gè)月的賬單里)。例如,如果一個(gè)緩存層可以減少70%的數(shù)據(jù)請(qǐng)求,你馬上就可以在下一個(gè)賬單里看到回報(bào)。此外,如果您正在云上構(gòu)建一個(gè)平臺(tái),同樣可以把這個(gè)靈活可變的基于使用的成本結(jié)構(gòu)傳遞給自己的客戶。
縮短產(chǎn)品上市時(shí)間:并行化是加快處理速度的重要方式。如果一個(gè)計(jì)算密集型或數(shù)據(jù)密集型任務(wù)在一臺(tái)機(jī)器上并行處理需要運(yùn)行500小時(shí),通過(guò)云架構(gòu),能夠復(fù)制并運(yùn)行500個(gè)實(shí)例來(lái)處理相同的任務(wù),并在1小時(shí)內(nèi)完成。具有彈性的基礎(chǔ)設(shè)施提供了利用并行化的成本效益來(lái)縮短產(chǎn)品上市時(shí)間的能力。
云計(jì)算的技術(shù)優(yōu)勢(shì):
云計(jì)算的技術(shù)優(yōu)勢(shì)如下:
自動(dòng)化 :“腳本化的基礎(chǔ)設(shè)施”:可以通過(guò)充分利用可編程(API驅(qū)動(dòng)的)基礎(chǔ)設(shè)施,可重用構(gòu)建和部署系統(tǒng)。
自動(dòng)擴(kuò)展:無(wú)需任何人工干預(yù),就可以根據(jù)需求對(duì)應(yīng)用進(jìn)行雙向擴(kuò)展。自動(dòng)縮放提高了自動(dòng)化程度從而更加高效。
主動(dòng)擴(kuò)展:基于需求預(yù)期和流量模式的合理規(guī)劃,可以對(duì)應(yīng)用進(jìn)行雙向擴(kuò)展讓從而保持低成本運(yùn)營(yíng)。
更有效的開(kāi)發(fā)周期:可以很容易地克隆開(kāi)發(fā)和測(cè)試環(huán)境到生產(chǎn)系統(tǒng)。不同階段的環(huán)境可以很容易地推廣到生產(chǎn)系統(tǒng)。
改進(jìn)的可測(cè)性:不需要進(jìn)行硬件耗盡的測(cè)試。注入和自動(dòng)化測(cè)試能夠持續(xù)在開(kāi)發(fā)過(guò)程的每一個(gè)階段。我們可以建立一個(gè)預(yù)配置環(huán)境——“即時(shí)測(cè)試實(shí)驗(yàn)室”,僅用于一段時(shí)間的測(cè)試。
災(zāi)難恢復(fù)和業(yè)務(wù)連續(xù)性:云服務(wù)為維護(hù)一系列DR服務(wù)器和數(shù)據(jù)存儲(chǔ)提高了低成本選擇。使用云服務(wù),你可以在幾分鐘內(nèi)完成將某一地點(diǎn)的環(huán)境復(fù)制到其他地域的云環(huán)境中。
流量溢出到云環(huán)境:通過(guò)幾次點(diǎn)擊和有效的負(fù)載均衡策略,可以創(chuàng)建路由將超出的訪問(wèn)流量轉(zhuǎn)移到云環(huán)境中的一個(gè)完整的防溢應(yīng)用程序。
云計(jì)算中的基本理念
云計(jì)算強(qiáng)化了構(gòu)建高度可擴(kuò)展互聯(lián)網(wǎng)架構(gòu)的一些基本理念,同時(shí)引入了一些新的概念完全該變量應(yīng)用的構(gòu)建和部署方式。因此,當(dāng)你在從概念設(shè)計(jì)到實(shí)施的過(guò)程中,你可能會(huì)感到“什么都變了,卻又沒(méi)什么不同”。云計(jì)算改變了處理方式,模式,實(shí)踐方式,甚至哲學(xué)理念,同時(shí)強(qiáng)化了傳統(tǒng)的SOA原則,這些原則比以前更加重要。在本節(jié),你將看到云計(jì)算中的新概念以及對(duì)SOA原理的重申。
構(gòu)建傳統(tǒng)應(yīng)用時(shí),權(quán)衡體系結(jié)構(gòu)和經(jīng)濟(jì)性之間的關(guān)系需要大量的開(kāi)發(fā)經(jīng)驗(yàn). 云計(jì)算帶來(lái)了新的理念,現(xiàn)探討如下:
構(gòu)建可擴(kuò)展架構(gòu):
為了獲得一個(gè)可擴(kuò)展基礎(chǔ)設(shè)施的好處,構(gòu)建一個(gè)可擴(kuò)展的架構(gòu)非常關(guān)鍵。
云計(jì)算在設(shè)計(jì)上提供了概念上的無(wú)限可擴(kuò)展。但是,如果你的架構(gòu)部署可擴(kuò)展的,也無(wú)法使用到云計(jì)算的可擴(kuò)展性帶來(lái)的優(yōu)勢(shì)。
你必須確定架構(gòu)中的瓶頸和單點(diǎn)組件,確定架構(gòu)中哪些是不能按需部署的部分,然后重構(gòu)應(yīng)用來(lái)調(diào)整為可擴(kuò)展的架構(gòu),從獲得云計(jì)算的益處。
一個(gè)真正可擴(kuò)展應(yīng)用的特點(diǎn):
增加資源就可以按比例增加性能
一個(gè)可擴(kuò)展的服務(wù)可以處理異構(gòu)的兼容性
一個(gè)可擴(kuò)展的服務(wù)可以有效的運(yùn)營(yíng)
一個(gè)可擴(kuò)展的服務(wù)是彈性的
一個(gè)可擴(kuò)展的服務(wù)能夠在業(yè)務(wù)增長(zhǎng)時(shí)成本更低(單位成本隨著單元的增加而遞減)
這些特性應(yīng)該是應(yīng)用中的固有部分,在架構(gòu)設(shè)計(jì)時(shí)要銘記于心,基礎(chǔ)設(shè)施和應(yīng)用架構(gòu)要協(xié)同工作完成可擴(kuò)展性。
對(duì)彈性的理解
下圖解釋了一個(gè)云應(yīng)用架構(gòu)中按需擴(kuò)展的不同方法。
放大擴(kuò)展的途徑: 使用可擴(kuò)展的應(yīng)用架構(gòu)不用擔(dān)心為了滿足需求而大規(guī)模投資以及購(gòu)買更強(qiáng)大的服務(wù)器(垂直擴(kuò)展)這種方法通常工作到一個(gè)點(diǎn),但是在新設(shè)備部署前就可以降低成本 (見(jiàn)圖中的“Huge capital expenditure” )或者滿足業(yè)務(wù)增長(zhǎng)的需要 (見(jiàn)圖中“You just lostyour customers”).
傳統(tǒng)向外擴(kuò)展的途徑: 創(chuàng)建水平擴(kuò)展的架構(gòu)和投資小塊的基礎(chǔ)設(shè)施。大多數(shù)業(yè)務(wù)或大規(guī)模web應(yīng)用都采用如下的模式,分布式應(yīng)用組件,聯(lián)合數(shù)據(jù)集和SOA的設(shè)計(jì)。 這種方法通常比放大擴(kuò)展更有效。然而,這需要準(zhǔn)確的業(yè)務(wù)預(yù)期才能實(shí)現(xiàn)滿足需求的部署。經(jīng)常會(huì)導(dǎo)致容量過(guò)剩(“燒錢”) 和持續(xù)人工監(jiān)測(cè) (“浪費(fèi)人力成本”).此外,如果遇到業(yè)務(wù)的爆發(fā)式增長(zhǎng),系統(tǒng)將無(wú)法正常工作。
注意:這兩種方法具有初始啟動(dòng)成本,而且在本質(zhì)上是被動(dòng)的。
傳統(tǒng)結(jié)構(gòu)一般要預(yù)測(cè)幾年內(nèi)系統(tǒng)所需資源的數(shù)量,如果預(yù)計(jì)不足,應(yīng)用將沒(méi)有馬力處理預(yù)期外的流量,從而導(dǎo)致客戶的不滿。如果預(yù)計(jì)過(guò)高,又造成資源浪費(fèi)。
按需部署和彈性是云計(jì)算的天然方式(自動(dòng)彈性),使基礎(chǔ)設(shè)施與真實(shí)需求盡量匹配,因而可以提供資源利用率及壓縮成本。
彈性是云計(jì)算的一個(gè)基礎(chǔ)屬性。彈性通過(guò)微量的調(diào)整即可實(shí)現(xiàn)計(jì)算資源的可擴(kuò)展性增減。彈性給云計(jì)算帶來(lái)絕對(duì)的優(yōu)勢(shì),這非常重要。 作為云計(jì)算架構(gòu),要牢記這一概念,并應(yīng)用到系統(tǒng)架構(gòu)中,才能獲得云計(jì)算的最大利益。
傳統(tǒng)上,以一個(gè)固定的預(yù)部署的剛性基礎(chǔ)設(shè)施來(lái)構(gòu)建應(yīng)用,公司不需要每天都要進(jìn)行安裝部署。結(jié)果使大多數(shù)軟件架構(gòu)不適用快速部署和硬件縮減。既然獲取新資源需要較高的實(shí)施時(shí)間和追加投資,軟件架構(gòu)也不會(huì)在硬件利用率的優(yōu)化是投入時(shí)間和資源,應(yīng)用在低使用率的硬件上運(yùn)行時(shí)可以接受的。在分鐘級(jí)獲得新資源是不可能的,所以一個(gè)架構(gòu)的彈性也是被忽略的。
在云計(jì)算中,這是觀念的改變。云計(jì)算以流水線處理的方式獲取所需資源,不再需要預(yù)先采購(gòu)設(shè)備和保留閑置的硬件。云架構(gòu)可以在幾分鐘內(nèi)完成資源采購(gòu)或者自動(dòng)化采購(gòu),從而擁有了大量擴(kuò)展和響應(yīng)時(shí)間的優(yōu)勢(shì),同樣,也可以釋放掉那些閑置的或低利用率的資源。如果在你的系統(tǒng)架構(gòu)中不能擁抱這樣的變化,就不能分享云計(jì)算的全部好處。
作為一個(gè)云應(yīng)用架構(gòu)師,你需要?jiǎng)?chuàng)造性地思考在應(yīng)用系統(tǒng)中實(shí)現(xiàn)彈性。 例如,基礎(chǔ)設(shè)施被用來(lái)白天運(yùn)行,晚上構(gòu)建,在凌晨2點(diǎn)執(zhí)行回歸和單元測(cè)試兩個(gè)小時(shí) ,其他時(shí)間都是空閑的?,F(xiàn)在,基礎(chǔ)設(shè)施有了彈性, 可以只支付晚上兩個(gè)小時(shí)的計(jì)算時(shí)間。類似的,內(nèi)部故障經(jīng)常出現(xiàn)在容量的峰值(例如5 服務(wù)器 24x7x365),現(xiàn)在可以按照流量模式來(lái)按需配置(如5 服務(wù)器從9AM 到 5 PM 運(yùn)行,而只用2個(gè)服務(wù)器在5 PM 到 9 AM運(yùn)行)。
云架構(gòu)的智能彈性設(shè)計(jì)使基礎(chǔ)設(shè)施能夠按需運(yùn)行,這本身就是一門藝術(shù)。彈性應(yīng)該是一種架構(gòu)設(shè)計(jì)的需求或者系統(tǒng)屬性。你可能會(huì)問(wèn):系統(tǒng)架構(gòu)中的哪些組件或者層次可以成為彈性的?用什么技術(shù)可以使這些組件變得有彈性? 實(shí)現(xiàn)彈性對(duì)系統(tǒng)架構(gòu)的整體有何影響?
在下一章,將會(huì)展示在應(yīng)用中實(shí)現(xiàn)彈性的相關(guān)技術(shù)。有效地利用云計(jì)算的彈性優(yōu)勢(shì),是架構(gòu)中非常重要的觀念。
無(wú)懼約束
當(dāng)你決定架構(gòu)應(yīng)用向云計(jì)算遷移的時(shí)候,或者將自己的系統(tǒng)規(guī)范映射成云服務(wù)時(shí),要注意到云計(jì)算中沒(méi)有原來(lái)所需的準(zhǔn)確資源定義。例如,云計(jì)算中一個(gè)服務(wù)器沒(méi)有RAM的數(shù)量,或者一個(gè)數(shù)據(jù)庫(kù)實(shí)例需要更多的IOPS。
要理解云計(jì)算提供的是抽象資源,這才使按需實(shí)施模式變得強(qiáng)大。當(dāng)使用云資源時(shí)不用擔(dān)心不夠用,你的硬件沒(méi)有真正確切地復(fù)制在云環(huán)境中,這非常重要,你能夠獲得任何你所需要的資源。
例如,云計(jì)算沒(méi)有告訴你一個(gè)服務(wù)器中確切的內(nèi)存數(shù)量,使用了向memcached的分布式緩存,或者將數(shù)據(jù)在多個(gè)服務(wù)器上做了分區(qū)。如果你的數(shù)據(jù)庫(kù)需要更多的IOPS,且不能映射到云中的服務(wù),可以根據(jù)使用用例和數(shù)據(jù)類型選擇其他的云計(jì)算方案。如果是一個(gè)重度讀應(yīng)用,你可以將這些讀請(qǐng)求分布到一組同步的從服務(wù)中。另一種方法是,采用分片算法來(lái)路由數(shù)據(jù),或者采用各種數(shù)據(jù)庫(kù)集群解決方案。
回顧一下, 當(dāng)你將靈活性和按需實(shí)施能力結(jié)合在一起的時(shí)候,就已經(jīng)意識(shí)到資源約束的解除顯然提高了可擴(kuò)展性,改善了系統(tǒng)的整體性能。
虛擬化管理
云計(jì)算的到來(lái)將系統(tǒng)管理員的角色變成了“虛擬系統(tǒng)管理員”。這意味著這些管理員們更關(guān)注應(yīng)用本身那些有趣的事情,以及從整體上決定哪些對(duì)業(yè)務(wù)是最佳的。系統(tǒng)管理員不再需要部署服務(wù)器,安裝軟件以及連接網(wǎng)絡(luò)設(shè)備,所有這繁復(fù)的工作都可以通過(guò)幾下點(diǎn)擊和幾個(gè)命令行調(diào)用就完成了?;A(chǔ)設(shè)施的可編程化使云計(jì)算自動(dòng)化程度更高。系統(tǒng)管理員需要升級(jí)自己的技術(shù)結(jié)構(gòu)來(lái)學(xué)習(xí)如何使用腳本管理抽象的云資源。
類似地,DBA的角色也變成了“虛擬DBA”,通過(guò)基于web的終端管理資源,執(zhí)行腳本在容量用光時(shí)增加新的數(shù)據(jù)庫(kù)容量,以及每天的自動(dòng)化處理。
虛擬DBA必須學(xué)習(xí)新的部署方法(通過(guò)虛擬機(jī)鏡像),擁抱新的模型 (并行查詢,遠(yuǎn)程災(zāi)備和異步復(fù)制),反思數(shù)據(jù)的架構(gòu)方法 (分片,水平分區(qū),聯(lián)盟) 以及針對(duì)不同數(shù)據(jù)集采用不同的云存儲(chǔ)服務(wù)。
在傳統(tǒng)企業(yè)中,應(yīng)用開(kāi)發(fā)者沒(méi)有和網(wǎng)絡(luò)管理員在一起緊密的工作,網(wǎng)絡(luò)管理員也沒(méi)有關(guān)于應(yīng)用的膠水。結(jié)果是,網(wǎng)絡(luò)層和應(yīng)用架構(gòu)層優(yōu)化經(jīng)常被忽略。 通過(guò)云計(jì)算,二者被凝聚在一起,在將來(lái)做應(yīng)用架構(gòu)的時(shí)候,公司將形成更多的跨團(tuán)隊(duì)融合。