codename "rho"—實作p2p
終於查出來了,這是由於文庫架設的 CDN 以及防火牆問題。

下圖表示當前 ( 青藍 ) 文庫的網絡架構:

很可惜基於現時的協定 ( 洋紅 ) ,我沒辦法想出有效的補救方案。這次的項目規模比較大,沒辦法就這麼「做」出來。請大家耐心等候。( 我也一樣,有時都會連不上 )

沒辦法之下只好另架一個CDN ( 綠 ) 。

花了一整晚時間做了流程圖 ( 上圖 ) 。實作方面就如我 上一篇文章 所說,我會利用 node.js + mongodb 先編了主服務器的原型。然後可能需要製作 native binary。

還記得 Foxy 麼?那是一個用戶分享平台,只要你將想要分享的檔案丟進下載目錄下,檔案就能被其它 Foxy 用戶搜案和下載了。

這回我打算做一個相似的東西,先以文庫作為起點創作。

接下來的討論一下製作 p2p CDN 需要面對的問題解決辦法1

目標:

1. 設計並實作 CDN ( p2p ) 模型
2. 小巧 — 容易使用 ( utorrent )
3. 相互之間的獨立性 — 減少對伺服器的依頼
4. 安全性 — 確立文章來源的可信度,防止惡意種毒
5. 私穩 — 必須保障用戶的私穩


Q1. 要怎麼保證內容的一致性,防止惡意修改
這個是必須解決的問題;沒有人會喜歡在閱文章的時候,下一個章節的內容會是對某某牙醫診所的推介吧。

我上網找了幾篇關於文檔的簽證及p2p網絡模型的文章胡亂讀了一遍(嘛,老實說我開始擔心自己有沒有能力做就是了)

Q2. 伺服器模組,源碼開源的可能性
大家應該都知道電驢 ( eMule ) 吧,其伺服器程序是閉源的,這好像是基於安全性考慮。因此開源閉源我都得考慮清楚。

更新 ( 14 May 2014 ) :
嗯,我今天想了兩個方案:

方案一:每個客戶端都是一個獨立的組態 ( CL ) ,主伺服器 ( S ) 向文庫取得更新,並分佈給最近的組態。透過 p2p 層面傳遞並發使給使用者 ( C ) 。
可惜文章的一致性問題並沒有解決。


方案二:類近於方案一,加入驗証組態 ( K ) ,用戶分別向 ( K ) 與 ( CL ) 取得加密協定並解密文章。
這麼做確保了文章的可信度,而且主伺服器 ( s ) 的依頼程度亦很低。
問題這需要多個伺服器來做驗証服務,很難在短期內籌集到所需資源。
這是最理想的方案,不過實行的成本太高了。


於是我嘗試為方案一尋找解決方案:

方案一(修訂1)
嘗試引入評分制度:
用戶可以為伺服器打分數,並以伺服器的分數為基準決定使用那一個服務。

這樣用戶每次看到「牙醫診所的推薦」時,可以回報並評分。
用戶亦可以決定多少分數的伺服器會才採用。

當然用戶也可以隨時為伺服器評分。


尚未解決
需要想辦法穩固評分制度的公平性。
設法解決 ( CL ) 與 ( C ) 對 ( S ) 的依頼。


待續。
  1. 某些部分現階段我還沒能想出一個比較好的方案,不過我還是先記下來,待以後再修作改。( 歡迎各位提供意見 )
Profile picture
斟酌 鵬兄
Mon May 12 2014 14:17:38 GMT+0000 (Coordinated Universal Time)
Last modified: Fri Mar 11 2016 14:52:45 GMT+0000 (Coordinated Universal Time)
Comments
No comments here.
Do you even comment?
website: 
Not a valid website
Invalid email format
Please enter your email
*Name: 
Please enter a name
Submit
抱歉,Google Recaptcha 服務被牆掉了,所以不能回覆了