DDBS 緩存架構(gòu)

本文主要討論這么幾個(gè)問題:
(1)“緩存與數(shù)據(jù)庫”需求緣起
(2)“淘汰緩存”還是“更新緩存”
(3)緩存和數(shù)據(jù)庫的操作時(shí)序
(4)緩存和數(shù)據(jù)庫架構(gòu)簡(jiǎn)析

本節(jié)是為下一部分 主從系統(tǒng)下的cache的鋪墊踢星。

需求緣起

緩存是一種提高系統(tǒng)讀性能的常見技術(shù),對(duì)于讀多寫少的應(yīng)用場(chǎng)景,我們經(jīng)常使用緩存來進(jìn)行優(yōu)化。由于大部分的請(qǐng)求是查詢昼榛,我們?cè)诰彺嬷薪id到money的鍵值對(duì)翼闽,能夠極大降低數(shù)據(jù)庫的壓力。

讀操作流程

有了數(shù)據(jù)庫和緩存兩個(gè)地方存放數(shù)據(jù)之后(uid->money)滞诺,每當(dāng)需要讀取相關(guān)數(shù)據(jù)時(shí)(money)茵烈,操作流程一般分為兩種情況:

  • 數(shù)據(jù)Hit:如果緩存中有相關(guān)數(shù)據(jù)money百匆,則直接返回?cái)?shù)據(jù)。
  • 數(shù)據(jù)Miss:如果緩存中沒有相關(guān)數(shù)據(jù)money呜投,則從數(shù)據(jù)庫讀取相關(guān)數(shù)據(jù)money胧华,然后放入緩存中uid->money寄症,再返回?cái)?shù)據(jù)。

更新緩存 vs 淘汰緩存

當(dāng)數(shù)據(jù)發(fā)生寫操作的時(shí)候矩动,是應(yīng)該更新緩存呢?還是應(yīng)該淘汰緩存释漆?
更新緩存的優(yōu)點(diǎn):緩存不會(huì)增加一次miss悲没,命中率高。
淘汰緩存的優(yōu)點(diǎn):簡(jiǎn)單男图。

那到底是選擇更新緩存還是淘汰緩存呢示姿,主要取決于“更新緩存的復(fù)雜度”。


例如逊笆,上述場(chǎng)景栈戳,只是簡(jiǎn)單的把余額money設(shè)置成一個(gè)值,那么:
(1)淘汰緩存的操作為deleteCache(uid)
(2)更新緩存的操作為setCache(uid, money)
更新緩存的代價(jià)很小难裆,此時(shí)我們應(yīng)該更傾向于更新緩存子檀,以保證更高的緩存命中率


如果余額是通過很復(fù)雜的數(shù)據(jù)計(jì)算得出來的,例如業(yè)務(wù)上除了賬戶表account乃戈,還有商品表product褂痰,折扣表discount
account(uid, money)
product(pid, type, price, pinfo)
discount(type, zhekou)

業(yè)務(wù)場(chǎng)景是用戶買了一個(gè)商品product,這個(gè)商品的價(jià)格是price症虑,這個(gè)商品從屬于type類商品缩歪,type類商品在做促銷活動(dòng)要打折扣zhekou,購買了商品過后谍憔,這個(gè)余額的計(jì)算就復(fù)雜了匪蝙,需要:
(1)先把商品的品類,價(jià)格取出來:SELECT type, price FROM product WHERE pid=XXX
(2)再把這個(gè)品類的折扣取出來:SELECT zhekou FROM discount WHERE type=XXX
(3)再把原有余額從緩存中查詢出來money = getCache(uid)
(4)再把新的余額寫入到緩存中去setCache(uid, money-price*zhekou)

更新緩存的代價(jià)很大习贫,此時(shí)我們應(yīng)該更傾向于淘汰緩存逛球。

淘汰緩存是一種通用的緩存處理方式:操作簡(jiǎn)單,并且?guī)淼母弊饔弥皇窃黾恿艘淮蝐ache miss

先操作數(shù)據(jù)庫 vs 先操作緩存

