簡介
隨著計算機網路,特別是Internet的迅猛發展,傳統的信息系統概念發生了巨大的變化,這些變化突出地表現在信息的存儲、傳遞、發布以及獲取方式所發生的革命性變革。與此同時,基於網路的分散式信息系統在各個領域得到了廣泛的套用,在整個社會生活中正發揮著日益突出的作用。Internet已經越來越多地成為構建信息系統的一個關鍵組成部分。如何在更為廣域和異構的計算環境中有效地發布和獲取信息,已成為亟待解決的問題。分散式系統正是解決了上述問題。現在分散式系統的研究、套用日益廣泛深入,分散式系統的學習也成為計算機及相關專業必不可少的教學環節。
編輯推薦
本書是Tanenbaum先生在所著的《分散式作業系統》的基礎上,總結了分散式系統方面的最新進展,重新撰寫的力作,是分散式系統的權威教材。本書循序漸進地、全面地、深入地講解了分散式系統的原理,並列出了大量的范型。本書的結構分為兩部分:原理和范型。第一部分(第1~8章)詳細討論了分散式系統的原理、概念和技術,其中包括通信、進程、命名、同步、一致性和複製、容錯以及安全。第二部分(第9~12章)給出了一些實際的分散式系統,即基於對象的分散式系統、分散式檔案系統、基於文檔的分散式系統以及基於協作的分散式系統,介紹了一些實際系統的設計思想和實現技術。全書結構清晰,內容全面經典,系統性與先進性並茂。
本書的目標讀者是計算機及相關專業的高年級學生或研究生。從事分散式計算研究和工程套用的科研人員和工程技術人員也會從本書中受益匪淺。
本書是多人共同努力的成果,參與本書翻譯、審稿、錄排的人員包括:楊劍峰、常曉波、梁金昆、張麗萍、汪青青、朱志博、李敏、李靜、李娟、張穎、朱劍平、劉穎、吳東升、楊戰偉、郭寧寧、李楠、聶晶、劉恆、劉敏、劉洋、呂喜熹、馬睿倩等。全書由楊劍峰、常曉波和李敏負責統稿。
限於譯者水平,難免有錯誤和疏漏之處,懇請讀者不吝指正。希望這本書能成為您工作的好幫手。
內容詳情
楊劍峰常曉波2004年5月前言本書的出發點是對Distributed Operating Systems一書進行再版修訂,但筆者很快就發現自1995年以來很多技術發生了改變,要完全體現出這些變化,僅僅對該書進行修訂是不夠的,而是需要寫一本全新的書。因此,這本新書有了一個新的標題:《分散式系統原理和范型》。標題的改變體現了對重點的調整。雖然我們仍然討論一些作業系統的問題,但現在這本書還從更廣泛的意義上研究分散式系統。例如,WWW作為已建立的最大的分散式系統,在Distributed Operating Systems一書中完全沒有提到,因為它並不是一個作業系統。而在本書中,它幾乎占去整整一章。
本書分為兩部分:原理和范型。第1章是對主題的總體介紹。接下來的第2~8章分別討論我們認為最重要的原理:通信、進程、命名、同步、一致性和複製、容錯以及安全性。
實際的分散式系統通常是圍繞一些范型來組織的,例如“所有事物都是檔案”。接下來的第9~12章分別介紹一個不同的范型,並描述使用該范型的一些重要系統。涉及到的范型包括基於對象的系統、分散式檔案系統、基於文檔的系統以及基於協作的系統。
第13章包含一份附有說明的參考書目,可供該主題的進一步學習使用,還包含本書中引用的著作列表。
本書是作為計算機科學的大學高年級學生或研究生課程而編寫的。因此,本書有一個Web站點,站點中以各種格式放置了本書中用到的PowerPoint表和圖。要訪問該站點,將本書作為教材使用的教授可以通過聯繫當地的Prentice Hall代理機構得到一本習題解答手冊。當然,本書也十分適合希望更多地了解這一重要主題的社會人士。
許多人以多種方式對本書作出了貢獻。我們尤其要感謝Arno Bakker、Gerco Ballintijn、Brent Callaghan、Scott Cannon、Sandra Cornelissen、Mike Dahlin、Mark Darbyshire、GuyEddon、Amr el Abbadi、Vincent Freeh、Chandana Gamage、Ben Gras、Bob Gray、Michael van Hartskamp、Philiphomburg、Andrew Kitchen、Ladislav Kohout、Bob Kutter、Jussipekka Leiwo、Leah McTaggert、Eli Messenger、Donald Miller、Shivakant Mishra、Jim Mooney、Matt Mutka、Rob Pike、Krithi Ramamritham、Shmuel Rotenstreich、Sol Shatz、Gurdip Singh、Aditya Shivram、Vladimir Sukonnik、Boleslaw Szymanski、Laurent Therond和Leendert van Doom,感謝他們閱讀了部分書稿並提出了寶貴意見。
最後,我們還要感謝我們的家庭。Suzanne已經經歷過很多次這樣的情況了。她從未說過“我受夠了”,儘管這個念頭肯定在她腦海里出現過。謝謝你!Barbara和Marvin現在對教授們為謀生所做的工作有了更好的了解,並且認識到好教材和壞教材之間的差別。現在,對我來說他們是我努力創作出更多好教材的動力所在。本書使用指南我們使用本書中的材料已經很多年了,主要是用作大學高年級學生和研究生的教材。而且,這些材料還曾經作為為時1~2天的有關分散式系統和中間件的研討會的基本資料,參加這些研討會的人包括ICT專家(技術上的)。下面是我們根據經驗對本書使用方式提出的一些建議。
大學高年級學生和研究生教材
如果作為大學高年級學生和研究生的教材,本書通常可以在12~15周內完成教學。我們發現,在大多數學生看來,分散式系統由很多似乎彼此緊密結合的主題所組成。在本書的組織上,我們按照不同的原理介紹這些主題,分別講授各個原理,這對學生領會重點內容有很大幫助。這樣安排的效果是當第一部分(第1~8章)結束時,即在討論范型之前,學生已經對本書主題在整體上有了一個相當好的把握。
然而,分散式系統的領域涵蓋許多不同的主題,其中一些主題在初次學習時很難理解。因此,我們強烈建議學生們隨著課程的進展學習適當的章節。可以獲得所有PowerPoint表,將它們預先分發下去,以便學生在課堂中能夠積極參與討論。這種方法非常成功,並得到了學生們的高度評價。
所有的材料都包括在一個為時15周的課程中。大多數時間花費在講授分散式系統的原理,也就是前8章所包括的材料上。在討論范型時,我們的經驗是:只需要介紹要點。直接從書中學習每個案例的詳細內容比在課堂上聽授更加容易。例如,儘管書中有關基於對象的系統的內容達80頁之多,但我們只用一周的時間講授這類系統。下面是一個課程進度安排建議表(表0.1),其中包括每次講座中包括的主題。表0.1課程進度安排建議周主題章講授內容1緒論1全部2通信22.1~2.33通信22.4~2.54進程3全部5命名44.1~4.26命名44.36同步55.1~5.2續表周主題章講授內容7同步55.3~5.68一致性和複製66.1~6.49一致性和複製66.5~6.69容錯77.1~7.310容錯77.4~7.611安全性88.1~8.212安全性88.3~8.713基於對象的系統9全部14檔案系統10全部15基於文檔的系統11全部15基於協作的系統12全部並不是所有材料都需要在課堂上講授;我們希望學生能夠自學特定的部分,尤其是細節部分。在講授時間少於15周的情況下,我們建議跳過有關范型的章節,讓感興趣的學生自己學習這些部分。
如果用於低年級的課程,我們推薦將本書的學習延長至兩個學期,並增加實驗作業。例如,可以通過讓學生修改一些組件,使這些組件具有容錯性、處理多播RPC等功能來使學生理解簡單的分散式系統。
行業的專業研討會
在1~2天的研討會上,通常將本書作為主要的背景材料使用。然而,如果跳過所有細節,僅將重點放在分散式系統的本質上,則有可能在兩天內講完整本書。此外,要使內容的表達更加生動實用,有必要重新安排章節的順序,以提早說明原理是如何得到套用的。對於研究生來說,一般是在了解原理的套用之前(有時甚至根本不了解原理的具體套用)先對原理進行為期10周的學習,但專業人士如果能了解這些原理的實際套用,就會有更大的學習動力。下面是一個為期2天課程的試驗性進度表(表0.2),該表按照邏輯單元進行劃分。表0.2按邏輯單元劃分的課程進度第1天單元時間(分)主題章重點190緒論1客戶伺服器體系結構260通信2RPC/RMI和訊息傳遞360基於協作的系統12訊息傳遞問題460進程3移動代碼和代理530命名4位置跟蹤690基於對象的系統9CORBA續表
第2天單元時間(分)主題章重點190一致性和複製6模型和協定260基於文檔的系統11Web快取/複製360容錯7進程組與2PC490安全性8基本思想560分散式檔案系統10NFS v3和v4。
個人學習
本書同樣也適用於個人學習。如果具有足夠的時間和動力,建議讀者仔細閱讀整本書。如果沒有足夠的時間仔細閱讀所有材料,我們建議只集中學習最重要的主題。下面的表格中列舉一些章節,我們認為這些章節涵蓋了關於分散式系統的最重要的主題(表0.3)。表0.3自學內容章主題小節1緒論1.1、1.2、1.4.3、1.52通信2.2、2.3、2.43進程3.3、3.4、3.54命名4.1、4.25同步5.2、5.3、5.66一致性和複製6.1、6.2.2、6.2.5、6.4、6.57容錯7.1、7.2.1、7.2.2、7.3、7.4.1、7.4.3、7.5.18安全性8.1、8.2.1、8.2.2、8.3、8.49基於對象的系統9.1、9.2、9.410分散式檔案系統10.1、10.411基於文檔的系統11.112基於協作的系統12.1、12.2或12.3比較好的做法是對學習這些建議的材料需要花費的時間進行估算,但這在很大程度上取決於讀者的背景知識,對各種背景的讀者很難做一個一般性的估計。然而,如果一個具有全職工作的人抽出晚上的時間閱讀本書,則可能至少花費幾周時間。
目錄
第1章緒論1
1.1分散式系統的定義1
1.2目標3
1.2.1讓用戶連線到資源3
1.2.2透明性4
1.2.3開放性6
1.2.4可擴展性7
1.3分散式系統的硬體12
1.3.1多處理器系統13
1.3.2同構式多計算機系統15
1.3.3異構式多計算機系統16
1.4分散式系統的軟體17
1.4.1分散式作業系統18
1.4.2網路作業系統26
1.4.3中間件28
1.5客戶伺服器模型33
1.5.1客戶與伺服器33
1.5.2應用程式的分層38
1.5.3客戶伺服器體系結構40
1.6小結43
習題43第2章通信45
2.1分層協定45
2.1.1低層協定48
2.1.2傳輸協定50
2.1.3高層協定52
2.2遠程過程調用54
2.2.1基本的RPC操作55
2.2.2參數傳遞58
2.2.3擴展的RPC模型61
2.2.4實例:DCE RPC64
2.3遠程對象調用68
2.3.1分散式對象68
2.3.2將客戶綁定到對象70
2.3.3靜態遠程方法調用與動態遠程方法調用72
2.3.4參數傳遞73
2.3.5實例1:DCE遠程對象74
2.3.6實例2:Java RMI76
2.4面向訊息的通信79
2.4.1通信中的持久性和同步性79
2.4.2面向訊息的暫時通信83
2.4.3面向訊息的持久通信86
2.4.4示例:IBM MQSeries91
2.5面向流的通信95
2.5.1為連續媒體提供支持95
2.5.2流與服務質量98
2.5.3流同步101
2.6小結103
習題104第3章進程107
3.1執行緒107
3.1.1執行緒簡介107
3.1.2分散式系統中的執行緒112
3.2客戶114
3.2.1用戶界面114
3.2.2客戶端軟體與分布透明性116
3.3伺服器117
3.3.1設計上常見的重要問題117
3.3.2對象伺服器120
3.4代碼遷移125
3.4.1代碼遷移方案125
3.4.2遷移與本地資源128
3.4.3異構系統中的代碼遷移131
3.4.4實例:D’Agents132
3.5軟體代理136
3.5.1分散式系統中的軟體代理136
3.5.2代理技術138
3.6小結140
習題141第4章命名144
4.1實體的命名144
4.1.1名稱、標識符和地址144
4.1.2名稱解析148
4.1.3名稱空間的實現152
4.1.4示例:域名系統158
4.1.5示例:X.500161
4.2移動實體的定位165
4.2.1實體命名與定位165
4.2.2簡單方法167
4.2.3基於起始位置的方法169
4.2.4分層方法171
4.3刪除無引用的實體176
4.3.1無引用對象的問題177
4.3.2引用計數178
4.3.3引用列表181
4.3.4標識不可到達實體182
4.4小結187
習題188第5章同步190
5.1時鐘同步190
5.1.1物理時鐘191
5.1.2時鐘同步算法194
5.1.3使用同步時鐘197
5.2邏輯時鐘198
5.2.1Lamport時間戳199
5.2.2向量時間戳201
5.3全局狀態203
5.4選舉算法206
5.4.1欺負(Bully)算法206
5.4.2環算法207
5.5互斥208
5.5.1集中式算法208
5.5.2分散式算法209
5.5.3令牌環算法211
5.5.4三個算法的比較212
5.6分散式事務213
5.6.1事務模型213
5.6.2事務的分類216
5.6.3實現218
5.6.4並發控制220
5.7小結226
習題227第6章一致性和複製229
6.1簡介229
6.1.1複製的目的230
6.1.2對象複製230
6.1.3作為擴展技術的複製232
6.2以數據為中心的一致性模型233
6.2.1嚴格一致性234
6.2.2線性化和順序一致性236
6.2.3因果一致性239
6.2.4FIFO一致性240
6.2.5弱一致性242
6.2.6釋放一致性244
6.2.7入口一致性245
6.2.8一致性模型小結247
6.3以客戶為中心的一致性模型248
6.3.1最終一致性249
6.3.2單調讀250
6.3.3單調寫251
6.3.4寫後讀252
6.3.5讀後寫253
6.3.6實現254
6.4分發協定256
6.4.1副本放置256
6.4.2更新傳播259
6.4.3epidemic協定262
6.5一致性協定264
6.5.1基於主備份的協定264
6.5.2複製的寫協定267
6.5.3高速快取相關性協定270
6.6實例271
6.6.1Orca272
6.6.2因果一致的懶惰複製276
6.7小結279
習題280第7章容錯性283
7.1容錯性簡介283
7.1.1基本概念283
7.1.2典型故障285
7.1.3使用冗餘來掩蓋故障287
7.2進程恢復288
7.2.1設計問題288
7.2.2故障掩蓋和複製290
7.2.3故障系統的協定290
7.3可靠的客戶伺服器通信293
7.3.1點到點通信293
7.3.2出現失敗時的RPC語義293
7.4可靠的組通信298
7.4.1基本的可靠多播方法298
7.4.2可靠多播中的可擴展性299
7.4.3原子多播301
7.5分散式提交307
7.5.1兩階段提交307
7.5.2三階段提交312
7.6恢復313
7.6.1簡介314
7.6.2檢查點316
7.6.3訊息日誌318
7.7小結320
習題321第8章安全性323
8.1安全性介紹323
8.1.1安全威脅、策略和機制323
8.1.2設計問題328
8.1.3加密331
8.2安全通道337
8.2.1身份驗證338
8.2.2訊息完整性和機密性344
8.2.3安全組通信346
8.3訪問控制349
8.3.1訪問控制中的一般問題349
8.3.2防火牆352
8.3.3保護移動代碼354
8.4安全管理359
8.4.1密鑰管理359
8.4.2安全組管理363
8.4.3授權管理364
8.5實例:KERBEROS368
8.6實例:SESAME370
8.6.1SESAME組件370
8.6.2PAC372
8.7實例:電子付費系統373
8.7.1電子付費系統373
8.7.2電子付費系統中的安全性375
8.7.3協定實例377
8.8小結381
習題382第9章基於對象的分散式系統384
9.1CORBA384
9.1.1CORBA概述385
9.1.2通信390
9.1.3進程395
9.1.4命名399
9.1.5同步402
9.1.6快取與複製403
9.1.7容錯性404
9.1.8安全性406
9.2分散式組件對象模型(DCOM)408
9.2.1DCOM概述408
9.2.2通信413
9.2.3進程415
9.2.4命名417
9.2.5同步420
9.2.6複製420
9.2.7容錯性420
9.2.8安全性421
9.3Globe423
9.3.1Globe概述423
9.3.2通信430
9.3.3進程430
9.3.4命名432
9.3.5同步435
9.3.6複製435
9.3.7容錯性437
9.3.8安全性438
9.4CORBA、DCOM和Globe的比較439
9.4.1基本原理439
9.4.2通信440
9.4.3進程441
9.4.4命名441
9.4.5同步442
9.4.6快取與複製442
9.4.7容錯性442
9.4.8安全性442
9.5小結444
習題444第10章分散式檔案系統446
10.1SUN網路檔案系統446
10.1.1NFS概述447
10.1.2通信450
10.1.3進程451
10.1.4命名452
10.1.5同步458
10.1.6快取和複製462
10.1.7容錯性464
10.1.8安全性466
10.2Coda檔案系統469
10.2.1Coda概述469
10.2.2通信471
10.2.3進程472
10.2.4命名473
10.2.5同步474
10.2.6快取和複製477
10.2.7容錯性480
10.2.8安全性482
10.3其他分散式檔案系統484
10.3.1Plan 9: 資源統一為檔案485
10.3.2xFS: 無伺服器的檔案系統489
10.3.3SFS: 可擴展的安全性494
10.4分散式檔案系統的比較496
10.4.1設計理念497
10.4.2通信497
10.4.3進程497
10.4.4命名498
10.4.5同步499
10.4.6快取和複製499
10.4.7容錯性499
10.4.8安全性500
10.5小結501
習題501第11章基於文檔的分散式系統503
11.1WWW503
11.1.1WWW概述504
11.1.2通信511
11.1.3進程515
11.1.4命名520
11.1.5同步522
11.1.6快取和複製522
11.1.7容錯性526
11.1.8安全性526
11.2Lotus Notes527
11.2.1Lotus Notes概述527
11.2.2通信529
11.2.3進程530
11.2.4命名531
11.2.5同步533
11.2.6複製533
11.2.7容錯性535
11.2.8安全性535
11.3WWW和Lotus Notes的比較538
11.4小結542
習題542第12章基於協作的分散式系統544
12.1協作模型介紹544
12.2TIB/Rendezvous546
12.2.1TIB/Rendezvous概述546
12.2.2通信548
12.2.3進程551
12.2.4命名551
12.2.5同步553
12.2.6快取和複製554
12.2.7容錯性554
12.2.8安全性556
12.3JINI557
12.3.1Jini概述558
12.3.2通信560
12.3.3進程561
12.3.4命名563
12.3.5同步565
12.3.6快取和複製567
12.3.7容錯性567
12.3.8安全性567
12.4TIB/Rendezvous和Jini的比較568
12.5小結571
習題571第13章閱讀材料和參考書目573
13.1對進一步閱讀的建議573
13.1.1介紹性和綜述性的著作573
13.1.2通信574
13.1.3進程575
13.1.4命名576
13.1.5同步576
13.1.6一致性與複製577
13.1.7容錯性578
13.1.8安全性579
13.1.9面向對象的分散式系統580
13.1.10分散式檔案系統581
13.1.11基於文檔的分散式系統582
13.1.12基於協作的分散式系統583
13.2參考書目列表583