成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

緩存架構:如何減少不必要的計算?

存儲 存儲軟件
互聯網應用的主要挑戰就是在高并發情況下,大量的用戶請求到達應用系統服務器,造成了巨大的計算壓力。

 互聯網應用的主要挑戰就是在高并發情況下,大量的用戶請求到達應用系統服務器,造成了巨大的計算壓力。互聯網應用的核心解決思路就是采用分布式架構,提供更多的服務器,從而提供更多的計算資源,以應對高并發帶來的計算壓力及資源消耗。

[[333222]]

那么有沒有辦法減少到達服務器的并發請求壓力呢?或者請求到達服務器后,有沒有辦法減少不必要的計算,降低服務器的計算資源消耗,盡快返回計算結果給用戶呢?

有,解決的核心就是緩存。

所謂緩存,就是將需要多次讀取的數據暫存起來,這樣在后面,應用程序需要多次讀取的時候,就不必從數據源重復加載數據了,這樣就可以降低數據源的計算負載壓力,提高數據響應速度。

一般說來,緩存可以分成兩種,通讀緩存和旁路緩存。

通讀(read-through)緩存,應用程序訪問通讀緩存獲取數據的時候,如果通讀緩存有應用程序需要的數據,那么就返回這個數據;如果沒有,那么通讀緩存就自己負責訪問數據源,從數據源獲取數據返回給應用程序,并將這個數據緩存在自己的緩存中。這樣,下次應用程序需要數據的時候,就可以通過通讀緩存直接獲得數據了。

通讀緩存在架構中的位置與作用如下圖:

 

緩存架構:如何減少不必要的計算?

 

旁路(cache-aside)緩存,應用程序訪問旁路緩存獲取數據的時候,如果旁路緩存中有應用程序需要的數據,那么就返回這個數據;如果沒有,就返回空(null)。應用程序需要自己從數據源讀取數據,然后將這個數據寫入到旁路緩存中。這樣,下次應用程序需要數據的時候,就可以通過旁路緩存直接獲得數據了。

旁路緩存在架構中位置與作用如下圖:

 

緩存架構:如何減少不必要的計算?

 

通讀緩存

互聯網應用中主要使用的通讀緩存是 CDN 和反向代理緩存。

CDN(Content Delivery Network)即內容分發網絡。我們上網的時候,App 或者瀏覽器想要連接到互聯網應用的服務器,需要網絡服務商,比如移動、電信這樣的服務商為我們提供網絡服務,建立網絡連接才可以上網。

而這些服務商需要在全國范圍內部署骨干網絡、交換機機房才能完成網絡連接服務,這些交換機機房可能會離用戶非常近,那么互聯網應用能不能在這些交換機機房中部署緩存緩存服務器呢?這樣,用戶就可以近距離獲得自己需要的數據,既提高了響應速度,又節約了網絡帶寬和服務器資源。

當然可以。這個部署在網絡服務商機房中的緩存就是 CDN,因為距離用戶非常近,又被稱作網絡連接的第一跳。目前很多互聯網應用大約 80% 以上的網絡流量都是通過 CDN 返回的。

 

緩存架構:如何減少不必要的計算?

 

CDN 只能緩存靜態數據內容,比如圖片、CSS、JS、HTML 等內容。而動態的內容,比如訂單查詢、商品搜索結果等必須要應用服務器進行計算處理后才能獲得。因此,互聯網應用的靜態內容和動態內容需要進行分離,靜態內容和動態內容部署在不同的服務器集群上,使用不同的二級域名,即所謂的動靜分離,一方面便于運維管理,另一方面也便于 CDN 進行緩存,使 CDN 只緩存靜態內容。

反向代理緩存也是一種通讀緩存。我們上網的時候,有時候需要通過代理上網,這個代理是代理我們的客戶端上網設備。而反向代理則代理服務器,是應用程序服務器的門戶,所有的網絡請求都需要通過反向代理才能到達應用程序服務器。既然所有的請求都需要通過反向代理才能到達應用服務器,那么在這里加一個緩存,盡快將數據返回給用戶,而不是發送給應用服務器,這就是反向代理緩存。

 

