快取失效竟然可以這麼解決?
資料傳輸提供的資料訂閱功能,可以在不影響業務的情況下,實現簡單、可靠的快取失效邏輯。這種快取失效機制為阿里巴巴多年架構最佳化沉澱下來的經驗,下面我們一起來看資料訂閱究竟怎麼實現這種機制。
傳統快取失效策略
為了提高業務訪問速度,提升業務讀併發,很多使用者都會在業務架構中引入快取層。業務所有讀請求全部路由到快取層,透過快取的記憶體讀取機制大大提升業務讀取效能。快取中的資料不能持久化 ,一旦快取異常退出,那麼記憶體中的資料就會丟失,所以為了保證資料完整,業務的更新資料會落地到持久化儲存中,例如DB。目前雲使用者的業務架構一般如下圖:
在上圖中,大家可以看到,使用者的更新資料直接持久化到DB, 業務讀請求直接請求快取資料,所以業務需要解決快取失效問題,即解決因為資料變更導致快取中的資料失效的問題。 目前業務解決快取失效問題的解決方法一般是業務實現DB、快取雙寫。透過業務雙寫解決快取失效,存在如下的問題:
- 程式碼侵入性比較強,需要雙寫兩份儲存,任何對DB的資料變更,都需要同時更新快取,程式碼層面後期可維護程度不高
- 使用者請求執行緒裡同步呼叫快取,對快取存在強以來,遇到快取超時等異常時,沒有辦法做到有效的重試,遇到異常給使用者返回系統錯誤、操作失敗等資訊,嚴重影響使用者體驗
- 使用者請求執行緒裡同步完成DB、快取雙寫,變更請求鏈路長,訪問延遲大,影響使用者體驗
RDS資料訂閱消費,輕鬆解決快取失效
在阿里巴巴內部同樣也遇到了快取失效的問題,隨著業務架構得不斷調整最佳化,我們已經沉澱出一套高可靠、極優雅得快取失效架構。即透過資料傳輸提供的資料訂閱功能,非同步獲取DB(例如公共雲上的RDS)的增量資料,根據增量資料進行快取失效。具體的架構類似下圖:
在這個架構裡面,快取更新流程如下:
- 業務完成DB更新後即返回請求
- 資料訂閱透過日誌解析方式實時解析並訂閱DB的增量更新資料,當發現DB有資料更新時,將增量資料推送給下游消費者
- 下游消費業務一旦接收到增量更新資料,即呼叫消費執行緒進行快取更新
至此完成整個快取更新過程。
從上面的快取失效流程,可以看出這種快取失效機制:
- 更新路徑短,延遲低: 快取失效為非同步流程,業務更新DB完成後直接返回,不需要關心快取失效流程,整個更新路徑短,更新延遲低
- 應用簡單可靠:應用無需實現複雜雙寫邏輯,只需啟動非同步執行緒監聽增量資料,更新快取資料即可
- 應用更新無效能消耗:因為資料訂閱是透過解析DB的增量日誌來獲取增量資料,獲取資料的過程對業務、DB效能無損
小結
資料訂閱功能為阿里雲資料傳輸提供的一種資料分發方式。透過資料訂閱實現的快取失效策略,讓業務更新更快捷,讓業務邏輯更簡單、更可靠。
資料訂閱只是資料傳輸提供的一種傳輸方式,除資料訂閱之外,資料傳輸還提供了資料實時同步,不停服遷移等多種傳輸能力,如需瞭解資料傳輸更多詳情,請猛擊資料傳輸。
相關文章
- Redis 快取擊穿(失效)、快取穿透、快取雪崩怎麼解決?Redis快取穿透
- 快取高一致性:Meta的快取失效解決方案快取
- 如何解決快取失效問題快取
- 來說說快取穿透、快取擊穿、快取雪崩都是什麼?怎麼解決?快取穿透
- Mata解決了快取何時失效的世紀難題? - Lu快取
- 阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案阿里快取穿透
- Redis 快取失效機制Redis快取
- OKR這麼好用,竟然還可以用它來擇偶?!OKR
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 快取穿透、快取擊穿、快取雪崩概念及解決方案快取穿透
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透
- Redis 快取穿透、快取雪崩原理及解決方案Redis快取穿透
- Spring還可以這樣用快取,你知道嗎?Spring快取
- (轉載)喬二爺—阿里一面關於 快取穿透、快取擊穿、快取雪崩和熱點資料失效問題的解決方案阿里快取穿透
- 快取穿透、快取擊穿、快取雪崩的場景以及解決方法快取穿透
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 快取穿透詳解及解決方案快取穿透
- 關於快取穿透、快取擊穿、快取雪崩的模擬與解決(Redis)快取穿透Redis
- 一文讀懂快取穿透、快取擊穿、快取雪崩及其解決方案快取穿透
- 震驚!亞馬遜竟然做出這種事,讓快遞員可以隨便進入你的家!亞馬遜
- Redis面試三大知識點:快取雪崩、快取穿透、快取更新這些你瞭解多少?Redis面試快取穿透
- Redis篇:持久化、淘汰策略,快取失效策略Redis持久化快取
- 快取熱點,快取穿透,終極解決方案看過來快取穿透
- 剖析Disruptor:為什麼會這麼快?(二)神奇的快取行填充快取
- Redis快取穿透/快取雪崩/快取擊穿(案例:產生的原因 解決方案利/弊)Redis快取穿透
- 一文徹底弄懂並解決Redis的快取雪崩,快取擊穿,快取穿透Redis快取穿透
- 快取穿透問題與解決方法快取穿透
- 網站開啟的速度慢原因都什麼可以這麼解決網站
- 快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 就這?Spring 事務失效場景及解決方案Spring
- Win10截圖功能失效怎麼解決?Win10
- 快取穿透、快取擊穿、快取雪崩區別和解決方案快取穿透
- 瀏覽器快取你瞭解麼?瀏覽器快取
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- 什麼是redis快取雪崩、快取穿透、快取擊穿Redis快取穿透
- 硬核!15張圖解Redis為什麼這麼快圖解Redis
- 快取常見問題及解決方案快取