南通颐猩文化传播有限公司

當(dāng)前位置:首頁 >  站長 >  建站經(jīng)驗(yàn) >  正文

服務(wù)器端緩存失效的應(yīng)對方法經(jīng)驗(yàn)總結(jié)

 2022-03-14 09:40  來源: 網(wǎng)絡(luò)綜合   我來投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競價(jià),好“米”不錯(cuò)過

緩存失效情況舉例

看下這個(gè)段偽代碼:

local value = get_from_cache(key)

if not value then

value = query_db(sql)

set_to_cache(value, timeout = 100)

end

return value

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

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

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

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

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

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

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

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

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

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

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

在這個(gè)架構(gòu)里面,緩存更新流程如下:

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

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

3.下游消費(fèi)業(yè)務(wù)一旦接收到增量更新數(shù)據(jù),即調(diào)用消費(fèi)線程進(jìn)行緩存更新

至此完成整個(gè)緩存更新過程。

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

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

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

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

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

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

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

相關(guān)標(biāo)簽
服務(wù)器
服務(wù)器系統(tǒng)

相關(guān)文章

  • 金i獎(jiǎng)榜單揭曉!坤前計(jì)算機(jī)榮膺“2023服務(wù)器創(chuàng)新企業(yè)獎(jiǎng)”

    2023年6月26日,由中國科學(xué)院《互聯(lián)網(wǎng)周刊》、中國社會(huì)科學(xué)院信息化研究中心、eNet研究院、德本咨詢聯(lián)合主辦的2023(第五屆)創(chuàng)新發(fā)展論壇成功舉辦,同期被視為互聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展創(chuàng)新風(fēng)向標(biāo)的“金i獎(jiǎng)”重磅發(fā)布。在競爭激烈的服務(wù)器領(lǐng)域,坤前計(jì)算機(jī)再度上榜,榮膺“2023服務(wù)器創(chuàng)新企業(yè)獎(jiǎng)”。研發(fā)創(chuàng)新布局

    標(biāo)簽:
    服務(wù)器
  • RAKsmart有獎(jiǎng)問答,爆款VPS免費(fèi)領(lǐng),前30名送隨機(jī)微信紅包!??!

    為更好的了解客戶需求及RAKsmart自信不足,即日起,RAKsmart將推出有獎(jiǎng)問卷調(diào)查,參與問卷調(diào)查即可領(lǐng)取SV1024MVPS使用一個(gè)月,同時(shí),前30名參與問卷調(diào)查,可領(lǐng)取微信紅包隨機(jī)1~10元不等,送完即止,快來參與吧!活動(dòng)時(shí)間:美國西岸圣何塞時(shí)間06/26/2023~07/10/2023問

    標(biāo)簽:
    服務(wù)器
  • 站群服務(wù)器有哪些優(yōu)勢?

    站群服務(wù)器是單獨(dú)為一個(gè)網(wǎng)站或者多個(gè)網(wǎng)站配置獨(dú)立IP的一種服務(wù)器。企業(yè)或是用戶如果想組建多個(gè)網(wǎng)站的話就需要用站群服務(wù)器了。站群服務(wù)器可以提高搜索引擎多個(gè)網(wǎng)站的關(guān)注度,提高網(wǎng)站文章的收錄以及網(wǎng)站文章的訪問量。

    標(biāo)簽:
    服務(wù)器
  • 從VPS切換到云服務(wù)器的幾大理由

    有很多文章比較VPS和云服務(wù)器,選擇哪種解決方案來提供最佳效率。盡管很多人仍在使用VPS,但其中許多人已對云服務(wù)器擁有簡單的認(rèn)知,且已有意圖從VPS遷移到云服務(wù)器。然而在這樣做之前,您需要更加深入了解云服務(wù)器,它的優(yōu)勢超過VPS,而不僅僅是因?yàn)椤霸啤币殉蔀闃I(yè)務(wù)托管部署的新趨勢。

    標(biāo)簽:
    服務(wù)器
  • 云服務(wù)器與物理機(jī)有哪些區(qū)別?

    物理機(jī)就是獨(dú)立的一臺(tái)服務(wù)器,可以理解成物理機(jī)為一個(gè)大房子,這個(gè)房子的歸屬權(quán)就在你手里,而云服務(wù)器是大房子里的一個(gè)房間。

熱門排行

信息推薦