暢談并行計(jì)算和云計(jì)算學(xué)習(xí)筆記
Erlang算不上是一種"大眾流行"的程序設(shè)計(jì)語(yǔ)言,而且即使是Erlang的支持者,大多數(shù)也對(duì)于Erlang成為"主流語(yǔ)言"并不持樂(lè)觀態(tài)度。然而,自從2006年以來(lái),Erlang語(yǔ)言確實(shí)在國(guó)內(nèi)外一批精英程序員中暗流涌動(dòng),光我所認(rèn)識(shí)和聽說(shuō)的,就有不少于一打技術(shù)高手像著了魔一樣迷上了這種已經(jīng)有二十多年歷史的老牌語(yǔ)言。這是一件相當(dāng)奇怪的事情。因?yàn)榫湍挲g而言,Erlang大約與Perl同年,比C++年輕四歲,長(zhǎng)Java差不多十歲,但 Java早已經(jīng)是工業(yè)主流語(yǔ)言,C++和Perl甚至已經(jīng)進(jìn)入其生命周期的下降階段。照理說(shuō),一個(gè)被扔在角落里二十多載無(wú)人理睬的老家伙合理的命運(yùn)就是坐以待斃,沒(méi)想到Erlang卻像是突然吃了返老還童丹似的在二十多歲的"高齡"又火了一把,不但對(duì)它感興趣的人數(shù)量激增,而且還成立了一些組織,開發(fā)實(shí)施了一些非常有影響力的軟件項(xiàng)目。這是怎么回事呢?
根本原因在于Erlang天賦異稟恰好適應(yīng)了計(jì)算環(huán)境變革的大趨勢(shì):CPU的多核化與云計(jì)算。
自2005年C++標(biāo)準(zhǔn)委員會(huì)主席Herb Sutter在Dr. Dobb's Journal上發(fā)表《免費(fèi)午餐已經(jīng)結(jié)束》一文以來(lái),人們已經(jīng)確鑿無(wú)
疑地認(rèn)識(shí)到,如果未來(lái)不能有效地以并行化的軟件充分利用并行化的硬件資源,我們的計(jì)算效率就會(huì)永遠(yuǎn)停滯在僅僅略高于當(dāng)前的水平上,而不得動(dòng)彈。因此,未來(lái)的計(jì)算必然是并行的。Herb Sutter本人曾表示,如果一個(gè)語(yǔ)言不能夠以優(yōu)雅可靠的方式處理并行計(jì)算的問(wèn)題,那它就失去了在21世紀(jì)的生存權(quán)。"主流語(yǔ)言"當(dāng)然不想真的喪失掉這個(gè)生存權(quán),于是紛紛以不同的方式解決并行計(jì)算的問(wèn)題。就C/C++而言,除了標(biāo)準(zhǔn)委員會(huì)致力于以標(biāo)準(zhǔn)庫(kù)的方式來(lái)提供并行計(jì)算庫(kù)之外,標(biāo)準(zhǔn)化的OpenMP和 MPI,以及Intel的Threading Building Blocks庫(kù)也都是可信賴的解決方案;Java在5.0版中引入了意義重大的concurrency庫(kù),得到Java社區(qū)的一致推崇;而微軟更是采用了多種手段來(lái)應(yīng)對(duì)這一問(wèn)題:先是在.NET中引入APM,隨后又在Robotics Studio中提供了CCR庫(kù),最近又發(fā)布了Parrallel FX和MPI.NET,可謂不遺余力。然而,這些手法都可以視為亡羊補(bǔ)牢,因?yàn)檫@些語(yǔ)言和基礎(chǔ)設(shè)施在創(chuàng)造時(shí)都沒(méi)有把并行化的問(wèn)題放到優(yōu)先的位置來(lái)考慮。與它們相反,Erlang從其構(gòu)思的時(shí)候起,就把"并行"放到了中心位置,其語(yǔ)言機(jī)制和細(xì)節(jié)的設(shè)計(jì)無(wú)不從并行角度出發(fā)和考慮,并且在長(zhǎng)達(dá)二十年的發(fā)展完善中不斷成熟。今天,Erlang可以說(shuō)是為數(shù)不多的天然適應(yīng)多核的可靠計(jì)算環(huán)境,這不能不說(shuō)是一種歷史的機(jī)緣。
另一個(gè)可能更加迫切的變革,就是云計(jì)算。Google的實(shí)踐表明,用廉價(jià)服務(wù)器組成的服務(wù)器集群,在計(jì)算能力、可靠性等方面能夠達(dá)到價(jià)格昂貴的大型計(jì)算機(jī)的水準(zhǔn),毫無(wú)疑問(wèn),這是大型、超大型網(wǎng)站和網(wǎng)絡(luò)應(yīng)用夢(mèng)寐以求的境界。然而,要到達(dá)這個(gè)境界并不容易。目前一般的網(wǎng)站為了達(dá)成較好的可延展性和運(yùn)行效率,需要聘請(qǐng)有經(jīng)驗(yàn)的架構(gòu)師和系統(tǒng)管理人員,手工配置網(wǎng)絡(luò)服務(wù)端架構(gòu),并且常備一個(gè)高水準(zhǔn)的系統(tǒng)運(yùn)維部門,隨時(shí)準(zhǔn)備處理各種意外情況??梢哉f(shuō),雖然大多數(shù)Web企業(yè)只不過(guò)是想在這些基礎(chǔ)設(shè)施上運(yùn)行應(yīng)用而已,但僅僅為了讓基礎(chǔ)設(shè)施正常運(yùn)轉(zhuǎn),企業(yè)就必須投入巨大的資源和精力?,F(xiàn)在甚至可以說(shuō),這方面的能力成了大型和超大型網(wǎng)站的核心競(jìng)爭(zhēng)力。這與操作系統(tǒng)成熟之前人們自己動(dòng)手設(shè)置硬件并且編寫驅(qū)動(dòng)程序的情形類似----做應(yīng)用的人要精通底層細(xì)節(jié)。這種格局的不合理性一望便知,而解決的思路也是一目了然----建立網(wǎng)絡(luò)服務(wù)端計(jì)算的操作系統(tǒng),也就是類似Google已經(jīng)建立起來(lái)的"云計(jì)算"那樣的平臺(tái)。所謂"云計(jì)算",指的是結(jié)果,而當(dāng)前的關(guān)鍵不是這個(gè)結(jié)果,而是作為手段的"計(jì)算云"。計(jì)算云實(shí)際上就是控制大型網(wǎng)絡(luò)服務(wù)器集群計(jì)算資源的操作系統(tǒng),它不但可以自動(dòng)將計(jì)算任務(wù)并行化,充分調(diào)動(dòng)大型服務(wù)器集群的計(jì)算能力,而且還可以自動(dòng)應(yīng)對(duì)大多數(shù)系統(tǒng)故障,實(shí)現(xiàn)高水平的自主管理。
計(jì)算云技術(shù)是網(wǎng)絡(luò)計(jì)算時(shí)代的操作系統(tǒng),是絕對(duì)的核心技術(shù),也正因此,很多赫赫有名的中外大型IT企業(yè)都在不惜投入巨資研發(fā)計(jì)算云。包括我在內(nèi)的很多人都相信,云計(jì)算將不僅從根本上改變我們的計(jì)算環(huán)境,而且將從根本上改變IT產(chǎn)業(yè)的盈利模式,是真正幾十年一遇的重大變革,對(duì)于一些企業(yè)和技術(shù)人員來(lái)說(shuō)是重大的歷史機(jī)遇。恰恰在這個(gè)主題上,Erlang又具有先天的優(yōu)勢(shì),這當(dāng)然也是歸結(jié)于其與生俱來(lái)的并行計(jì)算能力,使得開發(fā)計(jì)算云系統(tǒng)對(duì)于Erlang來(lái)說(shuō)格外輕松容易。現(xiàn)在Erlang社區(qū)已經(jīng)開發(fā)了一些在實(shí)踐中被證明非常有效的云計(jì)算系統(tǒng),學(xué)習(xí)Erlang和這些系統(tǒng)是迅速進(jìn)入這個(gè)領(lǐng)域并且提高水平的捷徑。
由此可見,Erlang雖然目前還不是主流語(yǔ)言,但是有可能會(huì)在未來(lái)一段時(shí)間發(fā)揮重要的作用,因此,對(duì)于那些愿意領(lǐng)略技術(shù)前沿風(fēng)景的"先鋒派"程序員來(lái)說(shuō),了解和學(xué)習(xí)Erlang可能是非常有價(jià)值的投資。即使你未來(lái)不打算使用Erlang,也非常有可能從Erlang的設(shè)計(jì)和Erlang社區(qū)的智慧中得到啟發(fā),從而能夠在其他語(yǔ)言的項(xiàng)目中更好地完成并行計(jì)算和云計(jì)算相關(guān)的設(shè)計(jì)和實(shí)現(xiàn)任務(wù)。再退一步說(shuō),就算只是從開啟思路、全面認(rèn)識(shí)計(jì)算本質(zhì)和并行計(jì)算特性的角度出發(fā),Erlang也值得了解。所以,我很希望這本書在中國(guó)程序員社區(qū)中不要遭到冷遇。
本書是由Erlang創(chuàng)造者Joe Armstrong親自執(zhí)筆撰寫的Erlang語(yǔ)言權(quán)威參考書,原作以輕松引導(dǎo)的方式幫助讀者在實(shí)踐中理解Erlang的深刻設(shè)計(jì)思路,并掌握以 Erlang開發(fā)并行程序的技術(shù),在技術(shù)圖書中屬于難得的佳作。兩位譯者我都認(rèn)識(shí),他們都是技術(shù)精湛而思想深刻
的"先鋒派",對(duì)Erlang有著極高的熱情,因此翻譯質(zhì)量相當(dāng)高,閱讀起來(lái)流暢通順,為此書中譯本添色不少。有興趣的讀者集中一段時(shí)間按圖索驥,完全有可能就此踏上理解Erlang、應(yīng)用Erlang的大路。
【編輯推薦】