摘要
點對點(P
P)網絡無疑是當前最熱門的話題之一
在這個領域中
Sun推出了Jxta
一個用於P
P應用開發的網絡計算平台
這篇文章介紹P
P和Jxta在這方面所作的努力
適合有意開發P
P應用的編程者閱讀
今日的Internet正面臨著一場革命
這場革命正在為改變Internet的一個基本的特性而努力
這就是網絡的終端(或者說客戶端)
例如桌面電腦
移動電話
PDA等正要求一個更優越的網絡地位
以結束以服務器為主導的Internet
這就是P
P
P
P是一個網絡的模型
它的基本概念就是任何的節點都可以作為服務器或者客戶端
傳統的客戶/服務器網絡
都有預定義的客戶和服務器節點
而P
P則不同
P
P可提供一些額外的特性
而這些特性使用傳統的模型是無法實現的
在這篇文章中
我將為你介紹P
P網絡
並且將它和客戶/服務器網絡作對比
我還會介紹Jxta(發音是jux
ta)
Jxta是由Sun的首席科學家兼CEO Bill Joy提出來的
Jxta正在被成千上萬的開放源代碼開發者模型化
在P
P領域中
Jxta作出了巨大的改進
它定義了一套的協議
開發者可以使用這些協議來建立幾乎所有的P
P應用
同時
這些協議也非常靈活
可以適合不同應用的特別需要
Jxta也不使用特定的編程語言或者環境
不過Java無疑是一個適合的選擇
原因在於
便攜性
容易開發和豐富的類庫
P
P
概覽
現今最普遍的分布計算模型是客戶/服務器模型
圖一描繪的就是典型的客戶/服務器架構
*****圖一*******
在客戶/服務器體系中
客戶請求服務
服務器提供服務
在當今的Internet上
存在在大量的服務器
Web服務器
郵件服務器
FTP服務器等等
客戶/服務器體系是中央化體系的一個例子
整個的網絡都依靠中央的節點和命名的服務器來提供服務
如果沒有服務器
網絡將是毫無意義的
如果沒有它們
Web浏覽器如何工作?不論客戶端或者浏覽器的數目有多少
網絡只能在服務器存在的前提下才有意義
和客戶/服務器體系相似
P
P也是一個分布的計算模型
但是有一個很大的不同
P
P是一個非中央化的體系(如圖
)
在網絡中並沒有客戶或者服務器的狀態區分
網絡中的每個實體都是同等的
有著同樣的狀態
這意味著一個實體可以請求一個服務(客戶端的特性)或者提供一個服務(服務器的特性)
圖
展示的是一個P
P網絡
*****圖
*********
雖然每個節點在網絡中有著同等的狀態
不過它們並不要求都有著同樣的物理性能
一個P
P網絡可以包含有不同性能的節點
由移動設備到大型機
對於一個移動設備來說
可能由於自身的限制
不能作為服務器
但從網絡方面來說
並沒有這個限制
兩個網絡模型都有著各自的優點和缺點
由圖
的客戶/服務器網絡你可以看到
當網絡增大時(即越來越多的客戶加入)
中央服務器的壓力就越大
當加多一個客戶
中央節點的性能就會弱化
而它的失效將會導致整個網絡的癱瘓
對於P
P網絡來說
情況就完全不一樣了
由於網絡中的每個實體(或者節點)都是積極的參與者
每個節點都會為網絡提供一些資源
例如存儲空間或者CPU
當越來越多的節點加入網絡時
網絡的性能將會增長
因此
當網絡增大時
它的性能也會增強
你將不會碰到客戶/服務器體系中的擴展問題
P
P網絡和客戶/服務器模型還有一個很大的不同是
即使只有一個節點是活躍的
P
P網絡也被認為是活躍的
只有在沒有任何節點時
P
P網絡才是不可用的
不過
金無足赤
雖然P
P網絡有著這些的優點
但你也要付出一些代價的
首先
管理這樣一個網絡可能是一個噩夢
而在客戶/服務器網絡中
你只需要管理中央的節點
因此
無論在安全策略和備份策略方面
P
P網絡都要復雜一些
第二
P
P協議比傳統的客戶/服務器協議需要更多的
交互
例如當節點加入或者退出網絡
這些方面都會對性能產生一些影響
Jxta的解決之道
不同的協議
不同的體系
不同的實現
這就是當前P
P解決方案的精確描述
現今
開發者使用各種各樣的方法論和途徑來創建P
P應用
相對於客戶/服務器模型豐富的標准
P
P領域的標准可以說是很少
為此
Sun開發了Jxta
以下是Jxta前景的一些陳述
Jxta工程是為了建立核心的網絡計算技術
它提供一套簡單
精簡和便利的技術
可以在任何的平台
任何地點和任何時間支持P
P計算
該工程首先概述了P
P的功能
然後建立核心的技術
以彌補當前P
P計算方面的不足
它集中於創建基本的技術
並且將策略的選擇權交給應用的開發者
Jxta致力於提供一個基本的P
P架構
這樣其它的P
P應用可以建立在上面
這個基架包含有一套協議
這些協議與語言
平台和網絡都是無關的(這就是它們對底層的網絡沒有作出任何的假定)
這些協議只規定了建立普遍P
P應用的必要之處
它的設計是精簡的
開銷很小
這些協議的目的可引用Jxta前景陳述中的一句話來說明
要令每個設備都帶有一個數字的心跳
當前的Jxta定義了六種協議
不過並不要求所有的Jxta節點都實現全部六種協議
節點實現的協議數目和它的性能有關
一個節點可以只實現一種協議
根據需要
節點也可以擴展或者替換任何的協議
有一點要注意的是
Jxta協議自身並不提供交互性
對於這一點
你可以通過TCP/IP來理解這一點
雖然FTP和HTTP都建立在TCP/IP上
不過你不能使用FTP客戶來訪問網頁
Jxta也是這樣
兩個建立在Jxta上的應用並不意味著它們是可以交互的
這一點應該由開發者開保證
不過
由於Jxta提供了一個可交互的基層
所以開發者在實現交互時可以少考慮一些東西
Jxta中的XML
毫無疑問
要提供一個通用基本協議層
第一步就是要采用一種適合的表現方式
這種方式可以被當前的大部分平台明白
XML無疑是一個理想的選擇
它已經成為數據交換的一個默認標准
XML提供通用的
語言和平台無關的數據表現
XML也可以很容易地轉換為其它的編碼
因此
用XML格式定義了所有的Jxta協議
雖然Jxta的信息使用XML定義
不過Jxta並不依靠XML來編碼
實際上
Jxta實體並不需要一個XML解析器
它是一個可選的組件
可以將XML看成是Jxta使用的一種便利的數據表現形式
小的實體(例如移動電話)可以使用預編譯的XML信息
Jxta的術語
在更進一步講述Jxta之前
讓我們先來看一下它的各種術語
Peers(節點)
網絡上實現一種或者多種Jxta協議的任何實體
一個節點可以是任何的東西
例如大型機
小至一部移動電話
甚至是一個傳感器
節點的存在是獨立的
並且可以與其它節點異步通信
Peer groups(節點組)
有者共同目的的節點可以集合起來形成節點組
節點組可以跨越多個物理網絡域
Messages(信息)
在Jxta的網絡中
所有的通信是通過發送和接收信息來實現的
這些信息稱為Jxta messages
它們符合標准的格式
是交互的前提
Pipes(管道)
Pipes在Jxta的環境裡建立起虛擬的通信管道
節點通過它們來發送和接收Jxta的信息
Pipes被認為是虛擬的
因為Pipes無需要知道使用它們的真正網絡地址
這是一個重要的抽象
Services(服務)
Peers和Peer groups都可以提供服務
如果一個服務由一個peer獨立提供
那麼就被稱為是一個Peer服務
這是一個和中央化相等的概念
沒有其它的Peer需要提供該服務
如果該Peer沒有活動
那麼服務將無效
Peer groups提供的服務被稱為是peer group服務
與peer服務不同
這些服務並不依賴某個單獨的peer
而是由整個組提供
Peer group服務的可用性更強
因為即使一個peer不可用
其它的peers還可以繼續提供相同的服務
Codats
Codat (Code/Data)
在Jxta中
它意味著可以是代碼或者數據的內容
如果有需要
Codats可以被發布和復制
Advertisements
Advertisement可發布和揭露任何的Jxta資源
例如一個peer
一個peer組
一個管道或者codat
Advertisements以XML文檔的方式來表現
Identifiers(標識符)
在Jxta環境中
Identifiers扮演著重要的角色
Identifiers指定資源
而不是物理的網絡地址
Jxta的Identifier被定義為一個URN(Uniform Resource Name
統一資源名)
一個URN就是一個URI(Uniform Resource Identifier
統一資源標識符)
它必須是保持全局唯一的
即使是該資源不存在了
它仍然要保持不變
World peer group
任何一個Jxta peer
在默認的情況下都是World peer group的一個成員
每一個Jxta peer都知道World peer group
並且可以加入該peer組
即使它在網絡上找不到任何其它的peers
即使斷開的peer也是其中的成員
Net peer group
在一個本地網絡中
網絡管理員通常都可以設置一個peer組
該組可以讓網絡上的任何peer加入
這就是Net peer group
它類似一個DHCH(dynamic host configuration protocol
動態主機配置協議)服務
該Net peer group可為peer提供一個全局的連接
它的限制由管理者定義
Rendezvous peers(集合點)
一個集合點是一個特別的節點
它通過緩沖節點的廣播
可以存儲其它節點的信息
因此
一個集合點可以幫助節點發現網絡上的其它節點
集合點還可以將搜索的請求導向到其它的集合點
Endpoints(終點)
終點表示網絡上的一個目的地
它可以由一個網絡地址來表示
Peers通常都不直接使用終點
而是通過管道來間接使用它們
管道都建立在終點上
Routers(路由器)
在Jxta的網絡上移動包的東西均被稱為Jxta路由器
並不要求所有的peers都是路由器
不是路由器的pe
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27532.html