《面向軟件錯(cuò)誤構(gòu)建可靠的分布式系統(tǒng)》讀后感

          這篇文檔是erlang創(chuàng)始者之一的Joe Armstrong所編寫的博士論文,由段先德翻譯、鄧輝審校,感興趣的同學(xué)可以從以下地址下載:
           http://erlang-china.org/study/joe-armstrong_thesis_cn.html
          Erlang在業(yè)界已經(jīng)引起了不小的轟動(dòng),通讀了下這篇博士論文,翻譯的質(zhì)量很高,:),所以讀起來(lái)非常的順暢,論文的內(nèi)容對(duì)于erlang初學(xué)者而言絕對(duì)是堪稱經(jīng)典,寫的非常的不錯(cuò),點(diǎn)出了erlang的強(qiáng)項(xiàng)并詳細(xì)的進(jìn)行了解釋。
          Erlang以天生的支持并發(fā)、分布式和容錯(cuò)而聞名,由于erlang的誕生是為交換機(jī)而服務(wù)的,因此在并發(fā)、分布式、容錯(cuò)、動(dòng)態(tài)代碼升級(jí)等方面是實(shí)現(xiàn)的非常好的,其目前主要是應(yīng)用在erission的交換機(jī)上,這對(duì)于erlang的那些天生的特性也是個(gè)很好的證明。
          通過(guò)閱讀這篇博士論文,讓我對(duì)了erlang有了部分的認(rèn)識(shí),由于目前尚未實(shí)踐過(guò),只能根據(jù)論文本身對(duì)自己理解的erlang做個(gè)闡述。
          Erlang采用的是虛擬機(jī)的方式,這個(gè)虛擬機(jī)和java的虛擬機(jī)類似的地方在于隔離了和操作系統(tǒng)相關(guān)的語(yǔ)言運(yùn)行環(huán)境,也就是說(shuō)基于erlang編寫的程序是可以在所有操作系統(tǒng)中運(yùn)行的,不同的地方在于erlang在這個(gè)虛擬機(jī)中還實(shí)現(xiàn)了進(jìn)程管理、進(jìn)程通訊等非常核心的技術(shù),erlang的進(jìn)程采用的并不是操作系統(tǒng)的進(jìn)程,因此基于erlang編寫的程序并不會(huì)因?yàn)槊糠N操作系統(tǒng)的進(jìn)程、進(jìn)程通訊實(shí)現(xiàn)的機(jī)制不同而改動(dòng),正是因?yàn)檫@些,使得基于erlang可以很容易的編寫跨操作系統(tǒng)的高并發(fā)、容錯(cuò)、可靠的分布式系統(tǒng),來(lái)看看erlang對(duì)于這幾個(gè)關(guān)鍵字是怎么支撐和理解的:
          1、分布式
                分布式的支持對(duì)于所有的大型系統(tǒng)而言都是非常重要的,分布式涉及到的問(wèn)題主要是遠(yuǎn)程通訊,Erlang本身已很好的實(shí)現(xiàn)了這個(gè)部分,在erlang中通訊的單位是進(jìn)程,erlang已很好的透明化的處理了本地進(jìn)程通訊和遠(yuǎn)程進(jìn)程通訊,也就是說(shuō)你可以像本地進(jìn)程通訊一樣的方式去進(jìn)行遠(yuǎn)程進(jìn)程通訊,在erlang中進(jìn)程的通訊基于消息的方式,有點(diǎn)像MQ之類的東西。
          2、高并發(fā)
                高并發(fā)這塊通常采取的支撐方法是多進(jìn)程的并行處理,在erlang中非常強(qiáng)調(diào)的一個(gè)原則就是進(jìn)程的創(chuàng)建和銷毀要非常容易,也就是說(shuō)是不耗多少資源的,由于erlang中的進(jìn)程并不是操作系統(tǒng)的進(jìn)程,因此在支持高并發(fā)時(shí)就比較容易了,例如webserver,可以每接收一個(gè)請(qǐng)求就創(chuàng)建一個(gè)進(jìn)程來(lái)進(jìn)行并行處理,而同時(shí)由于erlang會(huì)合理的去分配這些進(jìn)程對(duì)于CPU的搶占,避免出現(xiàn)某進(jìn)程耗住CPU的現(xiàn)象。
          3、容錯(cuò)
                容錯(cuò)首先要做到的是錯(cuò)誤的隔離,erlang強(qiáng)調(diào)每個(gè)處理的單元都是進(jìn)程,同時(shí)erlang要求進(jìn)程間不共享任何資源,例如共享內(nèi)存等,進(jìn)程間僅通過(guò)消息來(lái)進(jìn)行交互,因此某個(gè)進(jìn)程出錯(cuò)自然是不會(huì)造成其他進(jìn)程錯(cuò)誤的,在進(jìn)程出錯(cuò)時(shí),erlang推薦的是采用速錯(cuò)(fast on fail)的方式,也就是迅速停止這個(gè)進(jìn)程的運(yùn)行,這樣做是為了避免這個(gè)進(jìn)程錯(cuò)誤的執(zhí)行造成更多的錯(cuò)誤。
                容錯(cuò)方面,erlang推薦的實(shí)踐方法是專門編寫一個(gè)監(jiān)督進(jìn)程,這個(gè)進(jìn)程負(fù)責(zé)接收被監(jiān)督進(jìn)程發(fā)出的錯(cuò)誤的消息,并根據(jù)錯(cuò)誤的情況來(lái)進(jìn)行糾錯(cuò),重啟進(jìn)程,或者將該進(jìn)程恢復(fù)至其他的機(jī)器上去執(zhí)行。
          4、可靠

                可靠的分布式系統(tǒng),這部分對(duì)于我的觸動(dòng)比較大,因?yàn)橹耙恢弊鲞@方面的事情,在論文中說(shuō)到了很關(guān)鍵的一點(diǎn),目前在基于面向?qū)ο蟮恼Z(yǔ)言實(shí)現(xiàn)可靠的分布式系統(tǒng)時(shí),多數(shù)是基于類似MQ的東西來(lái)實(shí)現(xiàn)的,在基于這個(gè)實(shí)現(xiàn)時(shí),要做到可靠,基于的基礎(chǔ)是消息的傳遞是可靠的,當(dāng)然,erlang也是基于消息傳遞來(lái)實(shí)現(xiàn)分布式通訊的,但它的思路不同,它不認(rèn)為消息的傳遞是可靠的,那么它是怎么來(lái)做到可靠的呢,是基于進(jìn)程調(diào)用時(shí)構(gòu)建的一個(gè)進(jìn)程鏈的方式,進(jìn)程鏈上的任意進(jìn)程的錯(cuò)誤都可通知到相關(guān)的進(jìn)程,這樣的話消息是否傳遞到相應(yīng)的目的進(jìn)程其實(shí)是很容易判斷的,:),這個(gè)思路一定程度上顛覆了MQ中一直采用的發(fā)送--回執(zhí)的方式,不過(guò)不同的也僅在于現(xiàn)在不用按通訊的方式去發(fā)回執(zhí),但事實(shí)上這個(gè)回執(zhí)還是存在的。
          從上面這幾個(gè)特性可以看出,erlang確實(shí)挺吸引人,可以試用試用,不要告訴我用c也可以實(shí)現(xiàn)這些,何必冒出一種新語(yǔ)言去學(xué)習(xí)呢,沒(méi)錯(cuò),你是可以用c去實(shí)現(xiàn),但那不是要自己寫嗎,除非你覺(jué)得自己在高并發(fā)、容錯(cuò)、分布式這些的理解上比這些博士還強(qiáng),呵呵,不過(guò)就像論文中說(shuō)的,erlang也還有很多需要發(fā)展的方面,例如如何更好的與其他語(yǔ)言的程序通訊。
          在這篇erlang博士論文中還能學(xué)到的東西有很多,如構(gòu)建并發(fā)式系統(tǒng)時(shí)應(yīng)將并發(fā)、持久存儲(chǔ)、進(jìn)程消息傳遞、進(jìn)程錯(cuò)誤處理這些和應(yīng)用系統(tǒng)的實(shí)現(xiàn)交由兩組不同的人來(lái)實(shí)現(xiàn),使得開(kāi)發(fā)應(yīng)用的人可以無(wú)需關(guān)注程序該怎么去支持高并發(fā)、怎么去和別的進(jìn)程通訊什么的,和spring的pojo enhanced的概念是相同的。
          和OSGi一樣,也不一定就用erlang去實(shí)現(xiàn)實(shí)際的系統(tǒng),但它為我們提供的這幾點(diǎn)的最佳實(shí)踐是值得學(xué)習(xí)的。

          posted on 2007-11-25 19:00 BlueDavy 閱讀(3549) 評(píng)論(1)  編輯  收藏 所屬分類: Java業(yè)界隨想

          評(píng)論

          # re: 《面向軟件錯(cuò)誤構(gòu)建可靠的分布式系統(tǒng)》讀后感 2007-12-06 23:33 酸酸菜

          文章的理論性確實(shí)很值得學(xué)習(xí)。  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2007年12月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 洱源县| 北海市| 大厂| 祁东县| 静安区| 若尔盖县| 陵川县| 铜陵市| 黄冈市| 县级市| 保德县| 宜兴市| 东台市| 平塘县| 始兴县| 乌拉特后旗| 莱西市| 阿勒泰市| 锦屏县| 江都市| 开阳县| 积石山| 宁都县| 曲靖市| 观塘区| 普兰店市| 嘉禾县| 两当县| 沁源县| 连江县| 九龙县| 墨玉县| 荃湾区| 道真| 河北区| 沙河市| 邢台市| 木里| 正安县| 鄱阳县| 延吉市|