• 正文
    • Part 01●??本地緩存使用場景?●
    • Part 02●??現(xiàn)狀和挑戰(zhàn)?●
    • Part 03●??自研本地緩存技術?●
    • Part 04●??總結?●
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

五分鐘技術趣談 | 本地緩存技術探索

2023/11/13
1975
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

作者:盛磊,單位:中國移動智慧家庭運營中心

緩存技術在高流量、大并發(fā)的應用服務中是一把利器,使用緩存可以降低數(shù)據庫訪問壓力、提高接口響應速度。緩存技術分為本地緩存和分布式緩存,二者各有利弊。本地緩存無法在集群中進行共享,存在應用服務重啟數(shù)據丟失、需要重新預熱加載的問題,而分布式緩存如redis、Memcached可以解決此類問題。但是由于本地緩存沒有分布式緩存的網絡io耗時和集中化依賴問題,依然在很多業(yè)務場景中有著獨到的應用。本文主要介紹現(xiàn)有的主流本地緩存技術以及挑戰(zhàn),并提出一種自研本地緩存技術。

Part 01●??本地緩存使用場景?

在程序中,有些表數(shù)據,數(shù)據量有限,但是程序啟動就會馬上訪問,并且訪問的很頻繁,比如(例如配置參數(shù),區(qū)域信息)。針對這種情況,可以將數(shù)據放到程序的本地緩存中即內存中,從而提高系統(tǒng)的訪問效率、減少數(shù)據庫訪問。此外,相比本地緩存,數(shù)據庫訪問、分布式緩存會占用連接,存在網絡消耗,本地緩存只需要考慮緩存占用的內存空間、緩存的失效策略。數(shù)據庫、本地緩存及分布式緩存的區(qū)別如下表所示:

Part 02●??現(xiàn)狀和挑戰(zhàn)?

2.1 Map

Map是一種k-v數(shù)據結構,非常方便于自己實現(xiàn)本地緩存,比如使用HashMap全局變量,主要需要考慮啟動或調用時加載數(shù)據、線程安全、內存泄漏內存溢出等問題。常用的ConcurrentHashMap通過Node數(shù)組、鏈表、紅黑樹等數(shù)據結構,實現(xiàn)數(shù)據分段和鎖保護,兼顧了訪問性能和安全性。

此外,自己實現(xiàn)本地緩存好處在于,可以靈活控制緩存寫入時機,可以結合業(yè)務應用的啟動時機、通知機制或調用,自己控制未命中時查詢并寫入還是服務啟動時就全量預熱。

但是,通過Map自研實現(xiàn)本地緩存,需要顯式刪除才能將數(shù)據從緩存中清理;如果不考慮內存大小限制,一旦候選緩存數(shù)據量很大,容易出現(xiàn)內存溢出問題,造成服務崩潰造成重大線上問題,而自研實現(xiàn)緩存限制策略又增加了復雜性和維護風險。因此,要不要自研實現(xiàn)本地緩存,需要綜合考慮待緩存數(shù)據量與技術難度風險。

2.2 Guava Cache

Guava Cache是google實現(xiàn)的開源本地緩存技術,開箱即用,解決了實際應用中遇到的大多問題,是常用的本地緩存技術。構建一個本地緩存實例示例代碼如下:

Guava cache類似于concurrentHashMap,但是與之不同的是,concurrentHashMap需要顯式地刪除緩存,同時難以控制對本地內存的使用量。在緩存失效策略和本地內存占用控制方面,GuavaCache都有靈活的可選擇控制策略。

2.3 緩存失效策略

2.3.1基于大小的失效策略

2.3.2基于時間的失效策略

2.3.3基于引用的失效

此外,GuavaCache支持本地緩存對象刪除的監(jiān)聽機制,在實際應用中,可以通過分析key刪除的原因,綜合評價本地緩存大小和失效策略設計的合理性,方便進一步優(yōu)化本地緩存設置。

2.4 Caffeine

Caffeine cache與Guava cache非常類似,比如上面講到的guava cache三大類過期策略,caffeine都有。但是由于Guava cache基于LRU淘汰算法,而Caffeine 因為使用了 Window-TinyLFU 緩存淘汰策略,提供了一個近乎最佳的命中率,綜合了 LRU 和 LFU 算法的長處,使其成為本地緩存之王。

Window-TinyLFU算法原理如上圖所示,基本原理是將Cache分成了幾個區(qū),新數(shù)據放到Window Cache,滿了之后使用LRU進行晉升Probation Cache,然后再根據TinyLYU算法決定是否再次晉級,或者淘汰,詳細的晉升和淘汰機制可以百度學習??吹竭@里,是不是覺得這套算法邏輯頗像JVM的分代回收算法,果然分區(qū)而治才是王道。

Caffeine封神除了淘汰算法無敵之外,還提供了AsyncLoadingCache,可以自定義線程池,多線程異步的好處在于調用方可以針對某些獲取源數(shù)據耗時選擇阻塞等待或非阻塞,防止因為某些少量超時導致load阻塞問題。

