熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

把P2P進行到底:講述Jxta的故事(2)

2013-11-23 19:50:49  來源: Java高級技術 

  在 Jxta 規范中一個運行中的服務實例總是和一個對等機聯系在一起(您可以把它想象成是由一個對等服務器主管的)在一個對等組內只能有一個服務實例和指定的對等機聯系在一起這種類型的服務被視為對等服務如果主管該對等服務的對等機當機了那麼將無法獲得該服務另一方面同一服務的多個實例被冗余地安裝在一個對等組內的多個對等機上這被稱為對等組服務對等組服務是 Jxta 網絡的高可用性和容錯性的關鍵Jxta 應用的實現者可以自由地把任意 Jxta 服務作為對等服務或對等組服務進行安裝管道服務即為對等通信提供邏輯管道抽象的核心 Jxta 服務常常被作為對等組服務來實現以確保其總是可用
  
  管道正如 Jxta 規范定義在對等機之間傳輸數據文件信息代碼或多媒體內容的一種方式是通過邏輯管道Jxta 管道用於在對等機之間發送消息(可帶任意內容)
  
  一個管道實例從邏輯上講是對等組內的一個資源管道實例的實際實現通常情況下是通過管道服務完成的與傳統(類似 UNIX 的)的系統不同Jxta 管道是單向的異步的需要雙向通信的兩個對等機將不得不創建兩個獨立的管道實例也跟傳統機制如 UNIX 管道或 TCP/IP 套接字不同Jxta 管道的末端可以在不同的時間連接到不同的對等機上或者根本不連接在為 PP 網絡上的服務提供冗余實現方面只此一個單一概念就是革命性的一步對等機可以在任一點及時邏輯地拾起管道例如設想一個想使用拼寫檢查器服務的對等機它可以連接到一個對等組的拼寫檢查器管道(該管道是被作為冗余對等組服務實現的)上在這種情況下只要至少有一個拼寫檢查器的實例還在該對等組內的某個地方運行該對等機就還能得到服務
  
  Jxta 規范提供了兩種一般類型的管道點對點和廣播(propagate)
  
  對等機可以使用點對點管道連接到另一個對等機並單向傳輸消息對等機可以使用廣播管道連接到一個或多個其它對等機並向它們全體傳輸消息從本質上講點對點管道是一對一的消息傳輸機制廣播管道則是一對多的消息傳輸機制Jxta 社區目前正在多對多消息傳輸機制方面努力這個機制已經被命名為 Jxta 導線(wire)不管是什麼類型的管道通過管道載送的信息塊都稱為 Jxta 消息那麼這些消息的確切格式是什麼樣子呢?
  
  消息 Jxta 消息是通過管道從一個對等機傳送到另一個對等機的數據束這裡Jxta 規范再一次盡可能地使自己普遍適應以免不經意間在消息的定義中引入任何依賴於實現的策略消息被定義為由信封和正文組成的任意大小的束信封是標准格式它包括
  
  報頭
  源端點信息(URI 格式)
  目的地端點信息(URI 格式)
  消息摘要(可選的出於安全性目的)
  消息正文的長度是任意的可以包含一個可選的信任狀(出於安全性目的)和內容
  
  請注意Jxta 消息的定義非常松散考慮到我們日常一般都是在可靠的寬帶的 TCP/IP 網絡上操作這樣做的必要性並不是立即可以明了的但 Jxta 消息的格式必須是靈活的善於適應新環境的因為它可能要在所有種類的網絡上實現而不只是在 TCP/IP 上設想在一個支持 字節數據包的不可靠傳輸的網絡(象傳統的基於數據包的無線網絡)上的一個 Jxta 實現您就會對 Jxta 消息的簡單定義如何使自己適應諸如這樣的不利環境表示贊賞
  
  為了提供一個標准的語法上易分析的通用的編碼機制Jxta 消息目前采用 XML 文檔格式Jxta 利用了 XML 的普遍可訪問性和易使用易編程的特點這意味著 Jxta 可以用大多數編程語言在大多數平台上很容易地實現只要 XML 語法分析器和生成庫在那裡是可用的然而Jxta 本身的設計卻使其消息代碼的編寫不依賴於 XML 的使用雖然現在不太可能但 Jxta 社區在規范的未來版本中包含(或要求)基於非 XML 的消息是完全可能的
  
  關於 Jxta 標識符從潛力上講對等組或許可以跟整個聯系著的宇宙一樣大在這麼大的名稱空間中為任何事物進行唯一的命名都是一個挑戰為了應對這個問題Jxta 給 Jxta 組件的每個可設定地址的實例都分配了一個內部標識符這種標識是通過一個 UUID 進行的UUID 是使用能夠確保在時間和空間上都有很高概率的唯一性的算法產生的 字節的數字Jxta 標識符是 URN(統一資源名稱)格式的並被嵌入到廣告中供內部使用目前定義了四種標識符類型用於標識對等組對等機管道和代碼/數據(code/data)(簡寫為 codat)
  
  廣告
  廣告有點像是消息的堂兄弟Jxta 廣告也采用 XML 文檔格式廣告的內容描述了諸如對等機對等組管道或服務等 Jxta 組件實例的屬性例如可以訪問另一個對等機的廣告的對等機可以設法直接連到該對等機上可以訪問一個對等組的廣告的對等機可以通過廣告加入對等組目前的因特網中與廣告相似的東西是域名和 Web 站點的 DNS 紀錄Jxta 規范沒有規定如何創建傳播或銷毀廣告
  
  互操作性的基礎Jxta 協議互操作性的另一個關鍵是這樣一個事實核心 Jxta 對等交互操作模型被完全表示為在底層網絡上傳輸的一套簡單協議換句話說既然協議和消息格式是定義完好的那麼基於 Jxta 的系統間的互操作性完全可以在導線一級上達到
  
  例如一個簡單的 PDA( 位處理器基於 C 語言編程)就可以是一個運行在基於數據包的無線網絡上的 Jxta 對等機它可與同一對等組內的各種系統從 PC 服務器到大型機進行交互如果這些對等機共享一個公共網絡(傳送)並正使用 Jxta 協議和消息格式進行通信這是可以做到的
  
  Sun 已為 Jxta 提供了初步的 Java 語言實現Jxta 社區現在擁有這個參考實現這個參考實現為那些想立刻使用 Jxta 的 Java 程序員把事情變簡單了而如果您正在非 Java 平台上實現 Jxta那麼理解這些協議就是非常重要的 簡要描述了 Jxta 協議的核心集涵蓋了發現(對等機如何找到對方)廣告(對等機如何讓別的對等機了解對等組管道等信息)通過管道進行的通信和對等組成員資格的處理下面的所有協議都是建立在傳送器上的 XML 消息交換的基礎上的同樣地它們可以用幾乎所有的編程語言在幾乎所有平台上實現
  
  表 Jxta 核心協議
  
  Jxta 規范不要求對等機實現上述所有協議任一特定的對等機只須實現那些實際要用到的協議
  
  基於 Jxta 的系統的一些有趣的屬性
  既然您已經對 Jxta 平台理論上的構件有了一個基本理解我們就來討論一下作為 Jxta 設計結果的一些有趣的屬性
  
  有電子心跳的任何東西都可以成為一個 Jxta 對等機從理論上說有文本字符串生成能力的最簡設備都可以加入(雖然並不是在每個 PP 應用中都有必要)到 Jxta 網絡中這是怎麼成為可能的呢?
  
  在 PP 網絡上過分簡化的設備需要對等代理人這個代理人可以代表該簡化設備(或多個簡化設備)執行發現廣告和通信代理人的位置可以被硬性固定在簡化設備這樣在代理人的幫助下簡化設備就可以成為 Jxta 網絡上完全合格的對等機例如一個被綁在一只海龜身上並以無線方式發送出帶有位置信息的 Jxta 消息的 GPS 定位器就可以成為 Jxta 網絡上的一個對等機
  
  不確定拓撲結構的網絡中的順序
  典型 Jxta 網絡另一個迷人的方面是它固有的不確定的拓撲/響應結構計算機用戶通常都習慣於本質上確定的同步的計算機系統並認為這是一種標准結構例如當我們的浏覽器發出 Web 頁面的 一個 URL 請求時我們期望輸出立刻就會出現我們還期望世界上的每個人都可以使用同一個 URL 從同一個 Web 服務器檢索同一個頁面
  
  在 Jxta 世界裡一個特定的資源請求不會在幾分鐘幾小時或甚至幾天內返回事實上它可能根本就不會返回另外請求同一資源的世界各地的人們很可能得到的是來自完全不同的服務器的資源副本這就引起了一個問題不確定性系統有什麼好處呢?
  
  來自 grassroots 軟件革命的靈感
  我們只要看看象 Napster 和 Gnutella 這樣的流行 PP 系統就可以找到答案下面是它們的一些額外的優勢特征(它們使同步性和確定性的喪失變得值得)
  
  內容的高可用性
  對等機可以從多個服務器上獲取內容理想情況下可從附近開機運行著的一台服務器上獲得原始源對等機不必為每一個資源請求服務事實上它甚至可以不開機運行網絡帶寬的最優化使用
  現今 Web 上典型的局部流量集中導致的擁塞不會影響 PP 網絡
  
  更低的內容分發成本
  PP 網絡能吸納內容並復制它以使它易於存取
  
  來自網絡中各個節點的計算能力的均衡
  通過異步操作您可以同時發出許多資源或服務請求然後讓網絡為您完成這些工作
  
  無限的可伸縮性
  一個設計良好的 PP 應用可以在不影響可伸縮性限制的情況下橫越整個已知的連接著的宇宙而這在任何集中式模式中是完全不可能的
  
  在完美的 Jxta 世界中我們將在不確定性網絡上執行異步請求您覺得這個概念古怪嗎?讓我們用一個示例來闡明設想一個在基於 Jxta 的 PP 網絡上運行的基於網絡的音樂請求服務對等機提交了幾個對音樂文件的請求並在一段時間後核查對等組中的音樂請求服務是否找到了這些文件當我們在一段時間後去核查音樂請求服務時所請求的一些文件已經被找到但其它的卻無法定位服務對那些文件的響應是音樂的選擇和可用性在不斷地變化請稍後重試您的請求這是一個可接受的不確定的結果雖然服務未能找到一個文件
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27563.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.