自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

緩存設(shè)計(jì):做好緩存設(shè)計(jì)的關(guān)鍵是什么?

存儲(chǔ) 數(shù)據(jù)管理
伴隨分布式以及云計(jì)算技術(shù)的不斷發(fā)展,數(shù)據(jù)存儲(chǔ)技術(shù)已然發(fā)生了天翻地覆般的變化。而且,不同的存儲(chǔ)技術(shù)在價(jià)格和性能方面均存在極大的差異。

緩存乃是一個(gè)用于臨時(shí)存儲(chǔ)數(shù)據(jù)的所在。當(dāng)用戶進(jìn)行數(shù)據(jù)查詢時(shí),第一步便是在緩存中探尋,倘若找到了,便直接加以運(yùn)用;要是未找到,就需前往數(shù)據(jù)的初始位置尋覓。因而,緩存實(shí)質(zhì)上屬于一種以空間換取時(shí)間的技術(shù)手段,借由數(shù)據(jù)在空間層面的重復(fù),來(lái)加快數(shù)據(jù)的訪問(wèn)速度。

不過(guò),伴隨分布式以及云計(jì)算技術(shù)的不斷發(fā)展,數(shù)據(jù)存儲(chǔ)技術(shù)已然發(fā)生了天翻地覆般的變化。而且,不同的存儲(chǔ)技術(shù)在價(jià)格和性能方面均存在極大的差異。所以,在針對(duì)性能展開(kāi)軟件設(shè)計(jì)的時(shí)候,如果我們未能做好多層級(jí)的緩存設(shè)計(jì),不但有可能造成金錢的浪費(fèi),而且所獲取的性能收益或許也難以達(dá)到理想狀態(tài)。

緩存設(shè)計(jì)的通關(guān)之路

那么首先,我打算從兩個(gè)問(wèn)題入手,引領(lǐng)您了解緩存設(shè)計(jì)應(yīng)在何時(shí)開(kāi)展,以及通過(guò)對(duì)不同數(shù)據(jù)類型特性的對(duì)比分析,和您共同探討怎樣才能做好緩存設(shè)計(jì)。

好,第一個(gè)問(wèn)題:在互聯(lián)網(wǎng)應(yīng)用服務(wù)中,運(yùn)用緩存技術(shù)的目的難道僅僅是為了提升訪問(wèn)速度嗎?實(shí)際上,我覺(jué)得并非所有的緩存都只是為了提速,因?yàn)樵诜植际较到y(tǒng)里,緩存機(jī)制實(shí)則是系統(tǒng)級(jí)性能設(shè)計(jì)的一項(xiàng)重要權(quán)衡手段。例如,當(dāng)某個(gè)數(shù)據(jù)庫(kù)的負(fù)載較高,接近系統(tǒng)瓶頸時(shí),我們能夠運(yùn)用緩存技術(shù),將負(fù)荷分?jǐn)傊疗渌麛?shù)據(jù)庫(kù)中,在此,使用緩存的目的,主要是實(shí)現(xiàn)負(fù)載均衡,而非提升訪問(wèn)速度。

第二個(gè)問(wèn)題:一個(gè)大型系統(tǒng)中的數(shù)據(jù)種類繁多,那么是否需要為每種數(shù)據(jù)都規(guī)劃緩存機(jī)制呢?其實(shí)完全沒(méi)必要。在實(shí)際的業(yè)務(wù)場(chǎng)景中,系統(tǒng)所包含的業(yè)務(wù)數(shù)據(jù)極多,您不可能針對(duì)每種數(shù)據(jù)都去設(shè)計(jì)和實(shí)現(xiàn)緩存機(jī)制,一方面是投入的軟件成本過(guò)高,另一方面也很可能無(wú)法帶來(lái)較高的性能收益。所以,在開(kāi)展緩存設(shè)計(jì)之前,您首先需要辨別出哪些數(shù)據(jù)訪問(wèn)對(duì)性能的影響較大。那么我們應(yīng)當(dāng)如何去辨別哪些數(shù)據(jù)需要緩存機(jī)制呢?