當(dāng)寫操作發(fā)生時(shí)沈条,假設(shè)淘汰緩存作為對(duì)緩存通用的處理方式需忿,又面臨兩種抉擇:
(1)先寫數(shù)據(jù)庫,再淘汰緩存
(2)先淘汰緩存蜡歹,再寫數(shù)據(jù)庫
究竟采用哪種時(shí)序呢屋厘?由于寫數(shù)據(jù)庫與淘汰緩存不能保證原子性,所以一般遵循以下原則:

如果出現(xiàn)不一致月而,誰先做對(duì)業(yè)務(wù)的影響較小汗洒,就誰先執(zhí)行。



以下的兩個(gè)假設(shè)都是在單一業(yè)務(wù)(請(qǐng)求)的情況下父款,出現(xiàn)的錯(cuò)誤溢谤。


假設(shè)先寫數(shù)據(jù)庫瞻凤,再淘汰緩存:


第一步寫數(shù)據(jù)庫操作成功,第二步淘汰緩存失敗世杀,則會(huì)出現(xiàn)DB中是新數(shù)據(jù)阀参,Cache中是舊數(shù)據(jù),數(shù)據(jù)不一致瞻坝。


假設(shè)先淘汰緩存蛛壳,再寫數(shù)據(jù)庫:


第一步淘汰緩存成功,第二步寫數(shù)據(jù)庫失敗所刀,則只會(huì)引發(fā)一次Cache miss衙荐。

緩存架構(gòu)優(yōu)化


上述緩存架構(gòu)有一個(gè)缺點(diǎn):業(yè)務(wù)方需要同時(shí)關(guān)注緩存與DB,有沒有進(jìn)一步的優(yōu)化空間呢浮创?
主流優(yōu)化方案是服務(wù)化:加入一個(gè)服務(wù)層忧吟,向上游提供帥氣的數(shù)據(jù)訪問接口,向上游屏蔽底層數(shù)據(jù)存儲(chǔ)的細(xì)節(jié)斩披,這樣業(yè)務(wù)線不需要關(guān)注數(shù)據(jù)是來自于cache還是DB溜族。


服務(wù)化是向業(yè)務(wù)方屏蔽底層數(shù)據(jù)庫與緩存復(fù)雜性的一種通用方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雏掠,一起剝皮案震驚了整個(gè)濱河市斩祭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乡话,老刑警劉巖摧玫,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绑青,居然都是意外死亡诬像,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門闸婴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坏挠,“玉大人,你說我怎么就攤上這事邪乍〗岛荩” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵庇楞,是天一觀的道長(zhǎng)榜配。 經(jīng)常有香客問我,道長(zhǎng)吕晌,這世上最難降的妖魔是什么蛋褥? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮睛驳,結(jié)果婚禮上烙心,老公的妹妹穿的比我還像新娘膜廊。我一直安慰自己,他們只是感情好淫茵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布爪瓜。 她就那樣靜靜地躺著,像睡著了一般匙瘪。 火紅的嫁衣襯著肌膚如雪钥勋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天辆苔,我揣著相機(jī)與錄音,去河邊找鬼扼劈。 笑死驻啤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荐吵。 我是一名探鬼主播骑冗,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼先煎!你這毒婦竟也來了贼涩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤薯蝎,失蹤者是張志新(化名)和其女友劉穎遥倦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占锯,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袒哥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了消略。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堡称。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艺演,靈堂內(nèi)的尸體忽然破棺而出却紧,到底是詐尸還是另有隱情,我是刑警寧澤胎撤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布晓殊,位于F島的核電站,受9級(jí)特大地震影響哩照,放射性物質(zhì)發(fā)生泄漏挺物。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一飘弧、第九天 我趴在偏房一處隱蔽的房頂上張望识藤。 院中可真熱鬧砚著,春花似錦、人聲如沸痴昧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赶撰。三九已至舌镶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豪娜,已是汗流浹背餐胀。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘤载,地道東北人否灾。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸣奔,于是被迫代替她去往敵國和親墨技。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容