溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

發(fā)布時(shí)間:2021-12-07 16:02:22 來(lái)源:億速云 閱讀:140 作者:柒染 欄目:系統(tǒng)運(yùn)維

這篇文章將為大家詳細(xì)講解有關(guān)緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

仔細(xì)觀察一下我們現(xiàn)有的系統(tǒng),小到一顆CPU,大到一個(gè)在線交易系統(tǒng)。任何性能問(wèn)題都可以通過(guò)一種方式有效的解決,這種方式就是緩存。不錯(cuò),緩存幾乎可以成為解決性能問(wèn)題的銀彈,百發(fā)百中。緩存的主要目的是降低數(shù)據(jù)訪問(wèn)延時(shí),實(shí)現(xiàn)手段多種多樣,下面對(duì)不同種類(lèi)的緩存進(jìn)行介紹。

CPU的緩存

能想到的最小粒度的緩存恐怕就是CPU的緩存了。CPU不但有緩存,而且將緩存分成了多種級(jí)別,如圖1所示,分別是L1、L2和L3  3級(jí)緩存。其中L1和L2是一個(gè)核心獨(dú)享的緩存,而L3是同一顆CPU內(nèi)的多個(gè)核心共享的。圖1架構(gòu)是目前CPU中最常見(jiàn)的架構(gòu),而CPU關(guān)于緩存的架構(gòu)細(xì)節(jié)比這個(gè)還要復(fù)雜。多數(shù)CPU是將緩存分為指令緩存和數(shù)據(jù)緩存2中類(lèi)型的緩存,有些還有一種稱(chēng)為T(mén)LB(translation  lookaside buffer)的緩存,用于實(shí)現(xiàn)虛擬內(nèi)存到物理內(nèi)存的快速轉(zhuǎn)換。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖1 CPU緩存架構(gòu)

CPU并非生而就有緩存,以Intel的CPU為例,其在1992年才在386 CPU中引入L1 Cache。而L3Cache的引入則到2008年才在Core  i3中引入。如圖2是不同存儲(chǔ)類(lèi)型訪問(wèn)時(shí)延的差異,以寄存器訪問(wèn)為1個(gè)時(shí)間單位,那么內(nèi)存的訪問(wèn)在100單位左右。也就是說(shuō),內(nèi)存的訪問(wèn)延時(shí)是寄存器的100倍。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖2 不同存儲(chǔ)訪問(wèn)性能對(duì)比

基于上述原因,在新一代的CPU設(shè)計(jì)當(dāng)中增加了緩存模塊,其目的就是降低訪問(wèn)內(nèi)存數(shù)據(jù)的時(shí)延。使用Cache提升性能的原理在于數(shù)據(jù)訪問(wèn)的局部性特點(diǎn),分別是區(qū)域局部性和時(shí)間局部性。

  • Spatial Locality:對(duì)于剛被訪問(wèn)的數(shù)據(jù),其相鄰的數(shù)據(jù)在將來(lái)被訪問(wèn)的概率高。

  • Temporal Locality:對(duì)于剛被訪問(wèn)的數(shù)據(jù),其本身在將來(lái)被訪問(wèn)的概率高。

操作系統(tǒng)緩存

在操作系統(tǒng)層面很多地方都用到了緩存。而操作系統(tǒng)緩存的原理與CPU緩存基本一致,也就2個(gè)局部特性。在操作系統(tǒng)中***的緩存恐怕就是文件系統(tǒng)的頁(yè)緩存了吧。同樣參考一下圖2,可以看到訪問(wèn)磁盤(pán)的時(shí)延是內(nèi)存時(shí)延的10萬(wàn)倍,因此Linux操作系統(tǒng)中所有文件系統(tǒng)都采用緩存來(lái)提升其讀寫(xiě)性能。

除了上面內(nèi)存訪問(wèn)性能與磁盤(pán)訪問(wèn)性能的差異因素外,另外一個(gè)因素是機(jī)械磁盤(pán)隨機(jī)訪問(wèn)與順序訪問(wèn)的性能差異。以企業(yè)級(jí)SATA磁盤(pán)為例,隨機(jī)寫(xiě)的帶寬不到1MB/s,而順序?qū)懣梢暂p松的達(dá)到100MB/s,差異多達(dá)100倍。產(chǎn)生如此大差異的原因主要是機(jī)械磁盤(pán)讀寫(xiě)數(shù)據(jù)需要尋址,尋址所消耗的時(shí)間占整個(gè)請(qǐng)求時(shí)間的比例很大。