緩存架構:如何減少不必要的計算?

 

用戶請求到達反向代理緩存服務器,反向代理檢查本地是否有需要的數據,如果有就直接返回,如果沒有,就請求應用服務器,得到需要的數據后緩存在本地,然后返回給用戶。

旁路緩存

CDN 和反向代理緩存通常會作為系統架構的一部分,很多時候對應用程序是透明的。而應用程序在代碼中主要使用的是對象緩存,對象緩存是一種旁路緩存。

不管是通讀緩存還是旁路緩存,緩存通常都是以

對于

程序中使用的對象緩存,可以分成兩種。一種是本地緩存,緩存和應用程序在同一個進程中啟動,使用程序的堆空間存放緩存數據。本地緩存的響應速度快,但是緩存可以使用的內存空間相對比較小,但是對于大型互聯網應用所需要緩存的數據通以 T 計,這時候就要使用遠程的分布式緩存了。

分布式緩存是指將一組服務器構成一個緩存集群,共同對外提供緩存服務,那么應用程序在每次讀寫緩存的時候,如何知道要訪問緩存集群中的哪臺服務器呢?我們以 Memcached為例,看看分布式緩存的架構:

 

緩存架構:如何減少不必要的計算?

 

Memcached 將多臺服務器構成一個緩存集群,緩存數據存儲在每臺服務器的內存中。事實上,使用緩存的應用程序服務器通常也是以集群方式部署的,每個程序需要依賴一個Memcached 的客戶端 SDK,通過 SDK 的 API 訪問 Memcached 的服務器。

應用程序調用 API,API 調用 SDK 的路由算法,路由算法根據緩存的 key 值,計算這個key 應該訪問哪臺 Memcached 服務器,計算得到服務器的 IP 地址和端口號后,API 再調用 SDK 的通信模塊,將

那么,路由算法又是如何計算得到 Memcached 的服務器 IP 端口呢?比較簡單的一種方法,和 Hash 算法一樣,利用 key 的 Hash 值對服務器列表長度取模,根據余數就可以確定服務器列表的下標,進而得到服務器的 IP 和端口。

緩存注意事項

使用緩存可以減少不必要的計算,能夠帶來三個方面的好處:

  1. 緩存的數據通常存儲在內存中,距離使用數據的應用也更近一點,因此相比從硬盤上獲取,或者從遠程網絡上獲取,它獲取數據的速度更快一點,響應時間更快,性能表現更好。
  2. 緩存的數據通常是計算結果數據,比如對象緩存中,通常存放經過計算加工的結果對象,如果緩存不命中,那么就需要從數據庫中獲取原始數據,然后進行計算加工才能得到結果對象,因此使用緩存可以減少 CPU 的計算消耗,節省計算資源,同樣也加快了處理的速度。
  3. 通過對象緩存獲取數據,可以降低數據庫的負載壓力;通過 CDN、反向代理等通讀緩存獲取數據,可以降低服務器的負載壓力。這些被釋放出來的計算資源,可以提供給其他更有需要的計算場景,比如寫數據的場景,間接提高整個系統的處理能力。

但是緩存也不是萬能的,如果不恰當地使用緩存,也可能會帶來問題。

首先就是數據臟讀的問題,緩存的數據來自數據源,如果數據源中的數據被修改了,那么緩存中的數據就變成臟數據了。

主要解決辦法有兩個,一個是過期失效,每次寫入緩存中的數據都標記其失效時間,在讀取緩存的時候,檢查數據是否已經過期失效,如果失效,就重新從數據源獲取數據。緩存失效依然可能會在未失效時間內讀到臟數據,但是一般的應用都可以容忍較短時間的數據不一致,比如淘寶賣家更新了商品信息,那么幾分鐘數據沒有更新到緩存,買家看到的還是舊數據,這種情況通常是可以接受的,這時候,就可以設置緩存失效時間為幾分鐘。

