什么是分布式系統(tǒng)?分布式系統(tǒng)是隨著計算機(jī)和網(wǎng)絡(luò)技術(shù)的發(fā)展而發(fā)展起來的,人們希望通過多臺計算機(jī)組成的網(wǎng)絡(luò)以協(xié)作的方式共同完成單個計算機(jī)所無法完成的任務(wù)。
什么是分布式系統(tǒng)呢?
目前國內(nèi)學(xué)術(shù)界大多采用美國學(xué)者Tanenbaum對分布式系統(tǒng)的定義:一個分布式系統(tǒng)是一些獨立的計算機(jī)的集合,但是對于該系統(tǒng)的用戶來說,系統(tǒng)就像一臺計算機(jī)一樣。
這個定義有兩個方面的含義:
第一,從硬件角度來看,每臺計算機(jī)都是自主的;
第二,從軟件角度來看,用戶將整個系統(tǒng)視為一臺計算機(jī)。這兩者是必須的、缺一不可的。
與集中式系統(tǒng)相比,分布式系統(tǒng)具有哪些特點呢?
分布式系統(tǒng)相對更為復(fù)雜,在設(shè)計一個分布式系統(tǒng)時在資源的透明性、系統(tǒng)容錯性和可伸縮性等方面需要特別關(guān)注。
透明性是指如何使得用戶以為一些計算機(jī)組成的分布式系統(tǒng)只是一臺計算機(jī),它包含的內(nèi)容很多,表1列出了一些主要內(nèi)容。
表1 分布式系統(tǒng)的透明性

容錯性是指分布式系統(tǒng)中部分節(jié)點故障后不會影響整個系統(tǒng)的正常運(yùn)行。一般通過冗余配置的方法來實現(xiàn)容錯,例如數(shù)據(jù)備份。
可伸縮性是指分布式系統(tǒng)能夠適應(yīng)在計算節(jié)點數(shù)、用戶數(shù)、存儲資源、網(wǎng)絡(luò)資源等方面系統(tǒng)規(guī)模的靜態(tài)或動態(tài)變化。
我經(jīng)常聽到分布式計算、分布式數(shù)據(jù)庫等概念,它們和分布式系統(tǒng)是什么關(guān)系呢?
分布式的概念已經(jīng)在計算機(jī)技術(shù)領(lǐng)域得到了非常廣泛的應(yīng)用,學(xué)術(shù)界對這些眾多冠以“分布式”頭銜的概念與分布式系統(tǒng)之間的關(guān)系也不存在一個權(quán)威的說法。
如圖1所示,大致可以將分布式系統(tǒng)劃分為分布式硬件架構(gòu)、分布式操作系統(tǒng)、分布式數(shù)據(jù)庫、分布式程序設(shè)計和分布式應(yīng)用5個層次。其中分布式操作系統(tǒng)中還包括分布式文件系統(tǒng),分布式程序設(shè)計的產(chǎn)品通常是中間件軟件,而分布式計算和云計算則屬于分布式應(yīng)用中的重要內(nèi)容。

圖1 分布式系統(tǒng)的層次
計算機(jī)硬件層面有哪些分布式設(shè)計架構(gòu)?
Tanenbaum將硬件的分布式架構(gòu)劃分為基于總線的多處理機(jī)、交換型多處理機(jī)、基于總線的多計算機(jī)和交換型多計算機(jī)四種類型,如圖2和圖3所示。

圖2 分布式硬件架構(gòu)(1)

圖3 分布式硬件架構(gòu)(2)
基于總線的多處理機(jī)由多個CPU組成,它們連接到一個公共的總線上,并且共享同一個存儲模塊。交換型多處理機(jī)由多個CPU和多個存儲模塊組成,通過連接開關(guān)控制CPU與存儲模塊的對應(yīng)關(guān)系。目前計算機(jī)上常用的Intel多核處理器可以看作是基于總線的多處理機(jī)結(jié)構(gòu)。
基于總線的多計算機(jī)由多個計算機(jī)組成,每個計算機(jī)都具有本地存儲器,它們之間通過總線連接,典型的應(yīng)用實例就是常見的局域網(wǎng)絡(luò)。交換型多計算機(jī)由多個計算機(jī)組成,它們采用網(wǎng)格或超立方體等方式連接。
分布式操作系統(tǒng)是什么概念?其中的分布式文件系統(tǒng)又是什么含義?
操作系統(tǒng)的概念大家都非常熟悉了,我們?nèi)粘J褂玫挠嬎銠C(jī)都要先安裝一個Windows操作系統(tǒng)才可以使用。操作系統(tǒng)管理的對象是單個計算機(jī),而分布式操作系統(tǒng)管理的是多個計算機(jī)組成的網(wǎng)絡(luò)。
如圖4所示,分布式操作系統(tǒng)屏蔽了計算機(jī)網(wǎng)絡(luò)的底層細(xì)節(jié),像單機(jī)操作系統(tǒng)一樣,能夠為應(yīng)用程序提供統(tǒng)一的進(jìn)程調(diào)度、文件管理、設(shè)備管理等接口。

