承載高並發的緩存技術究竟是什麼?

2022.10.20

承載高並發的緩存技術究竟是什麼?


緩存是指可以進行高速數據交換的存儲器,它先於內存與CPU交換數據,因此速率很快。那麼緩存的運行邏輯是什麼,以及緩存有哪些方案,將是本文的介紹重點。

作者| 金鵬,單位:中國移動智慧家庭運營中心

​Labs 導讀

緩存是指可以進行高速數據交換的存儲器,它先於內存與CPU交換數據,因此速率很快。那麼緩存的運行邏輯是什麼,以及緩存有哪些方案,將是本文的介紹重點。

緩存(Cache)是將目標數據存儲到一個具備高度可訪問性的高速運行層的技術。它旨在快速讀取使用率較高的、不經常更新的數據,避免在存取之前的請求重複訪問源數據層,產生額外的I/O資源消耗,繼而提升業務的並發度。為了提升數據訪問的運行速率,緩存數據也要權衡資源容量、數據刷新頻率設置過期時間或設置合理的緩存淘汰策略。主流的緩存方案有CDN緩存、瀏覽器緩存、本地緩存、外部緩存等。

Part 01 CDN緩存 

CDN指的是內容分發網絡,將資源緩存在CDN節點上,依靠部署在各地的邊緣服務器,通過中心平台的負載均衡、內容分發、調度等功能模塊,使用戶就近去CDN緩存節點上獲取內容,降低網絡延遲,提高訪問速度。運用到此項緩存技術的業務場景有:前端項目中的HTML、CSS、JS等靜態文件、物聯網中下載固件包、異地多活架構中的資源請求等等。將這些文件部署或緩存在CDN節點上,提升資源訪問速度的同時又保證資源訪問的穩定性。

Part 02 瀏覽器緩存 

瀏覽器緩存是指瀏覽器與後端服務器通過HTTP協議下的請求-響應模式來通信時,第一次向服務器發送請求並拿到結果後,會根據響應報文中的緩存規則來實現緩存。比如HTTP/1.1協議下會根據Cache-Control實現強制緩存規則;會在強制緩存失效下根據請求中的緩存標識決定緩存規則。瀏覽器會話持也是一種緩存實現,目前主流的技術方案有Cookie機制、Session機制、Token機制等。

圖片

Part 03 本地緩存 

本地緩存是指將響應數據緩存在服務器的應用進程內存空間裡,減少查詢持久化層的I/O消耗。優點是數據不需要跨網絡傳輸,讀取性能更好,支持的QPS更高;缺點是會佔用應用進程的內存空間,故不能進行大數據量的數據存儲,而且當所在的應用進程重啟時,本地緩存的數據會丟失。在Andlink雲平台項目中落地的本地緩存解決方案Caffeine,它的依賴包如下:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>${caffeine.version}</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Part 04 外部緩存或分佈式緩存

與本地緩存相對應的就是外部緩存或分佈式緩存,它獨立於應用進程部署,並可以設計成集群模式來保證數據讀寫分離、高性能、高可用。Andlink雲平台項目中落地的分佈式緩存是基於Spring Boot Cache框架整合Redis集群的方案,該方案可以很好的解決數據丟失、業務並發能力、故障恢復和動態存儲擴容等常見業務痛點。結合業務的需求Redis提供了比較全的應對方案,比如單機模式、主從模式、集群模式或哨兵模式,其中哨兵模式可以實現健康檢測和自動恢復,是保障高並發業務穩定運作的首選模式。方案的依賴包如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${redis.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>${cache.version}</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

當然,主流的緩存技術方案有很多,但總的方向是為了減少底層性能開銷、提高業務的高並發能力。目前Andlink雲平台支撐著億級的用戶量和千萬級的設備請求等,緩存技術在其中扮演著舉足輕重的角色。