當前位置:首頁 >  站長 >  建站經驗 >  正文

服務器端緩存失效的應對方法經驗總結

 2022-03-14 09:40  來源: 網絡綜合   我來投稿 撤稿糾錯

  阿里云優(yōu)惠券 先領券再下單

緩存失效情況舉例

看下這個段偽代碼:

local value = get_from_cache(key)

if not value then

value = query_db(sql)

set_to_cache(value, timeout = 100)

end

return value

看上去沒有問題,在單元測試情況下,也不會有異常。

但是,進行壓力測試的時候,你會發(fā)現(xiàn),每隔100秒,數(shù)據庫的查詢就會出現(xiàn)一次峰值。如果你的cache失效時間設置的比較長,那么這個問題被發(fā)現(xiàn)的機率就會降低。

為什么會出現(xiàn)峰值呢?想象一下,在cache失效的瞬間,如果并發(fā)請求有1000條同時到了 query_db(sql) 這個函數(shù)會怎樣?沒錯,會有1000個請求打向數(shù)據庫。這就是緩存失效瞬間引起的風暴。它有一個英文名,叫 "dog-pile effect"。

怎么解決?自然的想法是發(fā)現(xiàn)緩存失效后,加一把鎖來控制數(shù)據庫的請求。具體的細節(jié),春哥在lua-resty-lock的文檔里面做了詳細的說明,我就不重復了,請看這里。多說一句,lua-resty-lock庫本身已經替你完成了wait for lock的過程,看代碼的時候需要注意下這個細節(jié)。

傳統(tǒng)緩存失效應對策略 為了提高業(yè)務訪問速度,提升業(yè)務讀并發(fā),很多用戶都會在業(yè)務架構中引入緩存層。業(yè)務所有讀請求全部路由到緩存層,通過緩存的內存讀取機制大大提升業(yè)務讀取性能。緩存中的數(shù)據不能持久化 ,一旦緩存異常退出,那么內存中的數(shù)據就會丟失,所以為了保證數(shù)據完整,業(yè)務的更新數(shù)據會落地到持久化存儲中,例如DB。目前云用戶的業(yè)務架構一般如下圖:

在上圖中,大家可以看到,用戶的更新數(shù)據直接持久化到DB, 業(yè)務讀請求直接請求緩存數(shù)據,所以業(yè)務需要解決緩存失效問題,即解決因為數(shù)據變更導致緩存中的數(shù)據失效的問題。 目前業(yè)務解決緩存失效問題的解決方法一般是業(yè)務實現(xiàn)DB、緩存雙寫。通過業(yè)務雙寫解決緩存失效,存在如下的問題:

代碼侵入性比較強,需要雙寫兩份存儲,任何對DB的數(shù)據變更,都需要同時更新緩存,代碼層面后期可維護程度不高

用戶請求線程里同步調用緩存,對緩存存在強以來,遇到緩存超時等異常時,沒有辦法做到有效的重試,遇到異常給用戶返回系統(tǒng)錯誤、操作失敗等信息,嚴重影響用戶體驗

用戶請求線程里同步完成DB、緩存雙寫,變更請求鏈路長,訪問延遲大,影響用戶體驗

RDS數(shù)據訂閱消費,輕松解決緩存失效

在阿里巴巴內部同樣也遇到了緩存失效的問題,隨著業(yè)務架構得不斷調整優(yōu)化,我們已經沉淀出一套高可靠、極優(yōu)雅得緩存失效架構。即通過數(shù)據傳輸提供的數(shù)據訂閱功能,異步獲取DB(例如公共云上的RDS)的增量數(shù)據,根據增量數(shù)據進行緩存失效。具體的架構類似下圖:

在這個架構里面,緩存更新流程如下:

1.業(yè)務完成DB更新后即返回請求

2.數(shù)據訂閱通過日志解析方式實時解析并訂閱DB的增量更新數(shù)據,當發(fā)現(xiàn)DB有數(shù)據更新時,將增量數(shù)據推送給下游消費者

3.下游消費業(yè)務一旦接收到增量更新數(shù)據,即調用消費線程進行緩存更新

至此完成整個緩存更新過程。

從上面的緩存失效流程,可以看出這種緩存失效機制:

1.更新路徑短,延遲低: 緩存失效為異步流程,業(yè)務更新DB完成后直接返回,不需要關心緩存失效流程,整個更新路徑短,更新延遲低

2.應用簡單可靠:應用無需實現(xiàn)復雜雙寫邏輯,只需啟動異步線程監(jiān)聽增量數(shù)據,更新緩存數(shù)據即可

3.應用更新無性能消耗:因為數(shù)據訂閱是通過解析DB的增量日志來獲取增量數(shù)據,獲取數(shù)據的過程對業(yè)務、DB性能無損

小結 數(shù)據訂閱功能為阿里云數(shù)據傳輸提供的一種數(shù)據分發(fā)方式。通過數(shù)據訂閱實現(xiàn)的緩存失效策略,讓業(yè)務更新更快捷,讓業(yè)務邏輯更簡單、更可靠。

數(shù)據訂閱只是數(shù)據傳輸提供的一種傳輸方式,除數(shù)據訂閱之外,數(shù)據傳輸還提供了數(shù)據實時同步,不停服遷移等多種傳輸能力,如需了解數(shù)據傳輸更多詳情,請猛擊數(shù)據傳輸。

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

相關文章

  • RAKsmart韓國大帶寬服務器性能評價

    RAKsmart韓國大帶寬服務器以超低延遲、頂尖硬件、企業(yè)級穩(wěn)定性重塑亞太業(yè)務部署標準。無論是初創(chuàng)企業(yè)抑或大型集團,均可依托其優(yōu)化的網絡架構與靈活配置,無縫拓展全球市場。接下來,小庫主機評測為您帶來RAKsmart韓國大帶寬服務器性能評價。

  • 服務器內存能不能用在臺式機上?

    服務器內存與臺式機內存因應用場景差異,在規(guī)格設計上存在本質區(qū)別。但通過技術適配,部分服務器內存可應用于臺式機,尤其在高性能計算或舊設備升級場景中,能顯著降低成本。本文將從硬件規(guī)格、兼容性風險到實操方案,深度解析服務器內存能否用在臺式機上。

  • 哪個新加坡服務器服務商好

    隨著東南亞數(shù)字經濟蓬勃發(fā)展,新加坡作為亞太地區(qū)核心網絡樞紐,其服務器資源因低延遲、高穩(wěn)定性成為企業(yè)出海的首選。那么,哪個新加坡服務器服務商好呢?下面,小庫主機評測為您推薦RAKsmart。

    標簽:
    服務器
  • 租用服務器帶寬預估大小怎么算?一文讀懂核心邏輯與實用技巧

    基礎公式為:帶寬(Mbps)=(峰值流量需求×8)/時間占比。例如,若網站每日高峰時段流量占全天的40%,需在此期間滿足60%的用戶訪問,則需將日均流量按比例分配至高峰時段計算。

  • 多線服務器具有什么優(yōu)勢?5大隱藏優(yōu)勢告別單線卡頓

    多線服務器通過整合不同運營商(如電信、聯(lián)通、移動)及國際優(yōu)質線路(如CN2GIA),實現(xiàn)流量智能調度與故障自動切換,有效解決跨網延遲、單點故障等問題。其核心價值在于:降低延遲40%+、可用性達99.9%、防御能力提升5倍,尤其適合跨境電商、全球流媒體等高并發(fā)場景。

    標簽:
    服務器

熱門排行

信息推薦