不過(guò)接下來(lái),在識(shí)別出需要運(yùn)用緩存機(jī)制的數(shù)據(jù)之后,您或許會(huì)發(fā)現(xiàn),這些數(shù)據(jù)種類之間的特性差異極大,如果采用同一種緩存設(shè)計(jì),實(shí)際上很難讓軟件性能達(dá)到最佳狀態(tài)。所以在此,我為您總結(jié)了三種需要緩存機(jī)制的數(shù)據(jù)種類,分別是不變性數(shù)據(jù)、弱一致性數(shù)據(jù)、強(qiáng)一致性數(shù)據(jù)。了解這三種緩存數(shù)據(jù)種類的差異,以及對(duì)應(yīng)的設(shè)計(jì)緩存機(jī)制的方法,您就掌握了緩存設(shè)計(jì)的核心要義。

好,下面我們就來(lái)具體了解下吧。

首先是不變性數(shù)據(jù)。不變性數(shù)據(jù)意味著數(shù)據(jù)永遠(yuǎn)不會(huì)發(fā)生變化,或者在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)不會(huì)發(fā)生變化,所以我們也能夠認(rèn)定這部分?jǐn)?shù)據(jù)是不變的。此類數(shù)據(jù)屬于可以優(yōu)先考慮運(yùn)用緩存技術(shù)的一種數(shù)據(jù)類型,在實(shí)際的業(yè)務(wù)場(chǎng)景中數(shù)量眾多。例如,Web 服務(wù)里的靜態(tài)網(wǎng)頁(yè)、靜態(tài)資源,或者數(shù)據(jù)庫(kù)表中列數(shù)據(jù)與 key 的映射關(guān)系、業(yè)務(wù)的啟動(dòng)配置等等,這些都能夠被視為不變性數(shù)據(jù)。

而且,不變性數(shù)據(jù)還意味著實(shí)現(xiàn)分布式一致性會(huì)極為容易,我們能夠?yàn)檫@些數(shù)據(jù)任選數(shù)據(jù)存儲(chǔ)方式,也能夠任選存儲(chǔ)節(jié)點(diǎn)位置。故而,我們實(shí)現(xiàn)緩存機(jī)制的方式能夠十分靈活,也會(huì)相對(duì)簡(jiǎn)單。比如在 Java 語(yǔ)言中,您可以直接使用內(nèi)存 Caffeine,或者內(nèi)置的結(jié)構(gòu)體當(dāng)作緩存均可。

另外這里需要您注意,當(dāng)您針對(duì)不變性數(shù)據(jù)進(jìn)行緩存設(shè)計(jì)時(shí),其中的緩存失效機(jī)制可以采用永遠(yuǎn)不失效,或者基于時(shí)間的失效方式。而在采用基于時(shí)間的失效方式時(shí),您還需要依據(jù)具體的業(yè)務(wù)需求,在緩存容量和訪問(wèn)速度之間做好設(shè)計(jì)實(shí)現(xiàn)方面的權(quán)衡。

弱一致性數(shù)據(jù)

第二種是弱一致性數(shù)據(jù)。它表示數(shù)據(jù)經(jīng)常會(huì)發(fā)生變化,然而業(yè)務(wù)對(duì)于數(shù)據(jù)的一致性要求并不高,也就是說(shuō),不同用戶在同一時(shí)間點(diǎn)看到并非完全一致的數(shù)據(jù),都是能夠被接受的。鑒于這類數(shù)據(jù)對(duì)一致性的要求相對(duì)較低,所以在設(shè)計(jì)緩存機(jī)制時(shí),您只需達(dá)成最終一致性即可。這類數(shù)據(jù)在實(shí)際業(yè)務(wù)里也較為常見(jiàn),例如業(yè)務(wù)的歷史分析數(shù)據(jù)、一些搜索查找返回的數(shù)據(jù)等,即便最近的部分?jǐn)?shù)據(jù)未被記錄進(jìn)去,影響也不大。

