來源:微信公眾號CodeL 以下是個人學習之路的簡單分享,不足之處歡迎大神們批評指正! 在網站開發的初期,我們沒有考慮更多的東西,也沒有對緩存進行系統的設計,而是直接使用了應用程式緩存對象Cache,但由於系統架構的不斷完善,在分散式系統架構中只依靠Cache明顯不夠,無法實現分散式管理,所以後期我
來源:微信公眾號CodeL
以下是個人學習之路的簡單分享,不足之處歡迎大神們批評指正!
在網站開發的初期,我們沒有考慮更多的東西,也沒有對緩存進行系統的設計,而是直接使用了應用程式緩存對象Cache,但由於系統架構的不斷完善,在分散式系統架構中只依靠Cache明顯不夠,無法實現分散式管理,所以後期我們採用了Memcached高性能分散式記憶體緩存伺服器。
一、應用程式緩存對象Cache
一開始,我們只處理了數據的緩存,緩存和應用程式在一臺伺服器:
應用程式先去讀緩存,若沒有數據則去讀資料庫,然後存入緩存,若有數據則無需再讀庫,對於Web網站來說,Cache的確可以使性能得到很大提高,在開始的短期時間內,我們也一直使用著Cache,但由於架構的演進,漸漸的出現了一系列的問題:
1. 緩存訪問範圍只能是當前應用程式池,對於分散式Web站點無法實現緩存的統一管理,往往只能在A站添加一份,B站也添加一份,無法共用緩存資源,這樣非常不合理,同時也非常浪費資源。
2. 緩存和應用程式無法分離,無法分散式部署,IIS吃記憶體已經是非常厲害了,常常導致緩存溢出,且每次更新程式都會導致緩存丟失。
3.緩存管理難度加大,需要對每個站點進行單獨的管理。綜上,後期由於網站的訪問量增加,為解決伺服器資源等各方面性能問題,我們不得不將緩存和Web伺服器獨立開來分開管理,於是我們採用了Memcached分散式緩存。
二、Memcached高性能分散式緩存
使用Memcached緩存之後,我們並沒有拋棄應用程式Cache,而是用它來做動態頁面輸出緩存:
使用Memcached後的緩存設計:
【 IIS伺服器 or 其他代理伺服器】(記憶體) :動態頁面緩存
【MemCached】(記憶體):數據緩存
【瀏覽器緩存】(硬碟):動態/靜態頁面緩存,靜態文件(圖片,js,css)
我們通過Memcached實現了緩存的分散式管理,同樣我們只對資料庫數據進行緩存處理,對於閑下來的Cache我們用它做了少量的動態頁面輸出緩存:
【斷絕發送請求至伺服器】的過程 :
1.OutputCache :類型Any——頁面被緩存在瀏覽器、代理伺服器端和web伺服器端
2.http標頭Cache-Control :處理點擊“轉到”或者游標移入地址欄然後回車,不發送請求至伺服器
3.http標頭Last-Modified:用來處理F5刷新的,也就是對Last-Modified有效,需要請求伺服器判斷是否載入新的內容
緩存用於在動態應用中減少資料庫負載,更好的分配資源,提升訪問速度。是開發中必須學習的技術,這裡給大家簡單介紹了我在開發中使用緩存的一些經歷,對於Web性能優化方面,我們除了優化緩存設計之外,也需要儘量減少對伺服器的http請求,包括之前提到的延遲載入,動態合併js/css文件等方法,希望對初學者有所幫助。
以上是個人學習之路的簡單分享,不足之處歡迎大神們指正!
技術類公眾號推薦:CodeL