網(wǎng)站性能優(yōu)化緩存優(yōu)化
分布式緩存
回顧網(wǎng)站架構(gòu)演化歷程,當網(wǎng)站遇到性能瓶頸時,第一個想到的解決方案就是使用緩存。在整個網(wǎng)站應用中,緩存幾乎無所不在,既存在于瀏覽器,也存在于應用服務器和數(shù)據(jù)庫服務器;既可以對數(shù)據(jù)緩存,也可以對文件緩存,還可以對頁面片段緩存。合理使用緩存,對網(wǎng)站性能優(yōu)化意義重大。
網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能。
緩存的基本原理
緩存指將數(shù)據(jù)存儲在相對較高訪問速度的存儲介質(zhì)中,以供系統(tǒng)處理。一方面緩存訪問速度快,可以減少數(shù)據(jù)訪問的時間,另一方面如果緩存的數(shù)據(jù)是經(jīng)過計算處理得到的,那么被緩存的數(shù)據(jù)無需重復計算即可直接使用,因此緩存還起到減少計算時間的作用。
網(wǎng)站數(shù)據(jù)訪問通常遵循二八定律,即80%的訪問落在20%的數(shù)據(jù)上,因此利用Hash表和內(nèi)存的高速訪問特性,將這20%的數(shù)據(jù)緩存起來,可很好地改善系統(tǒng)性能,提高數(shù)據(jù)讀取速度,降低存儲訪問壓力。
合理使用緩存
使用緩存對提高系統(tǒng)性能有很多好處,但是不合理使用緩存非怛不能提高系統(tǒng)的性能,還會成為系統(tǒng)的累贅,甚至風險。實踐中,緩存濫用的情景屢見不鮮——過分依賴低可用的緩存系統(tǒng)、不恰當?shù)厥褂镁彺娴臄?shù)據(jù)訪問特性等。
頻繁修改的數(shù)據(jù)
如采緩存中保存的是頻繁修改的數(shù)據(jù),就會出現(xiàn)數(shù)據(jù)寫入緩存后,應用還來+及讀取緩存,數(shù)據(jù)就已失效的情形,徒增系統(tǒng)負擔。一般說來,數(shù)據(jù)的讀寫比在2:1以上,即寫入一次緩存,在數(shù)據(jù)更新前至少讀取兩次,緩存才有意義。實踐中,這個讀寫比通常非常高,比如新浪微博的熱門微博,緩存以后可能會被讀取數(shù)百萬次。
沒有熱點的訪問
緩存使用內(nèi)存作為存儲,內(nèi)存資源寶貴而冇限,不可能將所有數(shù)據(jù)都緩存起來,只能將最新訪問的數(shù)據(jù)緩存起來,而將歷史數(shù)據(jù)淸理出緩存。如果應用系統(tǒng)訪問數(shù)據(jù)沒有熱點,不遵循二八定律,即大部分數(shù)據(jù)訪問并沒有集中在小部分數(shù)據(jù)上,那么緩存就沒有意義,因為大部分數(shù)據(jù)還沒有被再次訪問就已經(jīng)被擠出緩存了。
數(shù)據(jù)不一致與臟讀
一般會對緩存的數(shù)據(jù)設(shè)S失效時間,一□超過失效時間,就要從數(shù)據(jù)庫中重新加載。因此應用要容忍一定時間的數(shù)據(jù)不一致,如賣家已經(jīng)編輯了商品厲性,但是需要過一段時間才能被買家吞到。在互聯(lián)網(wǎng)應用中,這種延遲通常是可以接受的,但是具體應用仍需憤重對待。還有一種策略娃數(shù)據(jù)更新時立即更新緩存,不過這也會帶來更多系統(tǒng)開銷和單務一致性的問題。
緩存可用性
緩存是為提高數(shù)據(jù)讀取性能的,緩存數(shù)據(jù)丟失或者緩存不可用不會影響到應用程序的處理——它可以從數(shù)據(jù)庫貞接獲取數(shù)據(jù)。但是隨著業(yè)務的發(fā)展,緩存會承擔大部分數(shù)
大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析
據(jù)訪問的壓力,數(shù)據(jù)庫已經(jīng)習慣了有緩存的日子,所以當緩存服務崩潰時,數(shù)據(jù)庫會因為完全不能承受如此大的壓力而宕機,進而導致整個網(wǎng)站不可用。這種情況被稱作緩存雪崩,發(fā)生這種故障,甚至不能簡單地重啟緩存服務器和數(shù)據(jù)庫服務器來恢復網(wǎng)站訪問。
實踐中,有的網(wǎng)站通過緩存熱備等手段提高緩存可用性:當某臺緩存服務器宕機時,將緩存訪問切換到熱備服務器上。但是這種設(shè)計顯然有違緩存的初衷,緩存根本就不應該被當做一個可靠的數(shù)據(jù)源來使用。
通過分布式緩存服務器集群,將緩存數(shù)據(jù)分布到集群多臺服務器上可在一定程度上改善緩存的可用性。當一臺緩存服務器宕機的時候,只有部分緩存數(shù)據(jù)丟失,重新從數(shù)據(jù)庫加載這部分數(shù)據(jù)不會對數(shù)據(jù)庫產(chǎn)生很大影響。