前幾年的網路泡沫化,許多人對B2B、B2C及C2C已經夠感冒了,這幾年竟又崛起所謂的P2P(Peer-to-Peer)。到了1999年時,Shawn Fanning突發奇想地撰寫一套Napster軟體來使同儕間能共享MP3檔案。當時的設計其實還是在主從式架構底下,不過因為資料量在真正傳遞時,是直接由分享雙方對傳的,所以開始有了P2P的味道。就像知名開放源碼大老Eric S. Raymond(ESR)說過:「每件出色的軟體都來自開發者個人的特殊需要(譬如搔癢)」。儘管這個突發奇想出身平凡,卻有驚人魅力吸引著學界與業界,以至於這幾年相繼出現許多P2P的新興領域與市場,而P2P能成功的道理在於滿足新世代網際網路使用者所喜愛的兩大需求:分享與開放。
P2P的架構
從P這個字母就佔了整個術語的2/3來看,Peer是P2P技術中很重要的元件。既然P2P所強調的觀念就是分享與開放,在整個P2P網路中,只要任意兩方能夠直接進行連線,滿足彼此的需求,則這兩方即符合P2P的要求,所以並不能因為網路上某個節點所具備的能力和其他人有所差異(譬如有一台集中式索引伺服器或一台代理伺服器),即判定此網路不符合P2P的精神,換句話說,只要使用者彼此之間能做到P2P連線,就可以算是P2P網路。
目前大部分的P2P軟體是架構在TCP/IP協定之下,所應用的領域以MP3檔案的分享最為人知。以開山始祖Napster為例(國內EZPeer及Kuro亦採用此架構),Napster所採用的是集中式架構(圖一),既有一個集中式伺服器做為索引目錄的建立,因此整個網路的資源消耗較低、速度較快和延展性較高,而缺點是可靠性較低(單點故障)以及維護成本高昂。而後來的仿效者如Gnutella及E-Donkey改採用分散式架構(圖二),沒有集中式的伺服器,相對地網路的延展性變低,容易造成壅塞,而優點則是可靠性高和建置成本極低。假如讀者想問哪一種P2P的架構較好?當我們以教堂與市集來形容專屬軟體與開放源碼之間的角色定位時,集中式P2P與分散式P2P正有著這樣的味道。
Napster的架構:
- 1. 連線:安裝Napster軟體後,做為Napster P2P網路的Peer(Client端),然後連上事先設定的伺服器,接著Napster Client端會將使用者端的相關資料以及分享檔案列表傳送給Server端。
- 2. 搜尋:當你想搜尋檔案時, Napster會將查詢的要求傳送給Server,然後Server會尋找本身資料庫的檔案列表,並將結果傳回去。
- 3. 下載:收到Server的結果後,你可以選擇想下載的檔案,並直接連線至對方(Peer),進行P2P的傳送,而無須透過Server的轉送,一旦檔案傳送完畢時,Server可進行稽核動作。
Gnutella的架構:
- 1. 連線:安裝Gnutella軟體,做為Gnutella P2P網路的Peer端(既是Server也是Client),並沒有任何事先設定的伺服器來做連結,因此Gnutella對網路可以說是一無所知,所以Gnutella需要知道至少一台Peer的IP位址和Port,以做為第一個連線(起始點),接下來有三件事會發生:你宣布你的存在、他會告知其他Peer,以及每個Peer回訊息給你,之後Gnutella就會和其他Peer交換資訊,以瞭解整個Gnutella P2P網路。
- 2. 搜尋:當你想搜尋檔案時,Gnutella會將查詢要求傳送給有直接與你連線的Peers,而這些Peers會繼續將你的要求傳送給有直接與其他使用者連線的Peers,然後反覆下去。在這散佈過程的每一台Peer也都會尋找本身的檔案列表,並將結果傳回去,假如找不到符合結果,那麼就無須回報。
- 3. 下載:陸續收到Peers的結果後,你可以選擇想下載的檔案,並直接連線至對方(Peer),進行P2P的傳送,不用再透過網路上其他的Peers介入。假如連線失敗,則很有可能是對方有設防火牆,這時Gnutella會重新發送一個下載要求(Push下載),並以Step 2的方式散佈這項要求,對方(擁有你想下載的檔案)會嘗試從他那邊直接連線回來,然後進行P2P傳送。
總觀之前對MP3檔案共享技術的探討,我們以(圖三)做為共享示意圖,並製作出包括MP3檔案的共享技術、傳統主從式架構及一般搜尋引擎的比較表(表一),做一個整體性的歸納。在(圖三)中,我們假設第三者作為平台提供者的C點,資料需求者為A點,資料供應者為B點。在(表一)中,淺綠色的部分代表著國內MP3檔案共享平台Kuro所採取的類似搜尋引擎及Napster將資料搜尋的做法,並集中由特定索引伺服器來處理。淺藍色的部分標示出EZPeer及Kuro採用真正P2P的作法,並將實際的資料傳輸轉嫁給使用者自行處理。
表一 MP3檔案共享技術、傳統主從架構及一般搜尋引擎的比較圖
|
一般網站 |
一般搜尋引擎 |
Napster |
Gnutella |
索引存放點 |
C點(網站) |
C點(搜尋引擎) |
C點(Napster) |
每個peer |
資料存放點 |
C點 |
B點 |
B點 |
B點 |
C1用途 |
網頁存取 |
網頁搜尋 |
檔案搜尋 |
檔案搜尋 |
C2用途 |
不存在 |
事先快取 |
事先快取 |
檔案搜尋 |
|
|
(存入索引伺服器) |
(存入索引伺服器) |
|
C3用途 |
不存在 |
網頁存取 |
檔案傳輸 |
檔案傳輸 |
A/B點身份 |
不清楚 |
不清楚 |
略知 |
略知 |
|
(僅知IP) |
(僅知IP) |
(知IP及帳號) |
(知IP及帳號) |
發佈即時性 |
快速 |
普通 |
快速 |
快速 |
|
|
(多半要等C點去掃) |
(B點主動告知) |
(B點主動告知) |
(資源如何發佈) |
(C點=B點) |
|
|
|
搜尋即時性 |
即時 |
事先快取 |
事先快取 |
即時 |
|
|
(資料可能已過期) |
(資料可能已過期) |
(搜尋B點) |
(資源如何發現) |
(C點=B點) |
|
|
|
主要資料類型 |
網頁文件 |
網頁文件 |
MP3音樂 |
MP3音樂/多媒體 |
P2P軟體與技術的應用熱潮
再怎麼樣響亮的專有名詞,若沒有發展出殺手級的應用,也只能說叫好不叫座,不過從這幾年P2P在諸多領域蓬勃發展的情勢來看,軟體界大老已紛紛開始提出結合P2P觀念的完整Web Services解決方案,例如微軟的HailStorm/.Net平台、Sun的JXTA/Sun One架構及IBM的Encina/WebSphere,所以P2P除了在檔案分享上出盡鋒頭外,在其他領域亦都有許多的表現。以下將介紹一些P2P應用的領域:
電玩與訊息網路
- 1. CenterSpan(www.centerspan.com)專注在P2P聲音文字訊息的傳送,適合在多人電玩環境的應用。
- 2. Jabber(www.jabber.com)是使用XML提供的P2P即時訊息系統,能夠更有效整合ICQ、AOL及MSN等即時訊息軟體。
分散計算
- 1. Applied MetaComputing(www.appliedmeta.com)的產品Legion提供企業做跨平台的P2P資源管理工具及P2P知識管理應用軟體,讓網路內的資源,緊密的整合,且在網路安全、功能及彈性上都有兼顧。
- 2. Datasynapse(www.datasynapse.com)提供財務公司P2P的網路,最終的目標是全球性的財務網路。
- 3. Entropia(www.entropia.com)致力在計算能力分享的軟體設計,結合上萬台電腦的空閒時刻,進行分散式計算,免費協助解決一些人類的共同問題,例如搶救愛滋病患者、藥物搜尋與運算、醫學影像處理等等。當然,該公司會利用某些百分比的計算能力發展成營利用途。
管理與合作
- 1. 惠普(Hewlett-Packard)計畫將推行已一年多的e-speak產品提供P2P上的應用。
- 2. 由Lotus Note創始人Ray Ozzie所創辦的Groove Networks(www.groove.net)投入開發採購、批發、貨品管理及客服等應用軟體。
- 3. 英代爾(Intel)也著眼於企業級的P2P應用軟體,並成立了一個Peer-to-Peer Working Group。
- 4. NextPage(www.nextpage.com)讓企業內部的檔案伺服器能以P2P的模式工作。
- 5. Quiq(www.quiq.com)鎖定在的前一千大企業(Fortune 1000)並提供虛擬P2P的社群環境。
Peers代理人與分散式搜尋引擎
- 從西門子出來的WebV2(www.webv2.com)著眼於提供企業的Supply chain,提供P2P的應用軟體讓不同廠商之間溝通和搜尋資料。
超級分散式
- 1. vTrails(www.vtrails.com)發展出Full Duplex Packet Cascading (FDPC),可以有效地減少網站面臨壅塞流量。FDPC將陸續連線進來的使用者,先取一部份做第一層(tier),剩下的使用者將繼續分成許多層(tiers)。上一層使用者所下載的資料,會直接變成下一層使用者下載資料的來源,端看最小hop數目以及是否在同一地理區域,以此類推。換句話說,FDPC將網站壅塞點,分散至一連串的使用者層(tiers)之間作為P2P的下載,而在每一台vTrails伺服器,會記錄地理位置圖,以瞭解其使用者的位置及IP位址。
- 2. 2AM也有類似的技術,即StreamingPeer。
P2P之新社群經驗與開放價值
儘管過去的主從架構亦能提供使用者之間互動的平台,但仍不敷使用。筆者認為P2P除了能讓使用者之間能做更直接密切的溝通之外,P2P的社群經驗是與Open Source開放源碼運動契合的,所推動的「開放價值」精神更是一致。
P2P的使用者一直很強調分享,包括:
- 1. 資料與資訊的分享(MP3、影片、文件)。
- 2. 知識的分享(群組合作、即時訊息以及視訊會議)。
- 3. IT設備的分享(CPU時間、記憶體以及儲存空間)。
因為分享而獲得更多,因為開放而擁有更多,以至於筆者歸納P2P與Open Source兩者間具有的三個開放價值:
開拓思維與眼界(Open your mind and vision)
敞開心胸與他人分享,你會訝異到別人的獨到見解,並得以豐富自己的思維與心靈,而另一方面透過無國界密切地分享交流,可以讓自己增進眼界,進而培養自身的判斷力與領悟性。
避免再製與閒置(Avoid re-invent and idle)
程式設計師可以有效地透過分享原始碼來持續激發創意,延續軟體的生命;系統管理者以及一般使用者亦可透過分享來提升資源利用率,同時我們也可避免同樣的事物再製兩次。ESR說我們應該認為別人的時間是很寶貴,同樣的問題不應該花時間解決兩次。
團體合作(Teamwork)
切勿劃地自限,唯有共同合作才會有更大的競爭力,並能教學相長地學到更多東西。Linux之父Linus Torvalds曾說過一句有意思的話:「只有糊塗的人用磁帶機來備份資料,明眼人會直接上傳他重要的東西,然後讓全世界來拷貝。」您覺得呢?
P2P的未來發展與衝擊
P2P接下來會怎麼走?
細看P2P的網路架構,其實就是將點對點(Point-to-Point)的層次,從主從式架構(Client-and-Server)連結進一步成為Peer之間的連結。然而,觀念雖然簡單,戲法人人會變,但巧妙卻是各有不同。筆者認為P2P在接下來幾年,會在使用者族群繼續蓬勃發展,因為畢竟Peer的概念是比較貼近用戶端,而另一方面企業用戶則會因為Peer觀念,從而發展出更符合他們需求的完整解決方案,像Web Services即是一例。
在一般使用者的角度中,他們所關心的是P2P的分享(sharing)能力,整個設計理念應該是這個P2P軟體能分享什麼(what)以及如何分享(how),也就是說設計的P2P軟體要夠「好用」,而不只是一個不好玩,60分及格的玩具。接著筆者以功能導向的思考方式,來探討使用者所關心的議題。
- 1. 全面性(All-in-one):在使用者端不應僅強調效能而忽略功能的多樣化,使用者要的是多機一體。
- 2. 延展性(Scalability):網路架構能提供怎麼樣的存取速度?是否能很快的找到所想要的資源?是否能能負荷多人口的社群?
- 3. 商業模式(Commercial business models):如何在開放平台計費而又不會令使用者感到討厭、甚至是察覺?因為一般人都不喜歡付費的感覺…。
- 4. 互通性(Interoperability):異質的P2P軟體間是否有共通標準(standards)?異質P2P的社群又如何做到資源共享?
- 5. 友善性(Interface I/O):簡單容易的使用者介面,而非繁瑣的專有名詞及凌亂的操作。
- 6. 安全面(Security/Trust):金錢交易的安全性,以及資訊分享的正確性。
- 7. 法律面:P2P網路強化了使用者與使用者之間的互通能力,但同時也容易涉及法律問題。一般而言,很難去正面地約束使用者行為。
後P2P時代?
現在IT硬體產業所處的是後PC時代,並面臨硬體產業將轉變成純製造業的時代,這是一個邁入微利的時代,也是市場版圖會出現大者恆大的時代。而軟體產業亦處於後Open Source時代的來臨,筆者認為改變最多的是軟體技術發展模式,由於現成軟體工具及套件原始碼更容易取得,傳統PC硬體產業的所謂「公版」開發模式亦會發生在眾多軟體開發廠商的身上。因此廠商的競爭力不再僅僅是比功能或比規格,而是在比「效能」和比「加值」上面。
在後PC與後Open Source的夾擊下,這也正是後P2P時代所處的局面,如何利用最小的資源帶來最大的利益,這將會成為後P2P時代的核心價值。
結論
從Napster的星星之火到今天琳瑯滿目的P2P軟體,我們可以發現到分享的東西並不侷限在MP3的音樂檔案裡。P2P的觀念與開放源碼是不謀而合,其開放價值能開拓全人類的思維與眼界,為了讓我們避免再置與閒置,我們透過團體合作來達到更大的目標與理想。筆者始終相信,開放的意義在於合作而非免費,所以越來越多的P2P使用者已開始如火如荼式地分享資源,並有越來越多的廠商積極地在整合資源,就讓我們拭目以待後P2P的時代吧!
(作者現為台灣大學電機研究所博士班學生:http://www.nctu.idv.tw)