區域性性原理

2021-10-17 06:49:42 字數 1791 閱讀 7531

平常在服務端軟體開發中,通常會把資料儲存在資料庫裡,服務端遇到的效能瓶頸往往發生在訪問資料庫的時候,在資料庫前通過redis加資料快取是常見的效能優化方式。

如何判定新增快取的策略一定是有效的呢?

不同的儲存器之間,訪問速度、**和容量都有幾十乃至上千倍的差異。

在效能和**的巨大差異,能不能既享受cpu cache的速度,又享受記憶體、硬碟巨大的容量和低廉的**呢?

可以利用儲存器中資料的區域性性原理來制定管理和訪問資料的策略。這個區域性性原理包括時間區域性性和空間區域性性。

有了時間區域性性和空間區域性性,就可以把訪問次數多的資料,放在貴但是快一些的儲存器裡,組合使用記憶體、ssd硬碟、以及hdd硬碟,可以最低成本提供實際需要的資料儲存、管理和訪問的需求。

假設現在需要做乙個亞馬遜這樣的電商**,假設有6億件商品,每件商品需要4m的儲存空間,那麼一共需要2400tb的資料儲存。

這裡用的就是時間侷限性,把使用者訪問過的資料放到記憶體中,一旦記憶體裡面放不下了,就把最長時間沒有在記憶體中被訪問過的資料,從記憶體中移走,這個就是lru快取演算法。越是熱門的商品,越容易在記憶體裡找到,更好的利用記憶體的隨機訪問效能。

快取命中率:訪問的資料中,可以在快取中找到的,佔的比例。

記憶體的隨機訪問請求需要 100ns,在極限情況下,記憶體可以支援 1000 萬次隨機訪問。我們用了 24tb 記憶體,如果 8g 一條的話,意味著有 3000 條記憶體,可以支援每秒 300 億次( = 24tb/8gb × 1s/100ns)訪問。以亞馬遜 2017 年 3 億的使用者數來看,我們估算每天的活躍使用者為 1 億,這 1 億使用者每人平均會訪問 100 個商品,那麼平均每秒訪問的商品數量,就是 12 萬次。

但是如果資料沒有命中記憶體,那麼對應的資料請求就要訪問到 hdd 磁碟了。剛才的圖表中,我寫了,一塊 hdd 硬碟只能支撐每秒 100 次的隨機訪問,2400tb 的資料,以 4tb 一塊磁碟來計算,有 600 塊磁碟,也就是能支撐每秒 6 萬次( = 2400tb/4tb × 1s/10ms )的隨機訪問。

這就意味著,所有的商品訪問請求,都直接到了 hdd 磁碟,hdd 磁碟支撐不了這樣的壓力。我們至少要 50% 的快取命中率,hdd 磁碟才能支撐對應的訪問次數。不然的話,我們要麼選擇新增更多數量的 hdd 硬碟,做到每秒 12 萬次的隨機訪問,或者將 hdd 替換成 ssd 硬碟,讓單個硬碟可以支援更多的隨機訪問請求。

當然,這裡我們只是乙個簡單的估算。在實際的應用程式中,檢視乙個商品的資料可能意味著不止一次的隨機記憶體或者隨機磁碟的訪問。對應的資料儲存空間也不止要考慮資料,還需要考慮維護資料結構的空間,而快取的命中率和訪問請求也要考慮均值和峰值的問題。

通過這個估算過程,你需要理解,如何進行儲存器的硬體規劃。你需要考慮硬體的成本、訪問的資料量以及訪問的資料分布,然後根據這些資料的估算,來組合不同的儲存器,能用盡可能低的成本支撐所需要的伺服器壓力。而當你用上了資料訪問的區域性性原理,組合起了多種儲存器,你也就理解了怎麼基於儲存器層次結構,來進行硬體規劃了。

計算機儲存器層次結構中最重要的乙個優化思路,就是區域性性原理。

對於資料的訪問會存在兩個區域性性

區域性性的存在使應用開發中可以使用快取這個有利的**。

通過亞馬遜這個例子,我們可以看到,我們可以通過快速估算的方式,來判斷這個新增快取的策略是否能夠滿足我們的需求,以及在估算的伺服器負載的情況下,需要規劃多少硬體裝置。這個「估算 + 規劃」的能力,是每乙個期望成長為架構師的工程師,必須掌握的能力。

區域性性原理

區域性性原理 cpu訪問 儲存器時,無論是訪問指令還是訪問資料,所訪問的 儲存單元 都趨於聚集在乙個較小的連續區域中。三種不同型別的區域性性 時間區域性性 temporal locality 如果乙個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問。程式迴圈 堆疊等是產生時間區域性性的原因。順序區...

區域性性原理

區域性性通常有兩種不同的形式 時間區域性性和空間區域性性。時間區域性性 在乙個具有良好的時間區域性性的程式中,被訪問過一次的儲存器位置很可能在不遠的將來會被再次訪問。空間區域性性 在乙個具有良好空間區域性性的程式中,如果乙個儲存器位置被訪問了一次,那麼程式很可能在不遠的將來訪問附近的乙個儲存器位置。...

區域性性原理

區域性性原理 cpu訪問儲存器時,無論是訪問指令還是訪問資料,所訪問的儲存單元都趨於聚集在乙個較小的連續區域中。計算機儲存結構記憶體,一級快取,二級快取,暫存器等。快取是用來存放從記憶體中取出的指令和資料,用來提高cpu訪問記憶體的速度 而暫存器是用來存放cpu在執行指令時所需要的運算元或執行結果暫...