面對軟件錯誤構建可靠的分佈式系統-1摘要

面對軟件錯誤構建可靠的

分佈式系統

(瑞典)Joe Armstrong

段先德 譯

鄧 輝 審

<聲明:本文版權屬原文作者所有,譯文僅用於個人學習和交流,不得用於任何商業目的。>

原文鏈接:http://www.erlang.org/download/armstrong_thesis_2003.pdf


 

譯 感

近年來,多核分佈式計算集羣計算大併發量處理等名詞逐步從實驗室中的概念走向了大衆社會的應用,並給許多公司帶來了商業上的巨大成功。一個新的信息處理時代已經悄然來臨,召喚着新的適應這個時代的軟件開發方法和工具。其實早在1986年,在Ericsson就有一些專家開始瞭如何編寫出可靠的分佈式系統方面的探索和研究。這些研究成果,成就了可靠性達到99.9999999%的目前世界上最複雜的ATM交換機,並給我們帶來了Erlang/OTP這套開源的開發工具和平臺。Joe Armstrong先生就是Erlang的主要發明人,而本文就是Joe Armstrong的博士論文。

之初學習Erlang編程的時候,爲了深入瞭解一下Erlang的設計哲學,我決定把這篇論文精讀一遍。我想無一遺漏地精讀的方式,就是把它翻譯一回。鄧輝先生(《敏捷軟件開發——原則、模式與實踐》中文版譯者)鼓勵我說,翻譯吧,也算是給國內的Erlang這個小圈子做點貢獻。於是似乎有了一些責任。既然是要公開出來的,任何細節就更不能毛糙了,也就迫使我查閱了許多背景資料,而這些論文以外的知識對於我平時的Erlang編程頗有助益,算是意外之得了。

跟其他的理工類博士論文不一樣,本論文並沒有堆砌大量的公式推導,而是以平鋪直敘的方式,在解答如何在存在軟件錯誤的情況下編寫出具有合理行爲的軟件?這一核心問題的過程中,詳細地闡述了Erlang/OTP的設計哲學。論文分析了構建可靠的分佈式系統的一些系統需求、語言需求、庫需求,介紹了完全針對這些需求而打造的JAM系統、Erlang語言和OTP開發庫。本論文的重點不在於JAM的設計,不在於Erlang語言的描述,也不在於OTP庫的介紹,雖然這些方面都有很多值得討論的課題。本論文把重點放在了可容錯的架構上,如何構建軟件運行的模型?如何進行錯誤檢測和恢復?如何實際編寫出可容錯的系統?本文的重點在於探討這一系列的設計思想的問題。這是一門軟件開發哲學,也是一個軟件世界觀。

不得不提的是一切皆進程Erlang世界觀。作者把軟件所有要處理的事務劃分成一系列層次化的任務,每個任務有一個強隔離的進程來執行,進程之間沒有任何共享狀態,只能通過消息傳遞來通信。這種強隔離的進程


 

不僅可以更真實地描述現實世界的信息處理過程,還成爲軟件錯誤發生時保護系統的可靠性的最有力模型。

也要說說本論文關於故障處理的論述。由於業務處理都在一個個強隔離的進程——作者把它們稱爲工作者,就防止了一個進程出錯會傳播到其他的進程。業務處理進程的運行狀況由另外專門的進程來看護——作者把它們稱爲監視者工作者監視者組成一個層次化的監督模型,使得一個進程發生故障時,整個系統可以作出相應的調整,保障系統最大限度地提供服務。

還要說說behaviour。本論文無意中介紹了OTP庫集中的behaviour庫的設計思想,即將程序的併發處理和順序化處理分開。本文還以gen_server爲例,展示瞭如何把併發部分抽象出來,如何讓程序從最初的脆弱演化到可容錯,體味一下,會受到啓發。

罷了罷了,關於本論文的內容我不能說太多,言多必失,恐怕淡漠了任何一方面,也許每個人看到的重點都不一樣。總之,非常感謝Joe Armstrong給我們奉獻了這篇論文。

在本譯稿完成的時候,Joe Armstrong關於Erlang編程的的新書《Programming Erlang》也已經出版面世了,引起了軟件開發主流們不小的震動,Ralph Johnson甚至預言Erlang會是下一個Java。不管這種預言會不會成真,想深入學習Erlang編程的朋友一定不要錯過這部偉大的著作。

非常感謝鄧輝先生,他詳細地審閱了本譯文的初稿,提出了許多寶貴的意見,使得本譯文更貼合論文原意。

無論我怎麼努力,終究水平有限,肯定還存在許多對原文理解錯誤或中文表達欠妥之處,懇請讀者指正。譯者聯繫方式:[email protected]

段先德

20079月 上海


 

面對軟件錯誤構建可靠的

分佈式系統

Making reliable distributed systems in the presence of software errors

20031120最終修訂版

Joe Armstrong

本論文作爲工學博士

學位之要件提呈皇家技術研究院

瑞典·斯德哥爾摩

皇家技術研究院

200312

微電子與信息技術學部


 

獻給HelenThomasClaire


 

摘要

本論文所描述的成果源於1981年開始的一個研究項目,該項目的目的是探索更好的編寫電信應用軟件的方法。電信類應用都是一些大型的程序,雖然經過了嚴密的測試,但是投入運行後還是難免會有許多錯誤。我們假設這些程序不可避免地會含有錯誤,進而尋求在軟件包含錯誤的情況下構建可靠系統的方法。

該項研究的成果是開發出了一種新的編程語言(叫做Erlang),一門設計方法學,和一個用以構建健壯系統的程序庫(叫做OTP)。就在本論文寫作的時候,本文所描述的技術已經在EricssonNortel的多款主流產品中被使用。也許還有許多小型公司正在爲了發掘這一技術而成立。

本文主要關注的是在程序自身包含有錯誤的情況下如何構建出可靠的系統這一問題。構建這樣的系統對所採用的任何一種編程語言都有一些特殊的要求。這裏會討論這些對語言的具體的特殊要求,並將展示Erlang是如何滿足這些要求的。

這些要求可以在編程語言中解決,也可以在語言所附帶的標準庫中解決。我將論證在構建可容錯系統時,哪些要求應該在語言中解決,而哪些要求可以在標準庫中解決。這些合起來構成了構建可容錯軟件系統的基礎。

實踐見真章,沒有得到實踐證明的理論是不完整的。爲了證明這些思想在實踐中確實有用,我也列舉了許多已經在大型上列產品中成功應用該技術的案例。到目前爲止,使用該技術的最大的項目是Ericsson的一款重要產品,它包含超過100萬行的Erlang代碼。這款產品(AXD301)也是公認的Ericsson最可靠的產品之一。

最後,我印證了一下我們是否達到了尋找一種編寫電信應用軟件的更好的方法的目的,我還指出了我們的系統可以在哪些方面進行進一步的提高。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章