圖4 單機(jī)操作系統(tǒng)與分布式操作系統(tǒng)
文件系統(tǒng)是操作系統(tǒng)的一個重要組成部分,例如Windows就提供了文件管理功能。分布式文件系統(tǒng)是分布式操作系統(tǒng)中的重要組成部分,此時文件系統(tǒng)管理的物理存儲資源不僅僅直接連接在本地節(jié)點上,而且通過網(wǎng)絡(luò)與遠(yuǎn)程節(jié)點相連。
分布式數(shù)據(jù)庫與傳統(tǒng)數(shù)據(jù)庫有什么不同?
分布式數(shù)據(jù)庫通過計算機(jī)網(wǎng)絡(luò)將物理上分散的多個數(shù)據(jù)單元連接起來組成一個邏輯上統(tǒng)一的數(shù)據(jù)庫,其中有一個統(tǒng)一的數(shù)據(jù)庫管理系統(tǒng)來進(jìn)行管理,一般稱為分布式數(shù)據(jù)庫管理系統(tǒng)。
傳統(tǒng)的數(shù)據(jù)庫一般都是集中式數(shù)據(jù)庫,與之相比,分布式數(shù)據(jù)庫最大的特點就是其數(shù)據(jù)是分布存儲的。顯然,分布式數(shù)據(jù)庫的管理更為復(fù)雜,不過如果設(shè)計得當(dāng),針對分布式數(shù)據(jù)管理問題可以取得比集中式數(shù)據(jù)庫更好的效果。例如,采用多節(jié)點并行處理可以提高系統(tǒng)性能,采用冗余配置可以提高系統(tǒng)的容錯性。
什么是分布式程序設(shè)計?中間件又是什么含義?
分布式程序設(shè)計是指可以在分布式計算機(jī)系統(tǒng)的多臺計算機(jī)上同時協(xié)作運(yùn)行的程序設(shè)計方法。采用分布式程序設(shè)計方法設(shè)計程序時,一個程序由若干個可獨立執(zhí)行的模塊組成,每個模塊分布在一臺計算機(jī)上,它們之間相互通信協(xié)作完成任務(wù)。例如,常見的客戶-服務(wù)器模型就是一種典型的分布式設(shè)計方法,通常采用消息交互、遠(yuǎn)程進(jìn)程調(diào)用或遠(yuǎn)程對象調(diào)用等方式來實現(xiàn)客戶與服務(wù)器之間的通信。
如圖5所示,簡單地說,中間件就是采用分布式程序設(shè)計方法生產(chǎn)出來的一類特殊軟件產(chǎn)品,它能夠在異構(gòu)的系統(tǒng)軟件和應(yīng)用軟件之間提供連接服務(wù)。

圖5 中間件
中間件涵蓋的范圍非常廣泛,針對不同的應(yīng)用需求涌現(xiàn)出多種各具特色的中間件產(chǎn)品。例如IBM公司的MQSeries屬于面向消息的中間件,IONA公司的Orbix則屬于符合CORBA標(biāo)準(zhǔn)的面向?qū)ο笳埱蟠淼闹虚g件。
分布式應(yīng)用包括哪些內(nèi)容?
分布式系統(tǒng)的應(yīng)用是非常多的,例如工業(yè)控制技術(shù)中的集散控制系統(tǒng)、計算機(jī)技術(shù)中的P2P計算、網(wǎng)格計算、并行計算、分布式計算和云計算都可以納入分布式應(yīng)用的范疇。
分布式系統(tǒng)與云計算有什么關(guān)系?
有一個很有趣的現(xiàn)象,網(wǎng)格計算的研究是學(xué)術(shù)界熱而企業(yè)界不熱,云計算的研究則是學(xué)術(shù)界不熱而企業(yè)界熱,因此很有必要仔細(xì)研究一下各企業(yè)推出的成功的云計算產(chǎn)品。
細(xì)數(shù)一下這些產(chǎn)品,包括了Google公司的GFS、Bigtable、MapReduce,Amazon公司的Dynamo,Hadoop開源項目的HDFS、Hbase、MapReduce等。對照圖1,就可以發(fā)現(xiàn)它們都屬于分布式系統(tǒng)的范疇,其中GFS、HDFS算是分布式文件系統(tǒng),Bigtable、Dynamo和Hbase算是分布式數(shù)據(jù)庫,MapReduce則歸于分布式計算。