另外,快速辨別這類數(shù)據(jù)還有一個(gè)辦法,那便是使用從數(shù)據(jù)庫(kù) Replica(復(fù)制)節(jié)點(diǎn)中讀取的數(shù)據(jù),其中大部分都屬于這種類型的數(shù)據(jù)(很多數(shù)據(jù)庫(kù) Replica 節(jié)點(diǎn)的數(shù)據(jù)由于數(shù)據(jù)同步存在時(shí)延,是不滿足強(qiáng)一致性要求的)。針對(duì)弱一致性的數(shù)據(jù),我們通常采用的緩存失效機(jī)制是基于時(shí)間的失效方式,同時(shí)由于弱一致性的特點(diǎn),您能夠較為靈活地選擇數(shù)據(jù)存儲(chǔ)技術(shù),比如內(nèi)存 Cache,或者是分布式數(shù)據(jù)庫(kù) Cache。您甚至能夠基于負(fù)載均衡的調(diào)度,來(lái)設(shè)計(jì)多層級(jí)緩存機(jī)制。

強(qiáng)一致性數(shù)據(jù)

第三種緩存數(shù)據(jù)類型是強(qiáng)一致性數(shù)據(jù)。其指的是數(shù)據(jù)會(huì)頻繁發(fā)生變化,并且業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)的一致性要求極高,也就是說(shuō)當(dāng)數(shù)據(jù)產(chǎn)生變更后,其他用戶在系統(tǒng)內(nèi)的任何地方,都應(yīng)當(dāng)看到的是更新后的數(shù)據(jù)。

那么,對(duì)于這種類型的數(shù)據(jù),我通常不建議您使用緩存機(jī)制,因?yàn)檫@類數(shù)據(jù)運(yùn)用緩存會(huì)較為復(fù)雜,并且極易引入新的問(wèn)題。例如,用戶能夠直接提交和修改的各類數(shù)據(jù)內(nèi)容,如果未同步修改緩存中的數(shù)據(jù),就會(huì)引發(fā)數(shù)據(jù)不一致性的問(wèn)題,導(dǎo)致較為嚴(yán)重的業(yè)務(wù)故障。

不過(guò)在某些特殊的業(yè)務(wù)場(chǎng)景中,比如,在個(gè)別數(shù)據(jù)訪問(wèn)頻率極高的情況下,我們依舊需要通過(guò)設(shè)計(jì)緩存機(jī)制,來(lái)進(jìn)一步提高性能。

因此針對(duì)這類強(qiáng)一致性數(shù)據(jù),在設(shè)計(jì)緩存機(jī)制時(shí),您需要尤其留意兩點(diǎn):

這種數(shù)據(jù)的緩存必須采用修改同步的實(shí)現(xiàn)方式。也就是說(shuō),所有的數(shù)據(jù)修改都必須保證能夠同步修改緩存與數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

精確識(shí)別特定業(yè)務(wù)流程中,能夠使用緩存獲取數(shù)據(jù)的時(shí)長(zhǎng)。因?yàn)橛行┚彺鏀?shù)據(jù)(比如一次 REST 請(qǐng)求中,多個(gè)流程都需要使用的數(shù)據(jù))只能夠在單次業(yè)務(wù)流程中使用,不能跨業(yè)務(wù)流程使用。

好了,以上便是三種典型的數(shù)據(jù)種類的緩存設(shè)計(jì)思路了。

這里您需要注意的是,使用緩存必定是以性能優(yōu)化為目的,因此,您還需要運(yùn)用評(píng)估模型來(lái)分析緩存是否達(dá)成了性能優(yōu)化的目標(biāo)。

那么具體是何種評(píng)估模型呢?我們來(lái)看一下這個(gè)性能評(píng)估模型的公式:AMAT = Thit + MR * MP。其中:AMAT(Average Memory Access Time),代表的是平均內(nèi)存訪問(wèn)時(shí)間;Thit,指的是命中緩存之后的數(shù)據(jù)訪問(wèn)時(shí)間;MR,是訪問(wèn)緩存的失效率;MP,是指緩存失效后,系統(tǒng)訪問(wèn)緩存的時(shí)間與訪問(wèn)原始數(shù)據(jù)請(qǐng)求的時(shí)間之和。

