tft每日頭條

 > 科技

 > hyper shot處理技術

hyper shot處理技術

科技 更新时间:2025-02-10 09:23:31

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

CPU的緩存

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)1

圖1 CPU緩存架構

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)2

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

基于上述原因,在新一代的CPU設計當中增加了緩存模塊,其目的就是降低訪問内存數據的時延。使用Cache提升性能的原理在于數據訪問的局部性特點,分别是區域局部性和時間局部性。

  • Spatial Locality:對于剛被訪問的數據,其相鄰的數據在将來被訪問的概率高。
  • Temporal Locality:對于剛被訪問的數據,其本身在将來被訪問的概率高。
操作系統緩存

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

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

鑒于上述2個因素的考量,大多數文件系統都實現了基于内存的緩存。這樣,用戶對于文件系統的訪問性能得到了大幅的提升。緩存的主要從兩方面提升訪問文件系統的性能,一方面是降低對磁盤的直接訪問,另外一個方面是将對磁盤的随機訪問盡量轉換為順序訪問。

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)3

圖3 文件系統頁緩存

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

Web前端的緩存

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

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)4

圖4 浏覽器頁面請求

實質上浏覽器已經具備該功能,準确的說不是浏覽器,而是HTTP協議。如圖我們打開浏覽器的調試工具,可以看到請求網頁的很多内容并不會從服務器請求,而是從本地磁盤或者内存獲取。如圖4是請求某個網站頁面時部分内容的情況。可以看到很大一部分并非從服務器獲取。

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)5

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

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

在HTTP中是通過其響應消息頭來确定是否使用緩存中的内容的,這個消息頭就是Cache-control,當然還要其它一些字段的配合。整個緩存處理的流程還是比較複雜的,需要根據不同的字段作出判斷,以便确定從哪裡獲取内容。如圖是整個浏覽器的處理流程。

圖6是通過浏覽器的調試工具截獲的某東主頁的一個圖片的響應頭内容,從圖中可以看出裡面包含了緩存控制相關的内容。

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)6

圖6 Web緩存的HTTP協議

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

訪問鍊路層面

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

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)7

圖7 CDN示意圖

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

Web後端的緩存

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

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

hyper shot處理技術(解決系統性能問題的銀彈---緩存技術)8

圖8 Web服務緩存

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

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

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved