數(shù)十年專注企業(yè)數(shù)字化轉(zhuǎn)型、智能化升級、企業(yè)上云解決方案服務(wù)商
工單提交 實名認(rèn)證 騰佑科技咨詢熱線咨詢熱線: 400-996-8756
百度云服務(wù)中心騰佑科技公司
云服務(wù)器活動 服務(wù)器租用 服務(wù)器托管 機柜租賃 帶寬租賃
  • 最新資訊
  • 熱門資訊
  • 最熱資訊
智能建站

如何使用主流緩存更新策略來務(wù)器性能消耗?

發(fā)布時間:2022-07-15 作者:admin

簡述:在互聯(lián)網(wǎng)項目開發(fā)中,緩存的應(yīng)用是非常普遍了,緩存可以幫助頁面提高加載速度,減少服務(wù)器或數(shù)據(jù)源的負(fù)載。一、為什么需要緩存?一般在項目中,最消耗性能的地方就是后端服務(wù)的數(shù)據(jù)庫了。而數(shù)據(jù)庫的讀寫頻率常常都是不均勻分布的,大多情況是讀多寫少,并且讀

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

為什么需要緩存?

一般來說,在項目中,最消耗性能的地方是后端服務(wù)數(shù)據(jù)庫。數(shù)據(jù)庫的讀寫頻率往往分布不均勻。在大多數(shù)情況下,讀寫少,讀操作(select)也會有一些復(fù)雜的判斷條件,比如like、group、join等等,這些語法很消耗性能,所以會有很多慢查詢,所以數(shù)據(jù)庫在閱讀操作中很容易遇到瓶頸。

然后,通過在數(shù)據(jù)庫前提供緩存服務(wù),可以有效地吸收不均勻的請求,抵抗流量峰值。

此外,如果應(yīng)用程序和數(shù)據(jù)源不在同一服務(wù)器中,中間會有大量的網(wǎng)絡(luò)消耗,這也會對應(yīng)用程序的響應(yīng)速度產(chǎn)生很大的影響。如果當(dāng)前應(yīng)用程序?qū)?shù)據(jù)實時性的要求不那么強,則在應(yīng)用程序側(cè)添加緩存可以快速提高效率。

使用緩存會遇到哪些問題?

雖然緩存可以提高整體性能,但也可能帶來其他問題。

例如,使用緩存后,相當(dāng)于存儲兩個數(shù)據(jù),一個在數(shù)據(jù)庫中,另一個存儲在緩存中。當(dāng)需要寫入新數(shù)據(jù)或更新舊數(shù)據(jù)時,如果我們只更新其中一個數(shù)據(jù)源,雙方的數(shù)據(jù)就不一致。因此,存在緩存數(shù)據(jù)和數(shù)據(jù)庫數(shù)據(jù)如何有效快速地同步以確保數(shù)據(jù)的最終一致性的問題。

此外,緩存服務(wù)還引入了系統(tǒng)架構(gòu)的復(fù)雜性,因為緩存本身帶來的以下問題需要額外關(guān)注:

1.緩存過期時間問題

設(shè)計緩存的過期時間非常熟練,必須與業(yè)務(wù)的實際情況相結(jié)合。因為如果設(shè)計過期時間過短,緩存效果不好,數(shù)據(jù)從數(shù)據(jù)庫到緩存;如果緩存設(shè)計過期時間過長,會導(dǎo)致內(nèi)存浪費。

2.緩存命中率問題

這也是設(shè)計緩存中需要存儲的數(shù)據(jù)的一個重要點。如果設(shè)計不好,可能會導(dǎo)致緩存命中率過低,失去緩存效果。一般來說,對于熱點數(shù)據(jù),最好確保命中率超過70%。

3.緩存穿透/雪崩問題

穿透/雪崩問題是,如果緩存服務(wù)停機或完全丟失,所有流量可能會在一瞬間直接擊中后端數(shù)據(jù)庫,可能導(dǎo)致連鎖反應(yīng)。瞬時請求高峰很可能導(dǎo)致數(shù)據(jù)庫無法攜帶。

三、緩存更新策略有哪些?

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

CacheAside;

Read/WriteThrough;

WriteBehind。

每種模式都有不同的特點,適用于不同的項目場景,下面依次看:

1、CacheAside模式

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

在查詢數(shù)據(jù)時,從緩存開始Cache在中讀數(shù)據(jù)時,如果沒有緩存,則從數(shù)據(jù)庫中讀取數(shù)據(jù)。獲得數(shù)據(jù)庫數(shù)據(jù)后,將數(shù)據(jù)放入緩存中Cache中;

