對等網絡計算 (peer
to
peer
P
P) 成功地將許多有趣的分布計算技術重新拉回到人們視線中
為了更好地理解 P
P 技術
本文主要從
年代初流行的早期 P
P 應用程序開始
闡述 P
P 的發展過程
並解釋 P
P 計算技術之所以擁有廣闊前景的原因
同時
還給出一個最簡單的 P
P 程序代碼
從而說明使用 P
P 技術時要解決哪些問題
通過這些內容
您可以使用 Java 語言來編寫自己的 P
P 程序
或是利用 P
P 中某些技術來解決您項目中遇到的類似問題
在大多數人眼中
P
P 僅僅是一種局限於文件共享的應用
或是由互聯網介入給計算方法帶來的新發展
這種錯誤的印象很大程度上是由那些極端的 P
P 支持者造成的
事實上
P
P 計算是非常重要的
它成功地將許多被忽略的有用技術拉回到大家注視的焦點
掌握如何將 P
P 計算應用到更廣闊的技術領域是很有幫助的
當然
通過一些實際的 P
P 代碼來學習也是必須的
所以本文也會給出一些用 Java 語言編寫的代碼例子
下面將具體闡述 P
P 的有關知識
為了避免陷入其他一些不太重要的周邊細節討論
本文將主要集中討論以下幾個方面
在許多流行的 P
P 應用中
不可避免地要涉及到合法
隱私安全
控制以及版權等問題
盡管這些方面都是非常有趣的課題
卻不應該過分地分散掉我們討論 P
P 技術的注意力
因此通常情況下本文不會涉及這些課題
除非某個專門的應用例子必須解決它們
技術工程師在設計和開發 P
P 應用程序時遇到的問題未必都是新問題
因此在討論到這些舊問題時
會借鑒計算機科學其他領域中的一些現成技術
總而言之
我們希望能夠將精力集中在技術本身
主要包括內容和資源的管理
信賴和安全
屬主和權限
通訊模型
分布式計算
以及搜索和查詢等
至於 P
P 技術所涉及的社會
政治和合法性等問題則基本上略過不談
P
P 應用最初出現時和現在並不相同
事實上可以認為它是若干不同技術以及流行趨勢的產物
下面是兩個導致 P
P 技術發展最重要的趨勢
首先是某些新技術與軟件工程結合
形成了一種將工作分散的趨勢
P
P 計算正是這種分散工作趨勢的自然結果
其次
從工程的角度看來
在企業應用集成等因素的驅動下
過去十年漸漸形成一種從集中的單機系統轉向分布式系統的趨勢
在集中式的應用中進行控制是相對容易的
這一點在一定程度上抑制了分布式潮流的發展
然而隨著互聯網的發展
以及 B
B 商務交易方式的日益流行
全面的分布式計算也就成為一種商業需求
對功能強大的網絡計算機的需求以及昂貴的帶寬開銷
是對這種趨勢影響最大的兩個因素
為了提高效率
P
P 計算由許多互相連接的同位體 (peer) 組成
這兩種趨勢導致了 P
P 應用技術研究的迅速發展
除了技術方面之外的社會因素也是一個重要原因
毫無疑問
人們現在對 P
P 計算技術的熱切關注起源於 Napster
Scour
Gnutella
以及這些家族的其他成員產品
這些產品提供了所謂的
killer apps
功能
能夠將 P
P 技術中的一部分下放到客戶端用戶的手中
正是這種第一手的體驗
使得人們越來越關注 P
P 技術的強大功能
然而必須指出的是
最初的 P
P 應用大約產生於
年前
並且其中的許多至今仍然被使用
盡管這些早期應用的核心就是 P
P
但由於大多數的使用者並未感覺或接觸到
因此通常並不認為它們是 P
P 技術
早期的嘗試 P
P 計算並非一種全新的技術
雖然 P
P 這個術語是現在才發明的
但 P
P 本身的基本技術的存在時間卻至少和 USENET
FidoNet 這兩種非常成功的分布式對等網絡技術一樣長
甚至更長些(因此筆者建議讀者朋友去嘗試這樣一個挑戰——尋造最早的 P
P 應用
尤其是那些現今仍在使用的應用)
關鍵在於
在最初的 P
P 應用出現時
許多使用該技術的人們甚至不會使用計算機
USENET 產生於
年
是一種分布式系統
能夠為各個地方提供新聞組
USENET 最早的雛形由是兩名研究生 Tom Truscott 和 Jim Ellis 實現的
當時並沒有任何類似於互聯網上
隨選
信息的概念
文件只能通過電話線批量傳送
且常常選在長途費用比較低的夜間進行
因此
當時的 USENET 若采用集中式的控制管理方法將效率低下
自然而然地就提出了一種分散
分布式的管理方法
這種分布的結構一直沿用到今天
早期 P
P 應用另一個傑出的代表則是 FidoNet
它和 USENET 類似
也是一個分散
分布的信息交換系統
Tom Jennings 於
年創建了 FidoNet 系統
來讓不同 BBS 系統中的用戶們互相交換信息
這種符合人們需要的技術
迅速成長起來
並一直沿用到今天
USENET 和 FidoNet 都是值得探究的系統
因為它們在多年前就遇到並解決了許多當今 P
P 技術所面臨的同樣問題
同時也還存在著安全性以及其他一些問題
為了開發成功的 P
P 計算系統
首先必須了解這些 P
P 技術的發展歷史
幾乎所有人都會同意
P
P 計算是分布計算的一個子集
這種說法
而且大多數人也都會認為
並非所有的分布式計算都是 P
P 計算
peer
to
peer
這個名字意味著各個 peer 之間的關系是平等的
並且它們之間的聯系是直接的
P
P 網絡中含有許多能夠互相通訊的 peer
每個 peer 都有專門的用途
通常情況下
網絡中 peer 的數目是非常大的
但用途卻只有若干種
這就是 P
P 應用之所以能大量並行運行的重要原因
眾所周知的 Gnutella 網絡就是一個最好的例子
它包含了大量本質上相同的 peer
P
P 技術中最有趣的地方就在於這些對等 peer 之間的聯系
其次則是它們自身
在很大程度上
P
P 計算與那些分布計算所面臨的問題是重疊的——調整並監控網絡中獨立節點的動作
並確保魯棒性
以及節點間的可靠通訊
但並非所有的分布計算都是 P
P 計算
比如象 SETI@home 或 中不同的項目
這些分布計算幾乎沒有考慮網絡節點中的對等交互
因此並不能認為是真正意義上的 P
P 應用
然而由於分布計算和 P
P 面臨很多相同的問題
這就值得我們了解一些分布計算方面的內容
對於這類不能算是 P
P 技術的分布計算
筆者建議用
面向同位體
的應用(peer
oriented)來命名
最簡單的 peer 以及它存在的問題 使用 Java 語言編寫一個最基本的 P
P 應用是非常容易的
這裡筆者給出一個簡單的例子
以供讀者參考
給出這個例子的另一目的則在於表明
在網絡中傳送文件和消息是很方便的
然而若要為 P
P 應用建立一個魯棒性很好的平台則很困難
這個 P
P 例子中缺少了許多應有的重要特性
其中
例如安全性等特性也是當今許多流行的 P
P 應用所缺乏的
另外一些特性(例如消息路由和分布查詢等)則在某些應用中得到了實現
例如 Gnutella 就能夠支持簡單的消息路由以及分布查詢
圖
中顯示了一個典型 P
P 應用的系統框圖
為了支持文件共享
這個 P
P 系統只負責與抽象的資源進行交互
而具體資源則從 Resource 接口中獲得
這些具體資源可以是任何可定位的信息
包括文件系統
數據庫
詞典或是一個電話本
圖 PP 應用的主體設計框圖 MessageServer 類是這個 P
P 應用的核心
它能夠與其他的對等網絡獲得聯系
並將消息轉發到合適的地方
該類的具體代碼在文件 p
p
jar 中(可以在 資料 部分下載此文件)
讀者可以試著在命令行環境下
輸入 java
jar p
p
jar
就能夠運行這個簡單的 P
P 應用程序
這個程序會從它所在的目錄中尋找名為 p
p
properties 的屬性文件
在屬性文件中可以定義要下載的資源以及它所知道的同位體信息
您所下載的 jar 文件中還含有一個屬性文件的樣本
可以對它進一步修改
如圖
所示
用戶可以通過簡單的命令行界面與該 P
P 程序交互
如果已選擇了某個 peer 或是正在訪問某些遠程資源
則該程序會將相關的信息顯示出來
圖 程序的初始運行界面 任何時候
用戶只要在提示符後面輸入一個問號(?)
屏幕上就會顯示出一系列選項(如圖
所示)
如果用戶還沒有選擇 peer
輸入問號時
就會顯示出該程序的所有已知的 peer
否則則顯示已選定 peer 能夠訪問到的資源
只要在提示符後面輸入某個 peer 或資源的名字
就能夠選定它們
圖 顯示 peer 和資源列表 在圖
中
用戶選擇了名為
guppy
的 peer
然後顯示 guppy 能夠獲得的資源
在選定 peer 和資源之後
用戶就能夠訪問並控制該資源(如圖
)
如果選定的是一個文件系統資源
那麼對該資源對象的訪問就意味著從遠程 peer 將該對象拷貝到本地 peer 中
圖 列出可控制的資源對象 只要輸入兩個點(
)
用戶就可以隨時取消對某個資源或 peer 的選擇
圖 取消選擇 真正的 P
P 應用程序顯然要比本文中這個簡單的應用程序復雜得多
它至少還需要擴展以下幾個方面的功能
足夠的安全性(包括驗證以及授權等機制)
可靠的消息路由和傳送
內容和資源的管理
分布查詢以及命名
在以後的章節中
筆者還會提出一些的具體例子和工作代碼
來進一步討論這些功能的實現
From:http://tw.wingwit.com/Article/program/Java/gj/201311/11151.html