另外這里您可能會(huì)留意到,AMAT 與原始數(shù)據(jù)訪問(wèn)之間的差值,代表的就是使用緩存所帶來(lái)的訪問(wèn)速度的提升。而在一些緩存使用不當(dāng)?shù)膱?chǎng)景下,增加的緩存機(jī)制很可能會(huì)造成數(shù)據(jù)訪問(wèn)速度下降的情況。所以接下來(lái),我就通過(guò)真實(shí)的緩存設(shè)計(jì)案例,來(lái)引領(lǐng)您理解如何正確地使用緩存,以此助力您更有效地提升系統(tǒng)性能。

緩存設(shè)計(jì)的典型使用場(chǎng)景

好,在開(kāi)始介紹之前呢,我還想為您說(shuō)明一下,在真實(shí)的業(yè)務(wù)里,緩存設(shè)計(jì)的場(chǎng)景實(shí)際上有很多,在這里我的目的主要是讓您明晰緩存設(shè)計(jì)的方法。

因此,我會(huì)從兩個(gè)較為典型的案例場(chǎng)景著手,引領(lǐng)您理解緩存的運(yùn)用。

如何做好靜態(tài)頁(yè)面的緩存設(shè)計(jì)?

在 Web 應(yīng)用服務(wù)中,一個(gè)重要的應(yīng)用場(chǎng)景便是靜態(tài)頁(yè)面的緩存使用。這里所說(shuō)的靜態(tài)頁(yè)面,指的是在一個(gè)網(wǎng)站內(nèi),所有用戶看到的都是相同的頁(yè)面,除非重新部署,否則通常不會(huì)發(fā)生變更,比如大部分公司官網(wǎng)的首頁(yè)封面等等。通常情況下,靜態(tài)頁(yè)面的訪問(wèn)并發(fā)量是比較大的,如果您不運(yùn)用緩存技術(shù),不但會(huì)導(dǎo)致用戶響應(yīng)時(shí)延較長(zhǎng),而且會(huì)給后端服務(wù)帶來(lái)極大的負(fù)載壓力。

那么針對(duì)靜態(tài)頁(yè)面,我們?cè)谑褂镁彺婕夹g(shù)時(shí),可以通過(guò)將靜態(tài)緩存放置在距離用戶較近的位置,來(lái)降低頁(yè)面數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸時(shí)延。

現(xiàn)在,我們來(lái)看一個(gè)針對(duì)靜態(tài)頁(yè)面使用緩存設(shè)計(jì)的示意圖:

圖片圖片

如圖上所示,針對(duì)靜態(tài)網(wǎng)頁(yè),首先您就能夠在軟件后端服務(wù)的實(shí)例中運(yùn)用緩存技術(shù),以此避免每次都要重新生成頁(yè)面信息。然后,由于靜態(tài)網(wǎng)頁(yè)屬于不變性數(shù)據(jù),所以您可以使用內(nèi)存或文件級(jí)緩存。

另外,針對(duì)訪問(wèn)量極大的靜態(tài)頁(yè)面,為了更進(jìn)一步減輕對(duì)后端服務(wù)的壓力,您還能夠?qū)㈧o態(tài)頁(yè)面置于網(wǎng)關(guān)處,接著利用 OpenResty 等第三方框架增添緩存機(jī)制,以保存靜態(tài)頁(yè)面。

除此之外,在網(wǎng)頁(yè)中眾多的靜態(tài)頁(yè)面或靜態(tài)資源文件,還需要使用瀏覽器的緩存,來(lái)進(jìn)一步提高性能。注意,這里我并非是建議您針對(duì)所有的靜態(tài)頁(yè)面,都需要設(shè)計(jì)三層的緩存機(jī)制,而是您要知曉,在軟件設(shè)計(jì)階段,通常就需要考慮如何進(jìn)行靜態(tài)頁(yè)面的緩存設(shè)計(jì)了

后端服務(wù)如何設(shè)計(jì)數(shù)據(jù)庫(kù)的多級(jí)緩存機(jī)制?

