承載高并發(fā)的緩存技術(shù)究竟是什么?
作者 | 金鵬,單位:中國移動智慧家庭運營中心
?Labs 導(dǎo)讀
緩存是指可以進行高速數(shù)據(jù)交換的存儲器,它先于內(nèi)存與CPU交換數(shù)據(jù),因此速率很快。那么緩存的運行邏輯是什么,以及緩存有哪些方案,將是本文的介紹重點。
緩存(Cache)是將目標(biāo)數(shù)據(jù)存儲到一個具備高度可訪問性的高速運行層的技術(shù)。它旨在快速讀取使用率較高的、不經(jīng)常更新的數(shù)據(jù),避免在存取之前的請求重復(fù)訪問源數(shù)據(jù)層,產(chǎn)生額外的I/O資源消耗,繼而提升業(yè)務(wù)的并發(fā)度。為了提升數(shù)據(jù)訪問的運行速率,緩存數(shù)據(jù)也要權(quán)衡資源容量、數(shù)據(jù)刷新頻率設(shè)置過期時間或設(shè)置合理的緩存淘汰策略。主流的緩存方案有CDN緩存、瀏覽器緩存、本地緩存、外部緩存等。
Part 01 CDN緩存
CDN指的是內(nèi)容分發(fā)網(wǎng)絡(luò),將資源緩存在CDN節(jié)點上,依靠部署在各地的邊緣服務(wù)器,通過中心平臺的負載均衡、內(nèi)容分發(fā)、調(diào)度等功能模塊,使用戶就近去CDN緩存節(jié)點上獲取內(nèi)容,降低網(wǎng)絡(luò)延遲,提高訪問速度。運用到此項緩存技術(shù)的業(yè)務(wù)場景有:前端項目中的HTML、CSS、JS等靜態(tài)文件、物聯(lián)網(wǎng)中下載固件包、異地多活架構(gòu)中的資源請求等等。將這些文件部署或緩存在CDN節(jié)點上,提升資源訪問速度的同時又保證資源訪問的穩(wěn)定性。
Part 02 瀏覽器緩存
瀏覽器緩存是指瀏覽器與后端服務(wù)器通過HTTP協(xié)議下的請求-響應(yīng)模式來通信時,第一次向服務(wù)器發(fā)送請求并拿到結(jié)果后,會根據(jù)響應(yīng)報文中的緩存規(guī)則來實現(xiàn)緩存。比如HTTP/1.1協(xié)議下會根據(jù)Cache-Control實現(xiàn)強制緩存規(guī)則;會在強制緩存失效下根據(jù)請求中的緩存標(biāo)識決定緩存規(guī)則。瀏覽器會話持也是一種緩存實現(xiàn),目前主流的技術(shù)方案有Cookie機制、Session機制、Token機制等。
Part 03 本地緩存
本地緩存是指將響應(yīng)數(shù)據(jù)緩存在服務(wù)器的應(yīng)用進程內(nèi)存空間里,減少查詢持久化層的I/O消耗。優(yōu)點是數(shù)據(jù)不需要跨網(wǎng)絡(luò)傳輸,讀取性能更好,支持的QPS更高;缺點是會占用應(yīng)用進程的內(nèi)存空間,故不能進行大數(shù)據(jù)量的數(shù)據(jù)存儲,而且當(dāng)所在的應(yīng)用進程重啟時,本地緩存的數(shù)據(jù)會丟失。在Andlink云平臺項目中落地的本地緩存解決方案Caffeine,它的依賴包如下:
Part 04 外部緩存或分布式緩存
與本地緩存相對應(yīng)的就是外部緩存或分布式緩存,它獨立于應(yīng)用進程部署,并可以設(shè)計成集群模式來保證數(shù)據(jù)讀寫分離、高性能、高可用。Andlink云平臺項目中落地的分布式緩存是基于Spring Boot Cache框架整合Redis集群的方案,該方案可以很好的解決數(shù)據(jù)丟失、業(yè)務(wù)并發(fā)能力、故障恢復(fù)和動態(tài)存儲擴容等常見業(yè)務(wù)痛點。結(jié)合業(yè)務(wù)的需求Redis提供了比較全的應(yīng)對方案,比如單機模式、主從模式、集群模式或哨兵模式,其中哨兵模式可以實現(xiàn)健康檢測和自動恢復(fù),是保障高并發(fā)業(yè)務(wù)穩(wěn)定運作的首選模式。方案的依賴包如下:
當(dāng)然,主流的緩存技術(shù)方案有很多,但總的方向是為了減少底層性能開銷、提高業(yè)務(wù)的高并發(fā)能力。目前Andlink云平臺支撐著億級的用戶量和千萬級的設(shè)備請求等,緩存技術(shù)在其中扮演著舉足輕重的角色。?