1. 程式人生 > >分散式系統閱讀筆記(一)-----分散式系統的特徵

分散式系統閱讀筆記(一)-----分散式系統的特徵

1)引言

從今天開始,我將會開始學習分散式系統的一些理論知識,全方面的重新學習分散式的各個技術點,所以選用了原版本的英文教材<<Dstributed Sysytems Concepts And Design>>作為學習的資源。在期間,我會沒讀完一章,及時的做一些閱讀的筆記,1個是怕自己忘了,還有一個是把知識分享給大家,這也是我首次閱讀全英文的書籍,還是挺吃力的,希望能堅持把長達1000頁的書籍學習完把。

2)分散式系統的介紹

分散式系統是通過網路連線各個計算機,通過訊息通訊的方式實現溝通。有下面3個主要特徵

1.併發性,當你在使用你的計算機做你的事情時,別人也在用他的電腦做他的事。

2.沒有全域性的時鐘的概念,很顯然,不同地區的時區的時間是不一樣。

3.失敗的獨立性,當你的電腦崩潰的時候,他只會影響到你自己,其他節點上的電腦還是會繼續執行的。

3)分散式系統的例子

1.Web搜尋,比如米在Google上搜索學校,Google就會在數千個節點中所存放的圖片,文字中去尋找相應的資料,最終呈現在你的面前,在這裡面需要數千個計算機節點的支援,這些節點分散式於事件各地,裡面存放了大致PB,TB級別的資源。

2.線上遊戲。線上遊戲主要考慮的一個問題是遊戲的併發處理能力,但你的只有1000名的時候,系統也許運作非常正常,但是當你的系統的使用者規模擴大到100W的時候,你的系統還能承受的了嘛,也許這個時候你的系統結構得進行調整了,還是C-S結構, Or Point-To-Point點對對的方式?

3.金融貿易系統。金融貿易系統也是一個非常典型的分散式系統運作的例子。裡面展現各個資源的資訊,以及價格的波動於變化,所有他對於1個因素是非常看重的,那就是real-time(實時性),所有像這類系統,在設計之初就做全方面的考慮。

4)分散式系統的趨勢

1.將會成為普遍的網路技術。分散式系統將會在現代的網路中越來越普遍,龐大的因特網本身就可以看做是一個分散式的系統

2.分散式系統對於移動計算的支援。你可以用你的手提電腦,又或者是你的手機,通過網路可以隨時控制家中的洗衣機洗衣服,也可以在辦公室實時查閱室內的溫度,前提是隻要你接入了網。

3.分散式多媒體系統。隨著分散式系統的發展,也越來越支援多媒體的服務,可以在分散式系統中存放多種型別的多媒體資訊,圖片,文字,視訊,音訊等,並通過網路的方式在展示給使用者。

4.分散式的計算將會成為一個公共的服務。其實這就是我們老是提到的Cloud Computing(雲端計算),可以把分散式系統中的資源當成一種服務賣給第三方,可以物理上的服務,比如IAAS基礎設施的服務,可以上層的SaaS軟體服務,無須使用者去關心內部的細節。

5)資源共享

在分散式系統中,一個很重要的概念就是Resource Sharing,資源共享,正是因為資源的共享性,才方便了人們的操作,比如上面的一個檔案,你可以去閱讀,人家也可以閱讀。

6)分散式所面臨的挑戰和困難

1.異構的環境。至少下面的這些東西可能會不一樣,網路,硬體資源,作業系統,程式語言,還有不同的開發者,目前針對於此的辦法是中介軟體的解決辦法,比如比較早的CORBA架構,還有1寫中介軟體java RMI,但是隻是支援java一種語言的,還有一種辦法是mobile code的方法,這是什麼意思呢,字面意思是可移動性的程式碼,就是你的程式碼在你自己的機子上面編寫,但是最終我會讓他執行在其他的機子上,一個很好的例子就是java語言,他通過執行jvm上就解決了作業系統不一樣的問題。

2.開放性的問題。分散式系統的開發性一直不是特別好,一個關鍵的因素是介面的公開性,只有介面的公開才能讓更多的開發者去擴充套件這個分散式系統。介面的公開意味要進行統一的規範的宣告,因為 要考慮到他的異構的環境。

3.安全問題。安全問題在分散式系統中來說,主要針對的是資源來說的,當然常見的操作就是加密操作了,或者你乾脆不開放你的系統,只給內部人員使用,但是有2個問題還是很難解決的:

(1).Dos拒絕服務攻擊,如果你辦公室的人因為某種原因佔著資源不放,你要怎麼辦。

(2).移動程式的安全攻擊,英文原稱是Security Of mobile code,一個常見的例子是你早上收到了一封電子郵件,當你毫無戒備心開啟它的時候,其實這時候你運行了一個惡意的程式,你的電腦就被attack了。

4.擴充套件性。在分散式系統中,擴充套件性一直是一個非常頭大的東西,但你的使用者群數量成倍增長的時候,你要考慮用各種手段去改善你的系統了,不過你要要率下面幾個因素:

(1).控制物理資源的開銷,意味的增加機子不是一個永恆的解決辦法,至少開銷這塊你花不起。

(2).控制資料的流失,當你的系統進行擴增的情況下,不能讓原先的資料發生loss的操作

(3).防止軟體的資源被耗盡,比如說IP地址的數量,32位的ip地址越來越不能滿足我們生活的需要了。

(4).避免系統出現效能瓶頸。

5.出錯處理。一個好的分散式系統應當有個好的容錯機制。下面是幾個措施

(1).檢測出錯,以便系統的下一步處理,常用方法,checksum校驗和機制

(2).掩蓋錯誤,當錯誤來到的時候,重新嘗試一次,或者當檔案中資料寫向磁碟中多個副本,當一個出錯的時候,沒關係還能保證其他的副本中的資料時正確的。

6.併發性。在高併發的情況下,保證資料的有序性,不會錯誤,用的比較多的方案是資訊號機制。

7.操作透明性。分散式系統使用起來要像使用自己本地主要一樣。

8.Qos服務質量。一個好的服務質量是對於分散式服務的一個基本要求。考察服務質量的2個因素是實用性和安全性。

參考文獻:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair