FA17# 緩存設計治理點梳理
引言
本文主要梳理在使用和設計緩存的一些問題點以及應對思路,以及緩存設計的一些架構和治理點。本文主要內(nèi)容有:
緩存常見問題點梳理 緩存常見架構設計點 緩存常見監(jiān)控治理點
緩存穿透,大量請求訪問緩存在不存在的數(shù)據(jù),請求壓力落到數(shù)據(jù)庫,數(shù)據(jù)庫壓力瞬時增大甚至被打垮。
只要緩存有數(shù)據(jù)就不會打到數(shù)據(jù)庫,可通過短時間的緩存占位符避免。
緩存擊穿,緩存中的熱點數(shù)據(jù)過期,大量請求被落入數(shù)據(jù)庫,數(shù)據(jù)庫壓力瞬時增大甚至被打垮。
同一時間避免大量請求入庫,可通過分布式鎖限制請求通過。
緩存雪崩, 緩存中的大量數(shù)據(jù)設置相同的過期時間,當同一時間過期時,大量請求被落入數(shù)據(jù)庫,數(shù)據(jù)庫壓力瞬時增大甚至被打垮。
大量key避免設置相同的過期時間即可避免雪崩,可通過在設置過期時間上增加一定的隨機時間。
大key限制 ,大量大key會對集群造成沖擊和抖動,客戶端表現(xiàn)為超時,盡可能規(guī)范和避免。
在寫入前(SDK、代理或集群)可以對字符串的key大小進行限制,非字符串key可以限制個數(shù)。
在寫入大key后,定時對集群中key進行巡檢,撈出大key針對性告警與治理。
熱key識別 ,熱點key容易造成集群流量不均衡,個別節(jié)點流量過大,甚至擊垮集群,導致大量請求落入數(shù)據(jù)庫,造成雪崩。
客戶端計數(shù)埋點/代理端計數(shù)埋點/服務端統(tǒng)計熱點key。
熱key拆分打散/熱key遷移到集群其他節(jié)點/增加本地緩存形成兩級緩存優(yōu)先讀取本地緩存。
緩存和數(shù)據(jù)庫的一致性,先刪緩存再更新數(shù)據(jù)庫,避免讀到緩存舊數(shù)據(jù)。
本地緩存與分布式緩存一致性, 當緩存變化時,通過廣播機制通知到各個節(jié)點更新本地緩存,實現(xiàn)分布式緩存和本地緩存的一致性。
代理模式, Proxy+CacheDB 不同語言連接Proxy即可,實現(xiàn)輕量,監(jiān)控治理方便在代理層切入。
增加Proxy的部署成本增加,兩級跳轉(zhuǎn)RT增加。
直連模式, 客戶端直接連接緩存集群,RT響應以及性能較好,分布式全局故障系數(shù)更低。
每種語言都需要開發(fā)對應的客戶端。
一主多從, 由主節(jié)點負責讀寫,從節(jié)點負責災備,當主節(jié)點掛掉由從節(jié)點接管,壓力在主節(jié)點。
多主多從, 集群中每個節(jié)點都可負責讀寫,集群讀寫壓力充分分散。
多份數(shù)據(jù)高可靠, 通過2~3份數(shù)據(jù)備份保證數(shù)據(jù)的高可靠。
高可用協(xié)議, 常用一致性協(xié)議Paxos、Raft、Gossip或基于其裁剪。
緩存命中率, 當訪問的數(shù)據(jù)緩存中有即命中,否則未命中。
命中率=命中數(shù)/(命中數(shù)+沒有命中數(shù))。
緩存命中率衡量緩存的使用收益,命中率越高,應用性能加速越好,RT越短、吞吐越高。
大key攔截與巡檢 ,針對大key比如超過512KB或者1M進行攔截,以及大key監(jiān)控。
關鍵指標, 連接數(shù)、內(nèi)存使用率、集群副本數(shù)量、節(jié)點數(shù)量、響應RT耗時分布、可用性等監(jiān)控。
命令分布/慢查詢統(tǒng)計, 訪問集群執(zhí)行redis命令統(tǒng)計分布情況,統(tǒng)計耗時過長命令的統(tǒng)計。
運維白屏化, 集群部署、升級以及擴縮容、數(shù)據(jù)遷移、監(jiān)控告警等白屏化。
數(shù)據(jù)遷移與同步, 將數(shù)據(jù)從一個集群遷移到另一個集群,以及特殊場景集群之間的雙向同步。
