P2P技術(shù),在分享大文件(你懂的)是現在必不可缺的技術(shù),現在的人,已經(jīng)很難想象在沒(méi)有這玩意的互聯(lián)網(wǎng)早期,人們是怎樣的艱難求生。想當年,不要說(shuō)電影,下一個(gè)稍大點(diǎn)的文件,都是很吃力的事情。
后來(lái)牛人科恩,發(fā)明了P2P技術(shù),見(jiàn)這里【科技英雄傳】BitTorrent技術(shù)之父:科恩
P2P技術(shù)發(fā)明后,其互聯(lián)網(wǎng)帶寬占到了7成以上,可見(jiàn)此技術(shù)的威力,網(wǎng)絡(luò )有多快,分享就有多快,速度不在受到終端或服務(wù)器限制,而是受到網(wǎng)絡(luò ),也就是道路的限制。真正回歸到網(wǎng)絡(luò )的本質(zhì)。
作為程序員,我們經(jīng)常為一個(gè)問(wèn)題苦惱,就是性能,怎么讓服務(wù)器支撐更多的人,更多的訪(fǎng)問(wèn)流量?這是一個(gè)大問(wèn)題。
我們看看傳統的解決方案,不斷的提高服務(wù)器的并發(fā),使用服務(wù)器緩存,使用大數據,使用分布式數據庫,使用CDN,加CPU,加內存,加帶寬,限制用戶(hù)數,等等等等。這些手段,都是治標不治本,中心或分中心模式,不管怎么做,最終都有問(wèn)題,這也不是網(wǎng)絡(luò )模式。這就和買(mǎi)票一樣,都跑一個(gè)地方買(mǎi),再快的搶票軟件也一樣沒(méi)用。
那么,有沒(méi)有可能,象P2P一樣,把網(wǎng)頁(yè)也給P2P了呢?從原理來(lái)看,其實(shí)是可行的。
原理是這樣的,比如我訪(fǎng)問(wèn)這個(gè)頁(yè)面,那么數據已經(jīng)在我瀏覽器里了,但是,我瀏覽器里的內容可以分享啊,通過(guò)P2P技術(shù),其它用戶(hù)相互間分享同一時(shí)間的同一頁(yè)面內容,和P2P原理一樣,同一頁(yè)面訪(fǎng)問(wèn)的人越多,那么速度反而越快。
如果有人能搞出頁(yè)面P2P技術(shù),那么世界將再次被改變,任何頁(yè)面,都可以支撐全球所有的訪(fǎng)問(wèn)量。從此網(wǎng)站再也不怕大用戶(hù),用戶(hù)越多,網(wǎng)站越快,剛好和現在的模式相反,我們再也不需要優(yōu)化網(wǎng)站了。
但是這種一籃子的解決方案,可不可行呢?有沒(méi)有人能搞出來(lái)呢?從原理來(lái)看是可行的,但實(shí)際上很困難。原因是很多頁(yè)面不僅僅只是靜態(tài)內容,而且頁(yè)面很復雜,文本,數據,圖片,甚至視頻。
但是部分的解決方案還是有的,比如云服務(wù),把圖片,視頻等放在第三方,CDN服務(wù),把一些公用代碼放第三方,還有網(wǎng)頁(yè)加速服務(wù),比如什么數字的風(fēng)行計劃,給網(wǎng)站緩存加速。
當然了,上述這些解決方案,都是很費事又費錢(qián)的東西,最好就是瀏覽器支持本身支持網(wǎng)頁(yè)P2P,但這個(gè)技術(shù)看上去,這幾年都不用指望了,作為創(chuàng )業(yè)者或中小企業(yè)網(wǎng)站,有沒(méi)有成本更低廉的辦法,解決性能問(wèn)題?
這就可以使用一些Html5的先進(jìn)技術(shù)了,Html支持本地存儲,和本地緩存,但對于動(dòng)態(tài)加載的頁(yè)面可能還需要自已進(jìn)一步編碼,如果我們把樣式表,代碼,通用數據,圖片,在第一次加載后,再用腳本方式存在本地數據庫,當然這得需要一個(gè)版本管理技術(shù)。
這樣的話(huà),除了第一次慢點(diǎn),以后因為有大量?jì)热荼痪彺娴搅吮镜?,那么Web應用就有點(diǎn)類(lèi)似傳統的C/S應用了。服務(wù)器端的壓力被大大減輕。
但是,用戶(hù)多了服務(wù)器還是一樣有性能問(wèn)題,能不能在A(yíng)客戶(hù)緩存了本地數據以后,B客戶(hù)訪(fǎng)問(wèn)網(wǎng)站時(shí),直接把A客戶(hù),導向B客戶(hù),讓A客戶(hù)取得B客戶(hù)的緩存數據呢?
答案是可以的,但不是現在,W3C正在開(kāi)發(fā)P2P瀏覽器標準,讓你的瀏覽器和他的瀏覽器實(shí)時(shí)通信,不需要經(jīng)過(guò)服務(wù)器,可見(jiàn)此技術(shù),在將來(lái)是可行的,但現在沒(méi)有足夠的支撐。
由此可見(jiàn),現在如果利用Html5技術(shù),解決如下幾個(gè)問(wèn)題:
一是本地存儲的版本問(wèn)題,這樣服務(wù)器更新后,就從服務(wù)器上取新數據,如果沒(méi)有更新就讀取本地緩存。
二是本地存儲的讀取寫(xiě)入,以及路徑問(wèn)題,這需要有一種機制,讓?xiě)貌恍枰軘祿膩?lái)源是本地還是服務(wù)器,把資源路由交給一個(gè)統一機制,由它去判斷
版本問(wèn)題有比較現成的解決思路,比如時(shí)間過(guò)期,或者是版本號,加個(gè)二維碼什么的。資源路由就不太清楚,這需要進(jìn)一步的摸索。但是,優(yōu)先考慮Html5的本地存儲及緩存技術(shù),應該是一個(gè)低成本解決性能問(wèn)題的方案。而這種方案,還可以為將來(lái)到來(lái)的瀏覽器P2P做準備。
聯(lián)系客服