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

解決系統(tǒng)性能問題的銀彈---緩存技術

運維 系統(tǒng)運維
任何性能問題都可以通過一種方式有效的解決,這種方式就是緩存。不錯,緩存幾乎可以成為解決性能問題的銀彈,百發(fā)百中。緩存的主要目的是降低數(shù)據(jù)訪問延時,實現(xiàn)手段多種多樣,下面對不同種類的緩存進行介紹。

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

CPU的緩存

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

解決系統(tǒng)性能問題的銀彈---緩存技術

圖1 CPU緩存架構

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

解決系統(tǒng)性能問題的銀彈---緩存技術

圖2 不同存儲訪問性能對比

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

  • Spatial Locality:對于剛被訪問的數(shù)據(jù),其相鄰的數(shù)據(jù)在將來被訪問的概率高。
  • Temporal Locality:對于剛被訪問的數(shù)據(jù),其本身在將來被訪問的概率高。

操作系統(tǒng)緩存

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

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

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

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

解決系統(tǒng)性能問題的銀彈---緩存技術

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

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

Web前端的緩存

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

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

解決系統(tǒng)性能問題的銀彈---緩存技術

圖4 瀏覽器頁面請求

實質上瀏覽器已經(jīng)具備該功能,準確的說不是瀏覽器,而是HTTP協(xié)議。如圖我們打開瀏覽器的調(diào)試工具,可以看到請求網(wǎng)頁的很多內(nèi)容并不會從服務器請求,而是從本地磁盤或者內(nèi)存獲取。如圖4是請求某個網(wǎng)站頁面時部分內(nèi)容的情況??梢钥吹胶艽笠徊糠植⒎菑姆掌鳙@取。

解決系統(tǒng)性能問題的銀彈---緩存技術

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

從本地獲取有2個非常明顯的好處,一個是頁面的響應時間很快,另外一個是Web服務器的壓力得到有很大的降低。

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

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

解決系統(tǒng)性能問題的銀彈---緩存技術

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

瀏覽器緩存的內(nèi)容博大精深,很難在本篇文章中解釋完全。如果大家想深入的了解這方面的內(nèi)容,本號推薦大家看看《HTTP權威指南》,理解解釋的非常詳細。

訪問鏈路層面

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

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

解決系統(tǒng)性能問題的銀彈---緩存技術

圖7 CDN示意圖

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

Web后端的緩存

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

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

解決系統(tǒng)性能問題的銀彈---緩存技術

圖8 Web服務緩存

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

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

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2011-09-19 14:30:47

Vista緩存

2010-12-17 10:07:12

Linux命令系統(tǒng)性能

2013-02-28 13:37:59

系統(tǒng)性能調(diào)優(yōu)技術實戰(zhàn)

2018-12-10 15:13:06

緩存系統(tǒng)性能數(shù)據(jù)

2020-09-29 07:59:22

CPU系統(tǒng)性能

2010-04-23 11:44:34

Aix系統(tǒng)

2009-09-29 10:39:04

Linuxlinux系統(tǒng)性能檢測

2023-10-26 08:33:16

Redis管道技術

2024-01-02 08:55:27

Linux緩存系統(tǒng)性能

2010-04-30 15:53:45

Oracle系統(tǒng)性能

2017-08-11 19:13:01

LinuxNmon系統(tǒng)監(jiān)控工具

2011-03-10 14:40:52

2024-11-08 14:27:52

系統(tǒng)設計數(shù)據(jù)庫

2011-03-18 11:13:07

LAMP度量性能

2013-03-20 17:18:07

Linux系統(tǒng)性能調(diào)優(yōu)

2020-03-02 16:25:03

性能系統(tǒng)軟件

2010-04-09 13:26:44

2022-07-26 10:28:00

Linux監(jiān)控命令

2010-05-24 13:29:30

Swap空間

2011-01-05 13:48:55

Linux提高性能
點贊
收藏

51CTO技術棧公眾號