偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

緩存設(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ù),來加快數(shù)據(jù)的訪問速度。

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

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

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

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

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

不過接下來,在識(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ù)種類的差異,以及對應(yīng)的設(shè)計(jì)緩存機(jī)制的方法,您就掌握了緩存設(shè)計(jì)的核心要義。

好,下面我們就來具體了解下吧。

首先是不變性數(shù)據(jù)。不變性數(shù)據(jù)意味著數(shù)據(jù)永遠(yuǎn)不會(huì)發(fā)生變化,或者在相當(dāng)長的一段時(shí)間內(nèi)不會(huì)發(fā)生變化,所以我們也能夠認(rèn)定這部分?jǐn)?shù)據(jù)是不變的。此類數(shù)據(jù)屬于可以優(yōu)先考慮運(yùn)用緩存技術(shù)的一種數(shù)據(jù)類型,在實(shí)際的業(yè)務(wù)場景中數(shù)量眾多。例如,Web 服務(wù)里的靜態(tài)網(wǎng)頁、靜態(tài)資源,或者數(shù)據(jù)庫表中列數(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ì)相對簡單。比如在 Java 語言中,您可以直接使用內(nèi)存 Caffeine,或者內(nèi)置的結(jié)構(gòu)體當(dāng)作緩存均可。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

那么針對靜態(tài)頁面,我們在使用緩存技術(shù)時(shí),可以通過將靜態(tài)緩存放置在距離用戶較近的位置,來降低頁面數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸時(shí)延。

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

圖片圖片

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

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

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

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

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

圖片圖片

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

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

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

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

責(zé)任編輯:武曉燕 來源: 二進(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ù)測加密化幣

2019-12-11 10:07:02

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

2013-05-23 09:37:04

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

2023-11-03 12:52:00

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

2022-04-07 17:13:09

緩存算法服務(wù)端

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)限流

2025-06-25 08:20:00

緩存Java并發(fā)編程

2009-02-10 08:57:01

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

2022-07-10 07:48:26

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

2023-09-17 23:16:46

緩存數(shù)據(jù)庫
點(diǎn)贊
收藏

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