還有一個(gè)典型的緩存場(chǎng)景是針對(duì)數(shù)據(jù)庫(kù)的緩存?,F(xiàn)在的數(shù)據(jù)庫(kù)通常都是分布式存儲(chǔ)的,而且規(guī)模都比較大,在針對(duì)大規(guī)模數(shù)據(jù)進(jìn)行查詢與分析計(jì)算時(shí),都需要花費(fèi)一定的時(shí)間周期。因此,我們可以先識(shí)別出這些計(jì)算結(jié)果中可以使用緩存機(jī)制的數(shù)據(jù),然后就可以使用緩存來(lái)提升訪問(wèn)速度了。下面是一張針對(duì)數(shù)據(jù)庫(kù)緩存機(jī)制的原理圖:

圖片圖片

從圖上能夠看到,內(nèi)存級(jí) Cache、分布式 Cache 均可充當(dāng)數(shù)據(jù)計(jì)算分析結(jié)果的緩存。而且,不同級(jí)別的緩存訪問(wèn)速度存在差異,內(nèi)存級(jí)的 Cache 訪問(wèn)速度能夠達(dá)到微秒級(jí)別,甚至更優(yōu);分布式 Cache 訪問(wèn)速度通常小于毫秒級(jí)別;而對(duì)于原生數(shù)據(jù)庫(kù)的查詢與分析,通常大于毫秒級(jí)別。

因此,在具體規(guī)劃緩存機(jī)制的時(shí)候,您就需要依照前面我所介紹的緩存使用原理,辨別出數(shù)據(jù)類型,進(jìn)而選擇并設(shè)計(jì)緩存實(shí)現(xiàn)機(jī)制。

另外,在通過(guò)緩存機(jī)制實(shí)現(xiàn)訪問(wèn)速度優(yōu)化的過(guò)程中,我們主要關(guān)注的是不同層級(jí)緩存所帶來(lái)的訪問(wèn)速度提升,并且在此處,不同層級(jí)緩存也能夠存在于一個(gè)數(shù)據(jù)庫(kù)中。

比如,在我參與設(shè)計(jì)的一個(gè)性能優(yōu)化項(xiàng)目里,其 Cache 策略便是,使用 MongoDB 中的另外一個(gè) Collection(集合),作為緩存查詢分析,以此來(lái)優(yōu)化性能。所以,您在進(jìn)行緩存設(shè)計(jì)時(shí),關(guān)注點(diǎn)應(yīng)當(dāng)置于不同的數(shù)據(jù)種類,以及不同層級(jí)緩存的性能評(píng)估模型上,而非僅僅關(guān)注數(shù)據(jù)庫(kù)。只有如此,您才能夠設(shè)計(jì)出更出色、更優(yōu)良的性能緩存方案。

責(zé)任編輯:武曉燕 來(lái)源: 二進(jìn)制跳動(dòng)
相關(guān)推薦

2021-10-09 10:39:18

工業(yè)安全惡意軟件漏洞

2022-03-28 14:23:46

元宇宙區(qū)塊鏈技術(shù)

2012-09-11 09:30:19

虛擬化

2022-05-23 10:11:36

HTTP緩存

2015-03-26 10:40:59

2013-01-14 15:08:35

2013-03-28 13:08:15

Web緩存

2020-02-17 13:33:43

區(qū)塊鏈預(yù)測(cè)加密化幣

2019-12-11 10:07:02

緩存架構(gòu)數(shù)據(jù)庫(kù)

2013-05-23 09:37:04

公共云公共云部署整合公共云

2022-04-07 17:13:09

緩存算法服務(wù)端

2023-11-03 12:52:00

緩存系統(tǒng)設(shè)計(jì)

2012-04-16 15:14:47

web設(shè)計(jì)

2016-12-05 08:46:07

緩存架構(gòu)設(shè)計(jì)

2022-10-08 00:04:00

緩存架構(gòu)限流

2022-07-10 07:48:26

緩存軟件設(shè)計(jì)

2023-09-17 23:16:46

緩存數(shù)據(jù)庫(kù)

2009-02-10 08:57:01

分布式緩存.Net開(kāi)發(fā)

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)