天天看點

深入了解分布式系統中的緩存架構(下)

承接上一篇《了解分布式系統中的緩存架構(上)》,介紹了大型分布式系統中緩存的相關理論,常見的緩存元件以及應用場景,本文主要介紹緩存架構設計常見問題以及解決方案,業界案例。

1 分層緩存架構設計

2 緩存帶來的複雜度問題

常見的問題主要包括

資料一緻性

緩存穿透

緩存雪崩

緩存高可用

緩存熱點 下面逐一介紹分析這些問題以及相應的解決方案。

因為緩存屬于持久化資料的一個副本,是以不可避免的會出現資料不一緻問題。導緻髒讀或讀不到資料的情況。資料不一緻,一般是因為網絡不穩定或節點故障導緻

問題出現的常見3個場景以及解決方案:

緩存一般是Key,value方式存在,當某一個Key不存在時會查詢資料庫,假如這個Key,一直不存在,則會頻繁的請求資料庫,對資料庫造成通路壓力。

主要解決方案:

對結果為空的資料也進行緩存,當此key有資料後,清理緩存

一定不存在的key,采用布隆過濾器,建立一個大的Bitmap中,查詢時通過該bitmap過濾

緩存是否高可用,需要根據實際的場景而定,并不是所有業務都要求緩存高可用,需要結合具體業務,具體情況進行方案設計,例如臨界點是是否對後端的資料庫造成影響。

分布式:實作資料的海量緩存

複制:實作緩存資料節點的高可用

緩存熱點

一些特别熱點的資料,高并發通路同一份緩存資料,導緻緩存伺服器壓力過大。

解決:複制多份緩存副本,把請求分散到多個緩存伺服器上,減輕緩存熱點導緻的單台緩存伺服器壓力

3 業界案例

案例主要參考新浪微網誌陳波的技術分享

技術挑戰

Feed緩存架構圖

架構特點

新浪微網誌把SSD應用在分布式緩存場景中,将傳統的Redis/MC + Mysql方式,擴充為 Redis/MC + SSD Cache + Mysql方式,SSD Cache作為L2緩存使用,第一降低了MC/Redis成本過高,容量小的問題,也解決了穿透DB帶來的資料庫通路壓力

迎工作一到五年的Java工程師朋友們加入Java架構開發:860113481

群内提供免費的Java架構學習資料(裡面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

主要在資料架構、性能、儲存成本、服務化等不同方面進行了優化增強