快取高一致性:Meta的快取失效解決方案
快取有助於減少延遲、擴充套件讀取繁重的工作負載並節省成本。它們實際上無處不在。快取在您的手機和瀏覽器中執行。例如,CDN 和 DNS 本質上是地理複製快取。多虧了許多在幕後工作的快取,您現在可以閱讀這篇博文。
Phil Karlton 有句名言:“電腦科學中只有兩件困難的事情:快取失效和命名事物。” 如果您曾經研究過使用失效的快取,那麼您很可能會遇到令人討厭的快取不一致問題。
在 Meta,我們運營著世界上一些最大的快取部署,包括 TAO和Memcache。多年來,我們將 TAO 的快取一致性提高了一項,從 99.9999%(6 個 9)提高到 99.99999999%(10 個 9)。
當談到快取失效時,我們相信我們現在有一個有效的解決方案來彌合理論與實踐之間的差距。這篇博文中的原理和方法廣泛適用於大多數(如果不是全部)任何規模的快取服務。無論您是在 Redis 中快取 Postgres 資料還是維護分解的具體化,它都會這樣做。
我們希望幫助減少工程師必須處理的快取失效問題的數量,並幫助使所有失效的快取更加一致。
根據定義,快取不儲存資料的真實來源(例如,資料庫)。快取失效描述了當真實源中的資料發生變化時主動使陳舊的快取條目失效的過程。如果快取失效處理不當,它可能會無限期地在快取中留下與事實來源不同的不一致值。
快取失效涉及必須由快取本身以外的其他事物執行的操作。有些東西(例如,客戶端或釋出/訂閱系統)需要告訴快取發生了突變。僅依賴生存時間 (TTL) 來保持其新鮮度的快取不包含快取失效,因此不在本討論範圍內。對於本文的其餘部分,我們將假設存在快取失效。
在某些情況下,快取不一致幾乎與資料庫上的資料丟失一樣嚴重。從使用者的角度來看,它甚至無法與資料丟失區分開來。
可靠的一致性可觀察性
為了解決快取失效和快取一致性,第一步涉及測量。我們想測量快取的一致性,並在快取中存在不一致的條目時發出警報。測量不能包含任何誤報。人腦可以很容易地排除噪音。如果存在任何誤報,人們會很快學會忽略它,並且該指標將失去信任並變得無用。我們還需要精確的測量,因為我們談到要測量超過 10 個 9 的一致性。如果實現了一致性修復,我們希望確保我們可以定量地衡量它的改進。
這個龐大而複雜的分散式系統中,任何元件中的單個缺陷都可能導致快取不一致,是否有可能找到一個引入大多數(如果不是全部)快取不一致的地方?
我們的任務變成了找到一個簡單的解決方案來幫助我們管理這種複雜性。我們希望從單個快取伺服器的角度評估整個快取一致性問題。歸根結底,不一致必須在快取伺服器上實現。從它的角度來看,它只關心幾個方面:
- 它收到無效了嗎?
- 它是否正確處理了無效?
- 之後專案變得不一致了嗎?
我們構建了一個有狀態的跟蹤庫,在這個紫色的小視窗中記錄和跟蹤快取突變,所有有趣和複雜的互動都會觸發導致快取不一致的錯誤。它涵蓋了快取驅逐,即使沒有日誌也可以告訴我們無效事件是否永遠不會到達。它嵌入到一些主要的快取服務和整個失效管道中。它緩衝最近修改資料的索引,用於確定是否應記錄後續快取狀態更改。它支援程式碼跟蹤,因此我們將知道每個跟蹤查詢的確切程式碼路徑。
這種方法幫助我們發現並修復了許多缺陷。它提供了一種系統化且更具可擴充套件性的方法來診斷快取不一致。事實證明它非常有效。
相關文章
- Redis 快取擊穿(失效)、快取穿透、快取雪崩怎麼解決?Redis快取穿透
- 快取穿透、快取擊穿、快取雪崩概念及解決方案快取穿透
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透
- Redis 快取穿透、快取雪崩原理及解決方案Redis快取穿透
- 阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案阿里快取穿透
- 快取失效竟然可以這麼解決?快取
- 快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 快取穿透、快取擊穿、快取雪崩區別和解決方案快取穿透
- 一文讀懂快取穿透、快取擊穿、快取雪崩及其解決方案快取穿透
- 技術派中的快取一致性解決方案快取
- Redis快取穿透/快取雪崩/快取擊穿(案例:產生的原因 解決方案利/弊)Redis快取穿透
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 分散式快取--快取與資料庫一致性方案分散式快取資料庫
- 如何解決快取失效問題快取
- 快取熱點,快取穿透,終極解決方案看過來快取穿透
- 快取穿透詳解及解決方案快取穿透
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 快取的三大方案以及解決方案快取
- 快取穿透、快取擊穿、快取雪崩的場景以及解決方法快取穿透
- (轉載)喬二爺—阿里一面關於 快取穿透、快取擊穿、快取雪崩和熱點資料失效問題的解決方案阿里快取穿透
- 資料庫與快取資料一致性解決方案資料庫快取
- Redis 快取失效機制Redis快取
- 關於快取穿透、快取擊穿、快取雪崩的模擬與解決(Redis)快取穿透Redis
- Redis快取的主要異常及解決方案Redis快取
- 快取常見問題及解決方案快取
- 快取三大問題及解決方案快取
- Java高併發快取架構,快取雪崩、快取穿透之謎Java快取架構穿透
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 一文徹底弄懂並解決Redis的快取雪崩,快取擊穿,快取穿透Redis快取穿透
- 快取一致性快取
- jquery的get()函式快取問題解決方案jQuery函式快取
- Redis詳解(十二)------ 快取穿透、快取擊穿、快取雪崩Redis快取穿透
- Mata解決了快取何時失效的世紀難題? - Lu快取
- 來說說快取穿透、快取擊穿、快取雪崩都是什麼?怎麼解決?快取穿透
- Redis 快取雪崩,快取擊穿和快取穿透技術方案總結Redis快取穿透
- 有贊透明多級快取解決方案(TMC)快取