如果應(yīng)用程序需要更新數(shù)據(jù),則需要更新數(shù)據(jù)庫中的數(shù)據(jù)。更新完成后,通過指令緩存Cache數(shù)據(jù)失效。

寫完數(shù)據(jù)庫后,為什么不讓更新操作繼續(xù)緩存?Cache數(shù)據(jù)也被修改了?

主要是因為這樣做,有兩個寫作事件,擔(dān)心并發(fā)會導(dǎo)致臟數(shù)據(jù)。

同時有兩個請求(請求A和請求AB)并發(fā)執(zhí)行。請求A是讀取數(shù)據(jù),請求B是更新數(shù)據(jù)。在初始狀態(tài)緩存中沒有數(shù)據(jù)。當(dāng)請求A讀取數(shù)據(jù)并準(zhǔn)備重寫時,此時此刻,請求B只是想更新數(shù)據(jù)。更新數(shù)據(jù)庫后,請求A將舊數(shù)據(jù)寫入緩存,屬于臟數(shù)據(jù)。

那么CacheAside模型沒有臟數(shù)據(jù)問題嗎?不,在極端情況下也可能產(chǎn)生臟數(shù)據(jù),例如:

同時有兩個請求(請求A和請求AB)并發(fā)執(zhí)行。要求A讀數(shù)據(jù),要求B寫數(shù)據(jù)。如果在初始狀態(tài)緩存中沒有此數(shù)據(jù),請求A發(fā)現(xiàn)緩存中沒有數(shù)據(jù),并將在數(shù)據(jù)庫中讀取數(shù)據(jù),讀取數(shù)據(jù)并準(zhǔn)備寫回緩存中。此時,請求B編寫數(shù)據(jù),請求B在編寫數(shù)據(jù)庫數(shù)據(jù)后設(shè)置緩存故障。此時,要求A在數(shù)據(jù)庫中讀取以前的舊數(shù)據(jù),并開始將數(shù)據(jù)寫入緩存中,此時寫入舊數(shù)據(jù)。最終,緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)不一致,導(dǎo)致臟數(shù)據(jù)。

但這種概率遠(yuǎn)小于上述概率。所以總的來說。CacheAside模型仍然是一種簡單實用的方式。

2、Read/WriteThrough模式

這種模式實際上是以緩存服務(wù)為主要存儲,。應(yīng)用程序的所有讀寫請求都直接處理緩存服務(wù)。無論最終數(shù)據(jù)庫如何,數(shù)據(jù)庫的數(shù)據(jù)都由緩存服務(wù)維護(hù)和更新。然而,當(dāng)數(shù)據(jù)在緩存中發(fā)生變化時,數(shù)據(jù)庫同步更新。在應(yīng)用程序眼中,只有緩存服務(wù)。

流程相當(dāng)簡單:

直接訪問緩存服務(wù)需要閱讀數(shù)據(jù)和更新數(shù)據(jù);

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

該模種模式下,臟數(shù)據(jù)的概率相對較低,但它強烈依賴緩存,這對緩存服務(wù)的穩(wěn)定性有很大的要求。此外,在添加新的緩存節(jié)點時,會出現(xiàn)初始狀態(tài)空數(shù)據(jù)問題。

3、WriteBehind模式

這種模式是Read/WriteThrough模式的變體。區(qū)別在于Read/WriteThrough寫數(shù)據(jù)庫時,模式的緩存是同步的,WriteBehind緩存操作數(shù)據(jù)庫的模式是異步的。

流程如下:

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

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

這種模式的特點是速度快,效率高,但數(shù)據(jù)一致性差,數(shù)據(jù)丟失,邏輯復(fù)雜。

以上是三種主流的緩存更新策略,以及Refrsh-Ahead由于使用不太常見,不詳細(xì)介紹模式等。

緩存是提高互聯(lián)網(wǎng)項目效率的一個非常常見的解決方案。它有很多用途和關(guān)鍵。你可以一起交流。

騰佑科技十多年IDC運營經(jīng)驗,托管全球國內(nèi)外服務(wù)器租賃托管、機柜租賃、帶寬租賃、虛擬主機、云主機、CDN同時提供高防服務(wù)器安全服務(wù),歡迎客戶來電咨詢。

點擊展開全文

騰佑科技(m.mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個國家版權(quán)局認(rèn)證。公司自成立以來,一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。

售前咨詢熱線:400-996-8756

備案提交:0371-89913068

售后客服:0371-89913000

熱門活動

百度云服務(wù)中心
  • 熱門資訊
  • 隨便看看