另一個辦法就是失效通知,應用程序更新數據源的數據,同時發送通知,將該數據從緩存中清除。失效通知看起來數據更新更加及時,但是實踐中,更多使用的還是過期失效。

此外,并不是所有數據使用緩存都有意義。在互聯網應用中,大多數數據訪問都是有熱點的,比如熱門微博會被更多閱讀,熱門商品會被更多瀏覽。那么將這些熱門的數據保存在緩存中是有意義的,因為緩存通常使用內存,存儲空間比較有限,只能存儲有限的數據,熱門數據存儲在緩存中,可以被更多次地讀取,緩存效率也比較高。

相反,如果緩存的數據沒有熱點,寫入緩存的數據很難被重復讀取,那么使用緩存就不是很有必要了。

總結

緩存是優化軟件性能的殺手锏,任何需要查詢數據、請求數據的場合都可以考慮使用緩存。緩存幾乎是無處不在的,程序代碼中可以使用緩存,網絡架構中可以使用緩存,CPU、操作系統、虛擬機也大量使用緩存,事實上,緩存最早就是在 CPU 中使用的。對于一個典型的互聯網應用而言,使用緩存可以解決絕大部分的性能問題,如果需要優化軟件性能,那么可以優先考慮哪里可以使用緩存改善性能。

除了本文提到的系統架構緩存外,客戶端也可以使用緩存,在 App 或者瀏覽器中緩存數據,甚至都不需要消耗網絡帶寬資源,也不會消耗 CDN、反向代理的內存資源,更不會消耗服務器的計算資源。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2018-08-24 11:52:15

成本公共云云服務

2023-05-04 07:06:25

微軟Windows

2011-02-18 11:02:28

2017-06-26 09:55:31

前端后端開發

2011-04-18 14:35:53

2011-04-18 14:27:50

2015-11-25 13:37:52

磁盤空間LinuxUbuntu

2011-08-18 09:51:21

2024-01-05 07:41:08

Go語言語句

2010-05-21 14:09:41

2016-08-05 16:13:50

Android性能優化對象

2020-12-18 10:01:11

GitHub開源Cookies

2011-08-18 09:46:01

2011-08-10 11:12:03

2016-08-18 15:54:08

云存儲云計算

2010-05-20 17:36:09

IIS安全

2009-11-26 09:52:05

jQuery選擇器

2024-10-28 08:00:00

微服務架構開發

2021-02-10 15:54:48

Windows 10Windows微軟

2009-10-22 09:25:54

Linux系統服務操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品亚洲一区二区三区 | 亚洲精品乱码久久久久久黑人 | 欧美黑人体内she精在线观看 | 日本福利在线 | 午夜免费在线观看 | 久久综合久久久 | 碰碰视频| 免费在线a视频 | 高清国产午夜精品久久久久久 | 精品一区电影 | 中文字字幕在线中文乱码范文 | 国产福利在线 | 日韩高清一区 | 九九精品在线 | 久久91| 国产精品国产 | 中文字幕一区二区三区四区五区 | 草草影院ccyy | 99免费视频 | 国产精品久久久久久久久 | 国产一级片一区二区三区 | 91精品国产乱码久久久久久久久 | 蜜桃视频一区二区三区 | 天天插天天舔 | 精品av天堂毛片久久久借种 | 亚洲视频免费在线观看 | 午夜影院网站 | 成人精品鲁一区一区二区 | 人人玩人人添人人澡欧美 | 日韩电影在线 | 欧美成人一区二免费视频软件 | 老牛影视av一区二区在线观看 | 亚洲 欧美 日韩 精品 | 91精品久久久久久久99 | 欧美精品一区二区三区一线天视频 | 亚洲日韩中文字幕 | 国产高清在线精品一区二区三区 | 久久久久久久综合 | 欧美激情综合网 | 久在线| 国产综合久久久久久鬼色 |