鑒于上述2個(gè)因素的考量,大多數(shù)文件系統(tǒng)都實(shí)現(xiàn)了基于內(nèi)存的緩存。這樣,用戶(hù)對(duì)于文件系統(tǒng)的訪問(wèn)性能得到了大幅的提升。緩存的主要從兩方面提升訪問(wèn)文件系統(tǒng)的性能,一方面是降低對(duì)磁盤(pán)的直接訪問(wèn),另外一個(gè)方面是將對(duì)磁盤(pán)的隨機(jī)訪問(wèn)盡量轉(zhuǎn)換為順序訪問(wèn)。

對(duì)于第一個(gè)方面,文件系統(tǒng)數(shù)據(jù)寫(xiě)入緩存后即認(rèn)為數(shù)據(jù)寫(xiě)入成功,向上層返回結(jié)果。由于訪問(wèn)內(nèi)存的性能是訪問(wèn)磁盤(pán)性能的10萬(wàn)倍。因此,性能自然可以得到極大的提升。如圖3所示的上半部分邏輯,寫(xiě)請(qǐng)求依次將數(shù)據(jù)寫(xiě)入緩存中。對(duì)于讀請(qǐng)求也有類(lèi)似的處理,文件系統(tǒng)中稱(chēng)為預(yù)讀,也就是將數(shù)據(jù)提前讀取到緩存,從而降低訪問(wèn)磁盤(pán)的頻度。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖3 文件系統(tǒng)頁(yè)緩存

對(duì)于第二個(gè)方面,由于緩存的存在,當(dāng)從緩存向磁盤(pán)刷寫(xiě)數(shù)據(jù)的時(shí)候以數(shù)據(jù)的LBA進(jìn)行排序。這樣能夠降低機(jī)械磁盤(pán)尋道的時(shí)間消耗比例,進(jìn)而提升系統(tǒng)整體的性能。

Web前端的緩存

在大系統(tǒng)層面我們以Web應(yīng)用為例介紹從前端到后端的緩存技術(shù)。這主要是因?yàn)樵赪eb開(kāi)發(fā)領(lǐng)域緩存的應(yīng)用最為廣泛,非常方便我們了解問(wèn)題。緩存的技術(shù)領(lǐng)域很廣泛,技術(shù)的難度也很深,本文無(wú)法面面俱到,只是拋磚引玉。

熟悉前端開(kāi)發(fā)的同學(xué)都清楚,一個(gè)網(wǎng)站除了動(dòng)態(tài)的內(nèi)容外,還有很多圖片、JS腳本和CSS樣表等內(nèi)容。而圖片、JS腳本和CSS等內(nèi)容一方面量比較大,另外一方面很少變化,除非網(wǎng)站升級(jí)。鑒于上述原因,我們是否可以將這些內(nèi)容緩存到用戶(hù)的本地磁盤(pán),這樣當(dāng)用戶(hù)再次訪問(wèn)網(wǎng)站是就可以直接從本地磁盤(pán)加載這些內(nèi)容,而不需要從經(jīng)過(guò)浩瀚的網(wǎng)絡(luò)。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖4 瀏覽器頁(yè)面請(qǐng)求

實(shí)質(zhì)上瀏覽器已經(jīng)具備該功能,準(zhǔn)確的說(shuō)不是瀏覽器,而是HTTP協(xié)議。如圖我們打開(kāi)瀏覽器的調(diào)試工具,可以看到請(qǐng)求網(wǎng)頁(yè)的很多內(nèi)容并不會(huì)從服務(wù)器請(qǐng)求,而是從本地磁盤(pán)或者內(nèi)存獲取。如圖4是請(qǐng)求某個(gè)網(wǎng)站頁(yè)面時(shí)部分內(nèi)容的情況。可以看到很大一部分并非從服務(wù)器獲取。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖5 Web瀏覽器緩存處理流程

從本地獲取有2個(gè)非常明顯的好處,一個(gè)是頁(yè)面的響應(yīng)時(shí)間很快,另外一個(gè)是Web服務(wù)器的壓力得到有很大的降低。

在HTTP中是通過(guò)其響應(yīng)消息頭來(lái)確定是否使用緩存中的內(nèi)容的,這個(gè)消息頭就是Cache-control,當(dāng)然還要其它一些字段的配合。整個(gè)緩存處理的流程還是比較復(fù)雜的,需要根據(jù)不同的字段作出判斷,以便確定從哪里獲取內(nèi)容。如圖是整個(gè)瀏覽器的處理流程。

