背景
畢業季到了,女友跟班裏同窗們一塊兒拍了不少照片。因爲照片分散在不一樣的人的手機、相機裏,她也沒法當即給我傳來她的照片。這個情景一年前我也遇到過,只是當時本身比較忙,加上考慮着還會在本校讀研,也沒太在乎畢業季照片的手機這一需求,以致於到如今個人電腦裏甚至沒有一張我穿學士服的照片:-=。而如今,當我想看看 gf 的照片時,這個需求橫亙在我面前,讓我特別的想解決掉它。html
讓咱們從事實出發,理清問題的思路。git
需求的產生
大學生拍畢業季照的現狀:github
- 1.大學生在畢業季拍照留念是剛需,幾乎平日愛拍照、不愛拍照的全部人都會參與其中。
- 2.拍照通常以小團體爲基本單元進行。可能是班級、社團這種常見的凝聚力較強的團體。
- 3.隨着科技的發展和生活水平的提升,愈來愈多的人具有了拍出高質量照片的設備和實力。
因爲這種以小團體爲單位的照片的大量產生,每一個團體中的照片會交叉散落在較多人手中。在這種分散的格局面前,單獨挑選出本身的照片並保存的成本巨大,直接致使了你們最終需求的統一:服務器
- 將全部的照片分發到全部人手中。
原有解決方案
現有的解決方案主要方案概括爲以下四種:架構
-
1.用移動硬盤等設備人力拷貝分佈式
這種方式太過古老和原始,缺點費時費力。ide
-
2.使用公郵、網盤、QQ 羣共享等方式統一上傳、下載工具
主要缺點是外網網速限制;另外,網速的限制讓用戶上傳和下載的門檻變高,影響了上傳積極性,若是有人遲遲不上傳,最終下載完整數據的時間也會一直拖延,帶來消極的體驗;若是註冊一次性帳號,這也不見得是環保的行爲(或許這想法有點數據潔癖吧><),若是使用非一次性帳號,那麼權限管理將比較頭疼。post
-
3.使用內網 BT 資源站分別打包上傳、下載idea
優勢是利用了內網網速的優點。缺點是每一個人都打包作種,會讓資源分散的很厲害,難於聚集。且作種等步驟對於部分用戶而言,有操做門檻。
-
4.先使用 1 中方法,統一手機照片數據,而後按照 2 或 3 的方法發佈數據
這大概是最靠譜的方式了,缺點集中在須要有人費時費力的手機數據上。固然,若是班裏有一個不辭辛苦的好班長,這個問題就解決了。
總結:
對於一個懶人而言,現有的解決方案都是蹩腳的。這些解決方案都不約而同的但願首先將數據聚合到一個外部空間中,而後再統一的分發給你們。這個步驟必要嗎?實際上,咱們只是須要每一個人都方便、快捷的得到全部照片。
一個簡單的設計
我將問題抽象爲:
- 完整的數據分散在 10 至 20 個數據擁有者手中,須要經過必定手段,讓每一個個體都不重複的擁有完整的數據。
因爲外網網速的限制,基於校園內網創建的工具就有了自然的優點。但若是使用內網,就不得不拋棄各大公司免費提供的郵箱存儲空間、網盤存儲空間。而校內的資源是有限的,沒有本身的服務器,沒有足夠的空間存儲你們的數據,這也就迫使咱們考慮到了 p2p 的系統架構。因而,有了這樣的解決方案,設定代號爲 BBT:
- PC 機安裝 BBT 工具軟件後,能夠設定
共享目錄
和對應的分享 ID
- 放入特定
共享目錄
的文件,將使用基於 p2p 同步的方式,在擁有相同的分享 ID
的共享目錄
間同步數據,目的是讓全部人都得到到每一個人的數據
在跟阿豪童鞋的交流中,他建議爲了進一步簡化用戶操做,能夠嘗試這樣一種體驗方式:
- 班級內全部人在同一個連接下載工具軟件。保證這一連接下載的軟件能互相通訊,實現數據同步。這楊就節省了用戶本身設定相同的
分享 ID
的流程,而將這一過程轉移到班長請求下載連接的過程當中。
確實夠簡潔,很贊,實現成本還須要調研。
BitTorrent Sync
在構思的過程當中,忽然想起前幾天在 start up news 上看到了一個基於 BT 協議的同步軟件 BitTorrent Sync。
它的實現方式大概是咱們所須要的。惋惜的是,因爲它的功能全面,界面略顯複雜。而同時,它並無開放二次開發接口。
或許我須要本身搭建一個 p2p 的系統?
PS:
BT 的優點,在於利用了全部節點的存儲和傳輸能力,節點數量越多,下載越快
BitTorrent Sync 的優點,則在於能動態的集合分散在不一樣節點中的數據
感受這種去中心化的分佈式系統,前景大大的有啊;)