欧美色图 亚洲|野外口爆视频国产|久久精品视频观看|97精品人人抽插

CDN緩存服務(wù)器的更新策略?

       在互聯(lián)網(wǎng)項(xiàng)目開發(fā)中,緩存的應(yīng)用是非常普遍了,緩存可以幫助頁(yè)面提高加載速度,減少服務(wù)器或數(shù)據(jù)源的負(fù)載。

  1、為什么需要緩存?

  一般在項(xiàng)目中,最消耗性能的地方就是后端服務(wù)的數(shù)據(jù)庫(kù)了。而數(shù)據(jù)庫(kù)的讀寫頻率常常都是不均勻分布的,大多情況是讀多寫少,并且讀操作(select)還會(huì)有一些復(fù)雜的判斷條件,比如 like、group、join 等等,這些語(yǔ)法是非常消耗性能的,所有會(huì)出現(xiàn)很多的慢查詢,因此數(shù)據(jù)庫(kù)很容易在讀操作的環(huán)節(jié)遇到瓶頸。

  那么通過(guò)在數(shù)據(jù)庫(kù)前面,前置一個(gè)緩存服務(wù),就可以有效的吸收不均勻的請(qǐng)求,抵擋流量波峰。

  另外,如果應(yīng)用與數(shù)據(jù)源不在同一個(gè)服務(wù)器的情況下,中間還會(huì)有很多的網(wǎng)絡(luò)消耗,也會(huì)對(duì)應(yīng)用的響應(yīng)速度有很大影響,如果當(dāng)前應(yīng)用對(duì)數(shù)據(jù)實(shí)時(shí)性的要求不那么強(qiáng)的話,在應(yīng)用側(cè)加上緩存就能很快速的提升效率。

  2、那使用緩存會(huì)遇到哪些問(wèn)題呢?

  雖然緩存可以提高整體性能,但是它也可能會(huì)帶來(lái)別的問(wèn)題。例如使用緩存之后,就相當(dāng)于把數(shù)據(jù)存放了2份,一份是在數(shù)據(jù)庫(kù)中,另一份存放在緩存中。當(dāng)有新的數(shù)據(jù)要寫入或者舊數(shù)據(jù)需要更新的時(shí)候,如果我們只更新了其中一份數(shù)據(jù)源,那兩邊的數(shù)據(jù)就不一致了,所以這里就存在一個(gè)緩存數(shù)據(jù)與數(shù)據(jù)庫(kù)數(shù)據(jù)如何進(jìn)行有效且快速的同步問(wèn)題,才可以保證數(shù)據(jù)的最終一致性。

  另外,加上緩存服務(wù)其實(shí)也引入了系統(tǒng)架構(gòu)的復(fù)雜度,因?yàn)檫€需要額外的關(guān)注緩存自身帶來(lái)的下列問(wèn)題:

  緩存的過(guò)期時(shí)間問(wèn)題:設(shè)計(jì)緩存的過(guò)期時(shí)間需要非常的有技巧,且必須與業(yè)務(wù)實(shí)際情況相結(jié)合。因?yàn)槿绻O(shè)計(jì)的過(guò)期時(shí)間太短了,那會(huì)導(dǎo)致緩存效果不佳,且還會(huì)造成頻繁的從數(shù)據(jù)庫(kù)中往緩存里寫數(shù)據(jù)。如果緩存設(shè)計(jì)的過(guò)期時(shí)間太長(zhǎng)了,又會(huì)導(dǎo)致內(nèi)存的浪費(fèi)。

  緩存的命中率問(wèn)題:這也是設(shè)計(jì)緩存中需要存放哪些數(shù)據(jù)的很重要一點(diǎn),如果設(shè)計(jì)的不好,可能會(huì)導(dǎo)致緩存命中率過(guò)低,失去緩存效果。一般對(duì)于熱點(diǎn)數(shù)據(jù)而言,要保證命中率達(dá)到70%以上效果最佳。

  緩存的穿透/雪崩問(wèn)題:是指如果緩存服務(wù)一旦宕機(jī)或全部丟失,那么有可能一瞬間所有的流量都直接打到了后端數(shù)據(jù)庫(kù)上,可能會(huì)造成連鎖反應(yīng),瞬間的請(qǐng)求高峰極有可能導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法承載。

  3、緩存的更新策略具體有哪些?

  典型的緩存模式,一般有如下幾種:

  Cache Aside

  Read/Write Through

  Write Behind

  每種模式都有不同的特點(diǎn),適應(yīng)與不同的項(xiàng)目場(chǎng)景,下面來(lái)依次看看:

  Cache Aside 模式

