前幾天突發奇想,在 Twitter 上問了這麼一句:

Wonder if there's any p2p-based web caching proxy implementation.

直接 google 「p2p-based web caching proxy implementation」這個字串的話,找到的都是論文,這一點讓我很感興趣。

而後 gslin 立刻點出也許 CoralCDN 是一種。後來想想十分正確。CoralCDN 骨子裡確實是以 P2P 的方式散佈檔案(雖然僅為伺服器之間的 p2p),並且在各節點都有 content cache。於是我花了 30 分鐘寫了一個小 proxy。程式碼如後:

需安裝 CPAN 的 HTTP::Proxy 模組。執行後的 proxy 網址是本機 3128 port,也就是 http://localhost:3128/。

正如 gslin 指出的, p2p 傳檔案本來就不會比較快,不過我自已試用了兩天,發現了以下的特點:

  • 瀏覽本來就慢的(比如大陸網站)網站的加速效果很明顯
  • 對於本來就很快的網站等於是自殘
  • google 的網站,如 youtube,原本就有偵測地區並導到比較快的伺服器上。在使用 coralized proxy 的狀況之下,常常被導到日本去。
  • 其他有自動偵測地區的網站,如 cpan.org,也一樣等於無效。
  • 有些網站的登入狀態會綁來源 IP 位址 ,此時會發現自已在看頁面時一下是登入狀態、一下不是。

後兩點的症頭基本上跟用 Tor 當 proxy 伺服器完全相同。這其實也可以預期,因為另一終端的節點,也就是實際連到目標網站的節點,時常變化的關系。但我認為有以下的不同之處:

  • Tor 會刻意將連線匿名化。因此會故意切換終端以及中介的節點。這一點可以用 Tor 的 GUI 程式觀察連線狀態而略知一二。
  • 相較之下,CoralCDN 多半會優先找到有資料、比較近的節點。因此用了一陣子之後,可以感受到反應時間變快了。

也就是說,雖然都是 p2p 架構,但 Tor 的優化方向是將連線「匿名化」,而 CoralCDN 則是優先找到已經有資料的節點。因此後者的償還效果會逐漸變好,會愈用愈順。

不過這樣的 proxy 實際上倒底有什麼用效益呢,其實並不明顯。除了這個架構免費、差不多是等於 open proxy、速度也還可以接受之外,目前想不到什麼實際的好處。