校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 服務器端緩存失效的應對方法經驗總結

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

熱門標簽:騰訊地圖標注店面 農村電銷機器人 福州防封電銷卡辦理低資費 地圖標注位置怎么快速上線 宜春手機外呼系統 柳州市電話電銷機器人團隊 新科游樂園地圖標注 廣州銷售外呼系統定制 天刀地圖標注錯誤

緩存失效情況舉例
看下這個段偽代碼:

復制代碼
代碼如下:

local value = get_from_cache(key)
if not value then
value = query_db(sql)
set_to_cache(value, timeout = 100)
end
return value

看上去沒有問題,在單元測試情況下,也不會有異常。
但是,進行壓力測試的時候,你會發現,每隔100秒,數據庫的查詢就會出現一次峰值。如果你的cache失效時間設置的比較長,那么這個問題被發現的機率就會降低。
為什么會出現峰值呢?想象一下,在cache失效的瞬間,如果并發請求有1000條同時到了 query_db(sql) 這個函數會怎樣?沒錯,會有1000個請求打向數據庫。這就是緩存失效瞬間引起的風暴。它有一個英文名,叫 "dog-pile effect"。
怎么解決?自然的想法是發現緩存失效后,加一把鎖來控制數據庫的請求。具體的細節,春哥在lua-resty-lock的文檔里面做了詳細的說明,我就不重復了,請看這里。多說一句,lua-resty-lock庫本身已經替你完成了wait for lock的過程,看代碼的時候需要注意下這個細節。

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

在上圖中,大家可以看到,用戶的更新數據直接持久化到DB, 業務讀請求直接請求緩存數據,所以業務需要解決緩存失效問題,即解決因為數據變更導致緩存中的數據失效的問題。 目前業務解決緩存失效問題的解決方法一般是業務實現DB、緩存雙寫。通過業務雙寫解決緩存失效,存在如下的問題:
代碼侵入性比較強,需要雙寫兩份存儲,任何對DB的數據變更,都需要同時更新緩存,代碼層面后期可維護程度不高
用戶請求線程里同步調用緩存,對緩存存在強以來,遇到緩存超時等異常時,沒有辦法做到有效的重試,遇到異常給用戶返回系統錯誤、操作失敗等信息,嚴重影響用戶體驗
用戶請求線程里同步完成DB、緩存雙寫,變更請求鏈路長,訪問延遲大,影響用戶體驗
RDS數據訂閱消費,輕松解決緩存失效
在阿里巴巴內部同樣也遇到了緩存失效的問題,隨著業務架構得不斷調整優化,我們已經沉淀出一套高可靠、極優雅得緩存失效架構。即通過數據傳輸提供的數據訂閱功能,異步獲取DB(例如公共云上的RDS)的增量數據,根據增量數據進行緩存失效。具體的架構類似下圖:

在這個架構里面,緩存更新流程如下:
1.業務完成DB更新后即返回請求
2.數據訂閱通過日志解析方式實時解析并訂閱DB的增量更新數據,當發現DB有數據更新時,將增量數據推送給下游消費者
3.下游消費業務一旦接收到增量更新數據,即調用消費線程進行緩存更新
至此完成整個緩存更新過程。
從上面的緩存失效流程,可以看出這種緩存失效機制:
1.更新路徑短,延遲低: 緩存失效為異步流程,業務更新DB完成后直接返回,不需要關心緩存失效流程,整個更新路徑短,更新延遲低
2.應用簡單可靠:應用無需實現復雜雙寫邏輯,只需啟動異步線程監聽增量數據,更新緩存數據即可
3.應用更新無性能消耗:因為數據訂閱是通過解析DB的增量日志來獲取增量數據,獲取數據的過程對業務、DB性能無損

小結
數據訂閱功能為阿里云數據傳輸提供的一種數據分發方式。通過數據訂閱實現的緩存失效策略,讓業務更新更快捷,讓業務邏輯更簡單、更可靠。
數據訂閱只是數據傳輸提供的一種傳輸方式,除數據訂閱之外,數據傳輸還提供了數據實時同步,不停服遷移等多種傳輸能力,如需了解數據傳輸更多詳情,請猛擊數據傳輸。

標簽:揭陽 貴州 宣城 和田 呼和浩特 南昌 雅安 陽江

巨人網絡通訊聲明:本文標題《服務器端緩存失效的應對方法經驗總結》,本文關鍵詞  服務器,端,緩存,失效,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《服務器端緩存失效的應對方法經驗總結》相關的同類信息!
  • 本頁收集關于服務器端緩存失效的應對方法經驗總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 洛宁县| 泽普县| 五华县| 延安市| 开化县| 荣成市| 武平县| 秭归县| 清水河县| 平江县| 霍林郭勒市| 定陶县| 五家渠市| 凌海市| 嵊泗县| 察雅县| 梁平县| 海林市| 安仁县| 兰坪| 河池市| 广西| 屯昌县| 兴安县| 莫力| 凯里市| 苏尼特左旗| 衡阳县| 绿春县| 元谋县| 东宁县| 仲巴县| 安乡县| 南昌县| 塘沽区| 海口市| 红原县| 利辛县| 渭源县| 灵璧县| 阳山县|