CDN緩存服務(wù)器的更新策略?-DVBCN

  這是大家經(jīng)常用到的一種策略模式。這種模式主要流程如下:

  應(yīng)用在查詢數(shù)據(jù)的時(shí)候,先從緩存Cache中讀取數(shù)據(jù),如果緩存中沒(méi)有,則再?gòu)臄?shù)據(jù)庫(kù)中讀取數(shù)據(jù),得到數(shù)據(jù)庫(kù)的數(shù)據(jù)之后,將這個(gè)數(shù)據(jù)也放到緩存Cache中。

  如果應(yīng)用要更新某個(gè)數(shù)據(jù),也是先去更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),更新完成之后,則通過(guò)指令讓緩存Cache中的數(shù)據(jù)失效。

  這里為什么不讓更新操作在寫完數(shù)據(jù)庫(kù)之后,緊接著去把緩存Cache中的數(shù)據(jù)也修改了呢?

  主要是因?yàn)檫@樣做的話,就有2個(gè)寫操作的事件了,擔(dān)心在并發(fā)的情況下會(huì)導(dǎo)致臟數(shù)據(jù),舉個(gè)例子:假如同時(shí)有2個(gè)請(qǐng)求,請(qǐng)求A和請(qǐng)求B,并發(fā)的執(zhí)行。請(qǐng)求A是要去讀數(shù)據(jù),請(qǐng)求B是要去更新數(shù)據(jù)。初始狀態(tài)緩存中是沒(méi)有數(shù)據(jù)的,當(dāng)請(qǐng)求A讀到數(shù)據(jù)之后,準(zhǔn)備往回寫的時(shí)候,此刻,請(qǐng)求B正好要更新數(shù)據(jù),更新完了數(shù)據(jù)庫(kù)之后,又去把緩存更新了,那請(qǐng)求A再往緩存中寫的就是舊數(shù)據(jù)了,屬于臟數(shù)據(jù)。

  那么 Cache Aside 模式就沒(méi)有臟數(shù)據(jù)問(wèn)題了嗎?不是的,在極端情況下也可能會(huì)產(chǎn)生臟數(shù)據(jù),比如:

  假如同時(shí)有2個(gè)請(qǐng)求,請(qǐng)求A和請(qǐng)求B,并發(fā)的執(zhí)行。請(qǐng)求A是要去讀數(shù)據(jù),請(qǐng)求B是要去寫數(shù)據(jù)。假如初始狀態(tài)緩存中沒(méi)有這個(gè)數(shù)據(jù),那請(qǐng)求A發(fā)現(xiàn)緩存中沒(méi)有數(shù)據(jù),就會(huì)去數(shù)據(jù)庫(kù)中讀數(shù)據(jù),讀到了數(shù)據(jù)準(zhǔn)備寫回緩存中,就在這個(gè)時(shí)候,請(qǐng)求B是要去寫數(shù)據(jù)的,請(qǐng)求B在寫完數(shù)據(jù)庫(kù)的數(shù)據(jù)之后,又去設(shè)置了緩存失效。這個(gè)時(shí)候,請(qǐng)求A由于在數(shù)據(jù)庫(kù)中讀到了之前的舊數(shù)據(jù),開始往緩存中寫數(shù)據(jù)了,此時(shí)寫進(jìn)入的就也是舊數(shù)據(jù)。那么最終就會(huì)導(dǎo)致,緩存中的數(shù)據(jù)與數(shù)據(jù)庫(kù)的數(shù)據(jù)不一致,造成了臟數(shù)據(jù)。

  不過(guò)這種概率比上面一種概率要小很多。所以整體而言 Cache Aside 模式 還是一種比較簡(jiǎn)單實(shí)用的方式。

  Read/Write Through 模式

 