圖6是通過(guò)瀏覽器的調(diào)試工具截獲的某東主頁(yè)的一個(gè)圖片的響應(yīng)頭內(nèi)容,從圖中可以看出里面包含了緩存控制相關(guān)的內(nèi)容。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖6 Web緩存的HTTP協(xié)議

訪問(wèn)鏈路層面

在Web領(lǐng)域一個(gè)請(qǐng)求的鏈路可能會(huì)非常長(zhǎng),比如我們?cè)L問(wèn)一個(gè)美國(guó)的網(wǎng)站,整個(gè)通信鏈路會(huì)跨越整個(gè)太平洋,距離近2萬(wàn)公里。即使是陽(yáng)光也要跑幾十毫秒才能完成這段里程,而網(wǎng)絡(luò)需要經(jīng)過(guò)各種中繼設(shè)備,耗時(shí)將近200ms。試想,一個(gè)網(wǎng)頁(yè)通常有上百個(gè)元素組成(例如圖片,js腳本等),這樣在中國(guó)打開(kāi)一個(gè)美國(guó)的網(wǎng)站將消耗多少時(shí)間?

解決上述問(wèn)題最為有效的技術(shù)就是CDN(Content Delivery  Network,內(nèi)容分發(fā)網(wǎng)絡(luò))技術(shù),該技術(shù)通過(guò)分部在離最終用戶(hù)比較近的邊緣服務(wù)器提供更快的服務(wù)。以上文網(wǎng)站為例,當(dāng)用戶(hù)從中國(guó)訪問(wèn)美國(guó)的網(wǎng)站時(shí),會(huì)先從國(guó)內(nèi)的CDN節(jié)點(diǎn)獲取內(nèi)容,如果沒(méi)有才會(huì)從美國(guó)的源服務(wù)器獲取內(nèi)容。因?yàn)榇蟛糠謨?nèi)容都可以從國(guó)內(nèi)獲取,免去了跨越大洋造成的網(wǎng)絡(luò)延時(shí)。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖7 CDN示意圖

圖7是一個(gè)CDN的示意圖,其中ORIGINAL SERVER就是源服務(wù)器,而EDGE  SERVER就是邊緣服務(wù)器。從圖中可以看出,終端用戶(hù)的訪問(wèn)路徑。

Web后端的緩存

對(duì)于Web服務(wù)來(lái)說(shuō),通常通過(guò)關(guān)系型數(shù)據(jù)來(lái)存儲(chǔ)數(shù)據(jù),而數(shù)據(jù)庫(kù)的數(shù)據(jù)通常存儲(chǔ)在磁盤(pán)中。在高負(fù)載場(chǎng)景下數(shù)據(jù)庫(kù)往往會(huì)成為性能瓶頸。因此,為了提高整個(gè)服務(wù)的承載能力,往往在業(yè)務(wù)服務(wù)器和數(shù)據(jù)庫(kù)之間添加一個(gè)緩存服務(wù)。這個(gè)緩存服務(wù)的原理其實(shí)與上述的CPU緩存或者文件系統(tǒng)緩存有異曲同工之妙。

由于對(duì)于一個(gè)Web服務(wù)來(lái)說(shuō),80%以上的請(qǐng)求都是讀請(qǐng)求,Web緩存的設(shè)計(jì)也正是基于這樣一個(gè)事實(shí)。這些數(shù)據(jù)完全可以緩存到內(nèi)存中,從而減少數(shù)據(jù)庫(kù)訪問(wèn)的負(fù)載。由于緩存承載了絕大多數(shù)的讀請(qǐng)求,因此整個(gè)數(shù)據(jù)庫(kù)的負(fù)載也得到很大的降低。

?緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的

圖8 Web服務(wù)緩存

如圖8是使用Redis緩存的Web服務(wù)架構(gòu),本文只是一個(gè)簡(jiǎn)化的架構(gòu),實(shí)際架構(gòu)要復(fù)雜的多(需要考慮可靠性和承載能力等)。在本架構(gòu)中業(yè)務(wù)服務(wù)器會(huì)根據(jù)請(qǐng)求類(lèi)型優(yōu)先訪問(wèn)緩存,并根據(jù)策略更新緩存內(nèi)容。目前使用最多的緩存應(yīng)該是Redis緩存,大家可以深入了解一下。

緩存在提升系統(tǒng)性能方面的應(yīng)用。當(dāng)然,緩存的應(yīng)用領(lǐng)域比本文涉及的還要多得多。這里只是一個(gè)引子,希望大家能夠得到一些啟發(fā),為自己系統(tǒng)的性能優(yōu)化提供一些思路。

關(guān)于緩存技術(shù)在提升web前后端系統(tǒng)性能方面的應(yīng)用是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI