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