CDN緩存服務(wù)器的更新策略?-DVBCN

  這個(gè)模式其實(shí)就是將 緩存服務(wù) 作為主要的存儲(chǔ),應(yīng)用的所有讀寫請(qǐng)求都是直接與緩存服務(wù)打交道,而不管最后端的數(shù)據(jù)庫(kù)了,數(shù)據(jù)庫(kù)的數(shù)據(jù)由緩存服務(wù)來(lái)維護(hù)和更新。不過(guò)緩存中數(shù)據(jù)變更的時(shí)候是同步去更新數(shù)據(jù)庫(kù)的,在應(yīng)用的眼中只有緩存服務(wù)。

  流程就相當(dāng)簡(jiǎn)單了:

  應(yīng)用要讀數(shù)據(jù)和更新數(shù)據(jù)都直接訪問(wèn)緩存服務(wù)

  緩存服務(wù)同步的將數(shù)據(jù)更新到數(shù)據(jù)庫(kù)

  這個(gè)模式出現(xiàn)臟數(shù)據(jù)的概率就比較低,但是就強(qiáng)依賴緩存了,對(duì)緩存服務(wù)的穩(wěn)定性有較大要求,另外,增加新緩存節(jié)點(diǎn)時(shí)還會(huì)有初始狀態(tài)空數(shù)據(jù)問(wèn)題。

  Write Behind 模式

  這個(gè)模式就是 Read/Write Through 模式 的一個(gè)變種。區(qū)別就是 Read/Write Through 模式的緩存寫數(shù)據(jù)庫(kù)的時(shí)候是同步的,而 Write Behind 模式 的緩存操作數(shù)據(jù)庫(kù)是異步的。

  流程如下:

  應(yīng)用要讀數(shù)據(jù)和更新數(shù)據(jù)都直接訪問(wèn)緩存服務(wù)

  緩存服務(wù)異步的將數(shù)據(jù)更新到數(shù)據(jù)庫(kù)(通過(guò)異步任務(wù))

  這個(gè)模式的特點(diǎn)就是速度很快,效率會(huì)非常高,但是數(shù)據(jù)的一致性比較差,還可能會(huì)有數(shù)據(jù)的丟失情況,實(shí)現(xiàn)邏輯也較為復(fù)雜。

  以上就是目前三種主流的緩存更新策略,另外還有Refrsh-Ahead模式等由于使用的不是很常見就不詳細(xì)介紹了。

  緩存是互聯(lián)網(wǎng)項(xiàng)目中非常普遍的一個(gè)提高效率的方案,用法比較多,也比較關(guān)鍵,大家可以一起交流。

相關(guān)文章
北京商務(wù)局發(fā)實(shí)施方案:取消IDC、CDN、ISP等電信領(lǐng)域外資股比限制,積極推動(dòng)外資企業(yè)申請(qǐng)資質(zhì)
北京商務(wù)局發(fā)實(shí)施方案:取消IDC、CDN、I…
阿里云容蓓:DCDN助力云原生時(shí)代的應(yīng)用構(gòu)建及最佳實(shí)踐
阿里云容蓓:DCDN助力云原生時(shí)代的應(yīng)用…
騰訊云程文杰:全球數(shù)字化深度發(fā)展? Tencent Cloud EdgeOne乘風(fēng)而上
騰訊云程文杰:全球數(shù)字化深度發(fā)展? Ten…
中國(guó)廣電省網(wǎng)公司罕見取得全國(guó)范圍的內(nèi)容分發(fā)(CDN)、互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC)資質(zhì)為哪般?
中國(guó)廣電省網(wǎng)公司罕見取得全國(guó)范圍的內(nèi)…
中國(guó)聯(lián)通深夜發(fā)文:與騰訊創(chuàng)投新設(shè)合營(yíng)企業(yè)將壯大CDN、邊緣計(jì)算產(chǎn)業(yè)鏈
中國(guó)聯(lián)通深夜發(fā)文:與騰訊創(chuàng)投新設(shè)合營(yíng)…
中國(guó)聯(lián)通與騰訊公司擬新設(shè)混改公司,發(fā)力CDN和邊緣計(jì)算業(yè)務(wù)
中國(guó)聯(lián)通與騰訊公司擬新設(shè)混改公司,發(fā)…
我還沒(méi)有學(xué)會(huì)寫個(gè)人說(shuō)明!