Caffeine還內置了統(tǒng)計功能,通過Caffeine.recordStats()打開數(shù)據收集,然后Cache.stats()方法將會返回當前緩存的一些統(tǒng)計指標,例如:

hitRate():查詢緩存的命中率

evictionCount():被驅逐的緩存數(shù)量

averageLoadPenalty():新值被載入的平均耗時

不過開啟統(tǒng)計功能會有一些性能損耗,這個需要具體評估。

Part 03●??自研本地緩存技術?

上述介紹的中間件技術,基本可以滿足絕大多數(shù)開發(fā)場景,但是在實際應用中,經常遇到需要全量緩存表數(shù)據的場景,比如規(guī)則引擎中配置的通用規(guī)則,告警過濾規(guī)則等,這種基于全量預熱數(shù)據的本地緩存需求,主要要求緩存更新的實時性與數(shù)據完整性,與上述基于key-value命中的緩存機制不太相符,因此這里介紹一種自研的緩存全量數(shù)據的本地緩存技術。

該技術是要緩存表中全量有效數(shù)據,基于三個關鍵的表設計字段:update_time(更新時間)、status(數(shù)據狀態(tài))、unique_key(表征數(shù)據唯一或通過計算保證唯一的字段),通過內置的單線程定時任務,實現(xiàn)本地緩存的增量更新和全量更新,同時兼顧了緩存更新的時效性和準確性,由于不需要依賴其他中間件,可以有效應用在所有的業(yè)務系統(tǒng)中。基本原理如下圖所示:

1.服務啟動時執(zhí)行一次全量數(shù)據加載,開啟定時任務,并記錄當前時間t0為全量更新時間t1和增量更新時間t2。

2.每次定時任務執(zhí)行時,如果(當前時間t-上次全量更新時間t1)>全量更新時間閾值max1,則執(zhí)行一次全量數(shù)據對齊,并刷新全量更新時間t1=t。當然這個策略看實際需求是否有必要。

3.如果未觸發(fā)全量更新,會增量查詢 (當前時間t-上次增量更新時間t2)時間區(qū)間內表中更新數(shù)據,并更新t2=t。

4.如果第3步查詢到有更新數(shù)據,則增量更新到本地緩存(要求表設計為邏輯刪除)。

5.定時任務不斷重復2~4步驟即可。

Part 04●??總結?

本地緩存是服務開發(fā)者做性能優(yōu)化的重要技術手段之一,本篇介紹了常用的幾種本地緩存技術方案。本著拿來主義的原則,通過需求場景評估后,如果這些成熟的本地緩存中間件能夠滿足需求,則優(yōu)先選用,如guava cache, caffeine。自己實現(xiàn)的好處在于能夠靈活控制本地緩存讀、寫、失效、監(jiān)聽等各種時機,可以更加深入融合實際需求,但也存在內存控制、內存泄漏、并發(fā)問題等挑戰(zhàn),所以需要綜合評判。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據手冊 ECAD模型 風險等級 參考價格 更多信息
DP83867ERGZT 1 Texas Instruments Extended temperature, robust low-latency gigabit Ethernet PHY transceiver with SGMII 48-VQFN -40 to 105

ECAD模型

下載ECAD模型
$12.97 查看
NCV7321D12R2G 1 onsemi LIN Transceiver, Stand-alone ESD Improved, 3000-REEL
$1.11 查看
KSZ8081MLXCA 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48
$1.65 查看
中國移動

中國移動

中國移動有限公司(「本公司」,包括子公司合稱為「本集團」)于1997年9月3日在香港成立,本集團在中國內地所有三十一個省、自治區(qū)、直轄市以及香港特別行政區(qū)提供通信和信息服務,業(yè)務主要涵蓋個人、家庭、政企和新興市場的語音、數(shù)據、寬帶、專線、IDC、云計算、物聯(lián)網等,是中國內地最大的通信和信息服務供應商,亦是全球網絡和客戶規(guī)模最大、盈利能力領先、市值排名位居前列的世界級通信和信息運營商。

中國移動有限公司(「本公司」,包括子公司合稱為「本集團」)于1997年9月3日在香港成立,本集團在中國內地所有三十一個省、自治區(qū)、直轄市以及香港特別行政區(qū)提供通信和信息服務,業(yè)務主要涵蓋個人、家庭、政企和新興市場的語音、數(shù)據、寬帶、專線、IDC、云計算、物聯(lián)網等,是中國內地最大的通信和信息服務供應商,亦是全球網絡和客戶規(guī)模最大、盈利能力領先、市值排名位居前列的世界級通信和信息運營商。收起

查看更多

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

移動Labs是中國移動的社交化新媒體平臺,是面向外部行業(yè)及產業(yè)鏈合作伙伴的信息發(fā)布、業(yè)務發(fā)展和產業(yè)推進門戶。