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