大型互聯網公司提升速度採用的內容cache都是怎麼實現的?

需要哪些互聯網的技術和協議?作為一個完全外行,希望聽一聽這方面入門的知識。謝謝。

可以從邏輯,或者協議,或者硬體/演算法實現來談談。


謝邀。緩存優化涉及很多方面,說起來很廣。我用簡單的新聞網站來舉例子。

對於關係型資料庫,在大多數情況下,查詢速度取決於數據量的大小,越大的一個數據表查起來越慢。因此可以用Memcache或Redis把熱點數據先緩存在內存,減少資料庫查詢提升訪問速度。

新聞網站的新聞內容頁、首頁靜態生成HTML,在有更新的時候才刷新HTML即可。新聞內容頁面用ajax載入評論,讓內容頁本身不需要因為更新評論而更新整個頁面。

新聞列表頁也做成靜態的,列表以及翻頁也使用ajax載入,讓大多數壓力交給CDN。接下來會說到。

既然是靜態頁面,就可以喊CDN大法好了。全國(土豪可以全球)各地布節點,通過DNS調度訪客到最近的節點,CDN節點使用squid、ats等程序把靜態頁面緩存在內存、硬碟中,訪客速度加快,後端伺服器壓力也小了。

盡量讓前後端分離,前端能交給CDN的全交給CDN不要讓請求到後端,後端伺服器在訪問里只管生成動態內容的json交給前端去展示,至於後端怎麼緩存怎麼優化要看具體情況來定。

js/css等請求需要帶上緩存頭讓訪客的瀏覽器緩存住而不是去查詢是否有更新。

考慮到搜索引擎無法收錄ajax載入內容的話,可以針對搜索引擎單獨展示一版只有內容極少帶UI的,訪客點擊後跳入正常頁面,參考Discuz的做法。

能想到的暫時就這些。


拿內存當硬碟用,拿硬碟當磁帶用。


用手機回答 比較簡陋 。

首先定義原因:這個cache和cpu上面的快取存儲是一個原因 IO不足。 網路緩存的主要原因是帶寬IO的大小和存量不足。為了加快訪問速度,降低訪問成本(帶寬大小 還是流量都是稀缺資源)

HTTP伺服器和緩存是分成好多級別的:

從存儲位置分:

1.伺服器本地:分成兩個技術類別:靜態化頁面緩存和熱點訪問緩存。

熱點緩存:主要使用memcached 集群 facebook使用就是。或者是redis集群 其它幾乎都是kv內存資料庫。 伺服器前端主要使用nigix或者apache進行適當配置。

靜態化頁面:主要用於熱點訪問頁面 降低數據實時生成消耗資源。php+apache nginx自帶 不過需要優化配置 有效調優。

2.中間傳輸過程:

網路設備支持緩存 這個的詳細如何支持 請看http協議標準 以及具體cdn 網路設備的硬體實現

講一下具體實現方式:cdn和代理兩種

3.本地緩存 這個是資源復用。具體的分成兩種:1.ajax類型頁面支持 2.本地瀏覽器或者客戶端為了加快訪問自己實現的具體可以看google chrome瀏覽器緩存和加快訪問的技術 這部分也可以google。

硬體,語言和協議基礎(統稱技術):

1.http協議支持緩存

2.網路傳輸設備支持 路由器 代理等等

3.伺服器和客戶端設備支持

4 apache nginx 微軟伺服器 Google伺服器軟體支持

5.只要完整支持http協議的計算機語言都支持。

答案比較簡陋:晚上回去再編輯一下 加上圖和具體的詳細的第三方好的介紹這部分內容的blog和論文。


反向代理,squid。

另外,另一篇答案中提到的UGC系統主要是指動態內容系統,社區,論壇之類,應該不太貼切本題


不請自來

我理解你這裡的內容是比較寬泛的 包括html code, js ,static content etc。除去各個開發框架自帶的內部cache layer。還有各種application server web server自帶的cache機制暫且不表。經常看到的可能還有

varnish:此貨是個存cache server 完全內存cache 位於web server前面 可以放在load balancer前面或者後面。你可以把它看做網站發給你的數據必經的通道。所以可以設置規則來決定cache那種類型的內容。規則調的好的話 hit rate會很高。

memcached redis:我經常用來cache一些需要跨request處理的數據結構。

local db:各種資料庫。這個一般用在我的服務需要向其他服務請求數據 來滿足用戶request的時候。比如我做的CI系統會去cache所有build server的歷史數據。以為需要這些數據永久保存 所以內存資料庫就不合適了

static file:不要小看這個。靈活性很高。可以自己控制結構。不需要考慮分散式部署。不存在server down。只要準備一個ssd掛載上來。我曾經用這種方式保存一個超過百萬行的數據。當然是分布在多個小文件裡面。還是那句話 足夠靈活 你可以用自己的方式組織


緩存通常分為兩種:持久化緩存、非持久化緩存。前者比後者的性能略差一些。非持久化用的最多的是memcache,持久的比如ttserver和redis,當然持久的為了提高性能也是先將內容存到內存中,然後定時flush到磁碟中,所以會有一定的幾率丟失。

大型互聯網公司通常的網站架構都是緩存+資料庫,最早採用oracle,技術成熟,並且有完備售後和數據恢復方案,缺點是價格昂貴,隨著數據的暴漲,單庫已經難已解決存儲問題,這時分庫分表開始流行,像阿里自發研究的tddl,資料庫採用開源的mysql,以極地的價格解決數據存儲問題,淘寶自創建以來,創建的訂單都是存在4096張表裡。所有的數據讀取並不是直接db,畢竟幾十萬的qps,什麼庫也經不起這麼折騰,上層是自發研究的tair緩存,讀取速度1ms,採用分散式集群形式,理論上可以支撐幾千萬的qps,有專門的團隊維護。

對於圖片、靜態頁面、js css等通常是放到cdn節點上,根據dns用戶可以從最近的節點上拉取。


大家都講了不少,這裡來談談基礎設施-網路硬體及所使用的操作系統,就直接上圖不多廢話:


推薦閱讀:

如何評價小米和谷歌聯手發布的小米A1手機?
如果 Google 還在中國,能處理好醫療廣告的問題嗎?
網路上流傳的「黑微軟,捧 Google 」這種風氣是怎麼形成的?
為什麼 Google、Baidu 的表單提交都是 GET 方式的?
如何看待 Google 曝光的新 OS Fuchsia?

TAG:Facebook | 互聯網 | 谷歌Google | 互聯網公司 |