OpenStack是一種開(kāi)源產(chǎn)品,得到了一大批志愿者和領(lǐng)薪代碼貢獻(xiàn)者的支持,它讓人們意識(shí)到了一種全面審查的架構(gòu)和一種深思熟慮的設(shè)計(jì)具有的重要性,這種架構(gòu)和設(shè)計(jì)似乎貫穿著OpenStack峰會(huì)的主題。無(wú)論這種意識(shí)是切實(shí)存在的還是只是個(gè)人感覺(jué),出席亞馬遜re:Invent或谷歌I/O等大會(huì)的人士對(duì)于旗艦產(chǎn)品展現(xiàn)出來(lái)的關(guān)注度和責(zé)任感似乎不如他們?cè)诔鱿?015年5月OpenStack大會(huì)時(shí)展現(xiàn)出來(lái)的關(guān)注度和責(zé)任感。
伴隨眾多OpenStack峰會(huì)與會(huì)人士的這種個(gè)人投入而來(lái)的是,他們更加深入地了解每天做出的架構(gòu)和設(shè)計(jì)方面的逐步?jīng)Q策具有的重要性,那是由于這些決策可能會(huì)對(duì)未來(lái)的版本發(fā)布帶來(lái)影響。正因?yàn)槿绱?,在評(píng)估每一個(gè)變動(dòng)、更新、補(bǔ)丁和貢獻(xiàn)時(shí),既要顧及OpenStack使命聲明,又要顧及OpenStack的基本設(shè)計(jì)準(zhǔn)則。使命聲明既簡(jiǎn)單又野心勃勃:力求開(kāi)發(fā)出無(wú)所不在的OpenStack云計(jì)算平臺(tái),有望滿足公有云和私有云(無(wú)論規(guī)模大小)的要求,為此要做到易于部署、能夠大規(guī)模擴(kuò)展。說(shuō)到編寫和部署代碼,下面所列的幾條設(shè)計(jì)準(zhǔn)則來(lái)得更重要一點(diǎn)。這樣一來(lái),了解這些準(zhǔn)則如何適用于OpenStack軟件的發(fā)展道路顯得至關(guān)重要。
可擴(kuò)展性和彈性。第一條設(shè)計(jì)準(zhǔn)則明確規(guī)定,“可擴(kuò)展性和彈性是我們的主要目標(biāo);”第二條準(zhǔn)則表明,限制主目標(biāo)的任何組件都應(yīng)該是可選的。這打造了一個(gè)令人關(guān)注的生態(tài)系統(tǒng),其中有數(shù)百個(gè)大有幫助、不過(guò)隨意性的插件。Dark Secret Software公司的首席執(zhí)行官Sandy Walsh是名經(jīng)驗(yàn)豐富的OpenStack軟件開(kāi)發(fā)人員,他說(shuō):“如果你看一下OpenStack代碼,就會(huì)發(fā)現(xiàn)有許多可選的組件。一切基本上就是插件。”
異步性。等待響應(yīng)、阻止入站傳輸會(huì)要了大規(guī)模企業(yè)系統(tǒng)的命。因而,OpenStack軟件開(kāi)發(fā)的第三條準(zhǔn)則就是“一切都應(yīng)該是異步的。”當(dāng)然了,這也有其不足之處。大量耗用內(nèi)存的應(yīng)用程序會(huì)從異步操作中受益匪淺,而大量耗用處理器的應(yīng)用程序?qū)?huì)飽受其苦。但是單一機(jī)器上的孤立性能并不是OpenStack的目標(biāo),大規(guī)模橫向擴(kuò)展性才是其目標(biāo)。正因?yàn)槿绱耍惒叫允且粋€(gè)優(yōu)先事項(xiàng)。Walsh說(shuō):“可擴(kuò)展性和彈性是兩個(gè)主要目標(biāo)。這種系統(tǒng)一定要能夠擴(kuò)展。”
橫向擴(kuò)展。第四條設(shè)計(jì)準(zhǔn)則認(rèn)為,“所有代碼應(yīng)該能夠橫向擴(kuò)展。”縱向擴(kuò)展是個(gè)優(yōu)點(diǎn),但是編寫隨著越來(lái)越多的內(nèi)存和處理器安裝到機(jī)器上,可以相應(yīng)擴(kuò)展的代碼并不需要大量的規(guī)劃。另一方面,開(kāi)發(fā)一個(gè)能夠橫向擴(kuò)展的系統(tǒng)可能是個(gè)挑戰(zhàn),尤其是隨著參與節(jié)點(diǎn)的數(shù)量增至三倍或四倍,更是困難重重。所有設(shè)計(jì)決策務(wù)必要牢記橫向擴(kuò)展這一條準(zhǔn)則。
狀態(tài)管理。企業(yè)Java應(yīng)用程序遇到的最常見(jiàn)的性能問(wèn)題之一就是,隨意使用基于狀態(tài)的變量,導(dǎo)致企業(yè)系統(tǒng)運(yùn)行速度減慢,幾乎不可能實(shí)現(xiàn)線性擴(kuò)展。外設(shè)JVM語(yǔ)言已證明了使用不可變數(shù)據(jù)在可擴(kuò)展性方面具有的好處,所以發(fā)現(xiàn)第四條準(zhǔn)則是“使用無(wú)共享(SN)架構(gòu)或分片(sharding)”也就不足為奇了。
一切都必須分布式。下一條準(zhǔn)則就是“一切都要分布式”,尤其是“邏輯”。Hadoop等大數(shù)據(jù)成功故事一再證明了這個(gè)理念;如果能確保數(shù)據(jù)和邏輯能協(xié)同運(yùn)行,而不需要網(wǎng)絡(luò)調(diào)用,就能大大改善性能和可擴(kuò)展性。
測(cè)試、測(cè)試、測(cè)試。最后,最終一條準(zhǔn)則堅(jiān)決主張開(kāi)發(fā)人員必須“測(cè)試一切”,這不足為奇。要是沒(méi)有經(jīng)過(guò)一系列全面的測(cè)試,任何東西都不得進(jìn)入代碼庫(kù);未經(jīng)測(cè)試就貿(mào)然提交的代碼、補(bǔ)丁或特性改進(jìn)根本得不到接受和認(rèn)可。這與其說(shuō)是一條準(zhǔn)則,還不如說(shuō)是標(biāo)準(zhǔn)的盡職調(diào)查,而這也是確保沒(méi)有遺漏的好方法。
想法簡(jiǎn)單,執(zhí)行復(fù)雜。如果這些簡(jiǎn)單的設(shè)計(jì)準(zhǔn)則運(yùn)用于異常復(fù)雜的問(wèn)題,開(kāi)發(fā)的OpenStack軟件就會(huì)變得極其令人關(guān)注。一個(gè)典例就是OpenStack的分布式對(duì)象存儲(chǔ)系統(tǒng)Swift的工作方式。SwiftStack的技術(shù)主管John Dickinson說(shuō):“借助Swift,你將存儲(chǔ)的數(shù)據(jù)與用來(lái)存儲(chǔ)數(shù)據(jù)的實(shí)際介質(zhì)分離開(kāi)來(lái)。相比較過(guò)去的數(shù)據(jù)存儲(chǔ)策略,這正是讓Swift成為全新策略的特性。”有了這種方法,開(kāi)發(fā)方面的人員只需要操心將數(shù)據(jù)傳送給Swift,將Swift當(dāng)成它似乎就是一種公用資源。從操作的角度來(lái)看,這里要擔(dān)心的唯一問(wèn)題是,服務(wù)器和驅(qū)動(dòng)器集群是否處于良好的工作狀態(tài)。這種高度可擴(kuò)展的方法日臻完善,運(yùn)用OpenStack設(shè)計(jì)準(zhǔn)則來(lái)處理這個(gè)難題:在基于云的系統(tǒng)中管理分布式數(shù)據(jù)。
雖然這些準(zhǔn)則對(duì)OpenStack及其周邊項(xiàng)目和插件的日常發(fā)展起到了關(guān)鍵作用,但有些經(jīng)驗(yàn)或心得卻是所有軟件開(kāi)發(fā)人員都可以借鑒的。測(cè)試、開(kāi)發(fā)無(wú)狀態(tài)應(yīng)用程序、讓可擴(kuò)展性成為優(yōu)先事項(xiàng),以及考慮程序逐漸変得龐大后其性能將會(huì)如何,這些都是每一個(gè)軟件開(kāi)發(fā)人員都應(yīng)該運(yùn)用到本企業(yè)組織和軟件項(xiàng)目的最佳實(shí)踐。