讀構建可擴展分散式系統:方法與實踐05分散式緩存

来源:https://www.cnblogs.com/lying7/p/18414861
-Advertisement-
Play Games

1. 分散式緩存 1.1. 緩存存在於應用程式的許多地方 1.1.1. 行應用程式的CPU具有高速多級硬體緩存,可以減少相對較慢的主記憶體訪問 1.1.2. 資料庫引擎可以利用主記憶體來緩存數據存儲的內容,這樣在許多情況下查詢就可以不用訪問速度相對較慢的磁碟 1.2. 分散式緩存是可擴展系統的重要組成部 ...


1. 分散式緩存

1.1. 緩存存在於應用程式的許多地方

  • 1.1.1. 行應用程式的CPU具有高速多級硬體緩存,可以減少相對較慢的主記憶體訪問

  • 1.1.2. 資料庫引擎可以利用主記憶體來緩存數據存儲的內容,這樣在許多情況下查詢就可以不用訪問速度相對較慢的磁碟

1.2. 分散式緩存是可擴展系統的重要組成部分

  • 1.2.1. 緩存使耗時的查詢和計算結果能夠在後續請求中低成本地重用

  • 1.2.2. 由於不必為每個請求重建緩存結果,系統的容量增加了,並且可以擴展來處理更大的工作負載

1.3. 應用緩存依賴業務邏輯,業務邏輯使用分散式緩存將預計算結果的緩存和訪問結合在一起

1.4. Web緩存充分利用HTTP協議中內置的機制在網路提供的基礎設施中緩存結果

1.5. 緩存是任何可擴展分佈系統的重要組成部分

  • 1.5.1. 緩存將許多客戶端請求的信息存儲在記憶體中,並利用這些信息為客戶端請求提供服務

1.6. 使用分散式緩存的應用緩存是可擴展系統中最常用的緩存方法

1.7. 互聯網還有內建的多級緩存基礎設施

  • 1.7.1. HTTP緩存使用得當的話可以顯著減少下游服務和資料庫的請求負載

1.8. 緩存是軟體和系統的一個成熟領域

1.9. CDN本身就是一個複雜的、針對供應商的主題

  • 1.9.1. 它們適用於用戶群在地理上分散、內容需要快速交付的富媒體網站

2. 應用緩存

2.1. 應用緩存旨在通過將查詢和計算的結果存儲在記憶體中來提高請求響應能力,以便為後續的請求提供服務

  • 2.1.1. 緩存可以減輕資料庫讀取流量的負擔,因為許多查詢都可以直接從緩存中獲取結果

  • 2.1.2. 緩存最終效果是減少了服務和資料庫的計算負擔,併為更多請求創造了空間或容量

2.2. 緩存需要額外的資源和成本來存儲緩存結果

  • 2.2.1. 與升級資料庫和服務節點以應對更高的請求負載相比,設計良好的緩存方案成本較低

2.3. 應用級緩存採用專用的分散式緩存引擎

  • 2.3.1. 主流技術

  • 2.3.1.1. memcached

  • 2.3.1.2. Redis

  • 2.3.1.3. 兩者本質上都是分散式記憶體哈希表,為存儲代表資料庫查詢結果或下游服務API調用結果的任意數據(字元串、對象)而設計

2.4. 緩存常見的使用場景是存儲用戶會話數據、動態網頁和資料庫查詢結果

2.5. 緩存命中

  • 2.5.1. 如果可用,它會將緩存的內容作為結果返回

  • 2.5.2. 緩存命中率應該是多少並沒有一個硬性的規定,因為它取決於構建緩存內容的成本和緩存項的更新頻率

  • 2.5.2.1. 理想的緩存設計應該是讀取頻率遠高於更新頻率

2.6. 如果數據不在緩存中,即緩存未命中,服務將從資料庫中查詢所請求的數據並將查詢結果寫入緩存,後續的客戶端請求無須查詢資料庫即可使用這些數據

  • 2.6.1. 當項目需要經常更新時,緩存未命中的成本可能會抵消緩存帶來的好處

2.7. 當緩存值有效時,所有請求都會使用它

  • 2.7.1. 無須為每個請求調用執行耗時的電梯等待時間的計算

2.8. 使用TTL之類的過期時間是使緩存內容失效的一種常用方法

  • 2.8.1. 確保了服務不會向客戶端提供過期的結果

  • 2.8.2. 使系統能夠對緩存內容進行一些控制,緩存的空間通常是有限的

2.9. 如果緩存項沒有定期刷新,緩存將會填滿

  • 2.9.1. 在這種情況下,緩存將採用最近最少使用或最少訪問之類的策略來選擇要剔除的緩存條目併為更新、更及時的結果騰出空間

2.10. 應用緩存可以顯著提高吞吐量、減少延遲並提高客戶端應用程式的響應能力

2.11. 一般的設計原則是最大化緩存命中率和最小化緩存未命中率

  • 2.11.1. 當發生緩存未命中時,必須通過查詢資料庫或下游服務來滿足請求

  • 2.11.2. 然後可以將請求的結果寫入緩存,用於後續的訪問

2.12. 應用級緩存也被稱為旁路緩存(cache-aside)模式

  • 2.12.1. 如果所需的結果在緩存中可用,則應用程式代碼會高效地繞過數據存儲系統

  • 2.12.2. 旁路緩存策略的一個顯著優勢是它對緩存故障更具彈性

  • 2.12.3. 在緩存不可用的情況下,所有請求基本上都當作緩存未命中來處理

  • 2.12.4. 擴展Redis和memcached之類的旁路緩存平臺非常簡單,得益於其簡單的分散式哈希表模型

  • 2.12.5. 旁路緩存模式是大規模可擴展系統使用的主要方法

2.13. 緩存提供了“魔法”來確保緩存與後端存儲系統進行適當的交互

2.14. NCache支持提供者介面(provider interface)由應用程式實現

  • 2.14.1. 介面會在通讀緩存未命中和通寫緩存寫入時自動調用

  • 2.14.2. 通讀、通寫和後寫策略需要這樣一種緩存技術,該技術可以通過特定應用的處理程式進行擴充,以便在應用程式訪問緩存時執行資料庫的讀取和寫入

3. 通讀緩存

3.1. 應用通過訪問緩存來滿足所有請求

3.2. 如果所需的數據在緩存中不可用,則調用載入器來訪問數據系統並將結果載入到緩存中以供應用使用

4. 通寫緩存

4.1. 應用總是將更新寫入緩存

4.2. 當緩存更新時,將調用寫入器將新的緩存值寫入資料庫

4.3. 當資料庫更新後,應用可以完成請求

5. 後寫緩存

5.1. 回寫緩存

5.2. 與通寫緩存類似,只是應用不等待將值從緩存寫入資料庫

5.3. 這種模式是以可能丟失更新(如果緩存伺服器在資料庫更新完成之前崩潰)為代價來提高請求響應能力

5.4. 是大多數資料庫引擎內部使用的策略

6. Web緩存

6.1. Web緩存會在定義的時間段記憶體儲給定資源(例如,網頁或圖像)的副本

6.2. 由於緩存在物理上更靠近客戶端,因此請求的延遲會更低

6.3. 邊緣緩存,也叫內容分髮網絡(CDN)

  • 6.3.1. 位於全球多個戰略地理位置

  • 6.3.2. 可以緩存靠近客戶端的頻繁訪問的數據

  • 6.3.3. 邊緣緩存由CDN提供商在全球範圍內部署

  • 6.3.4. Akamai是最早的CDN提供商,擁有2000多個站點,併在全球提供高達30%的互聯網流量

  • 6.3.5. 對於擁有全球用戶的富媒體站點,邊緣緩存是必不可少的

6.4. 緩存通常只存儲GET請求的結果,緩存鍵是與GET關聯的URI

  • 6.4.1. 任何具有所請求資源副本的緩存都可以響應請求

6.5. Cache-Control

  • 6.5.1. 客戶端請求和服務響應可以使用Cache-Control HTTP標頭來定義緩存應該如何利用感興趣的資源

6.6. Expires和Last-Modified HTTP標頭與max-age指令互相配合以控制緩存數據的保留時間

  • 6.6.1. 緩存存儲的資源是有限的

  • 6.6.2. 當請求訪問一個有效資源時,緩存會用本地存儲的結果提供服務,而無須聯繫源伺服器

6.7. Etag

  • 6.7.1. 可用於控制緩存項新鮮度的指令

  • 6.7.2. Etag是一個不透明的值,Web緩存可以使用它來檢查緩存的資源是否仍然有效

6.8. Web緩存如果能有效使用,可以顯著減少延遲並節省網路帶寬,對於圖像和文檔等大型項目尤其明顯

6.9. Web緩存對部署靜態數據(圖像、視頻和音頻流)以及不經常變化的數據(如天氣報告)最為有效

  • 6.9.1. Squid和Varnish等代理緩存廣泛部署在互聯網上

6.10. HTTP緩存與代理和邊緣緩存相結合所提供的強大功能是構建可擴展應用的寶貴工具


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. Performance API 的用處 Performance API 是瀏覽器中內置的一組工具,用於測量和記錄頁面載入和執行過程中的各類性能指標。它的主要用處包括: 監控頁面資源載入:跟蹤頁面中的資源(如 CSS、JavaScript、圖片)的載入時間。 分析頁面載入時間:從導航到頁面完全渲 ...
  • 此教程適應於以webpack,vue-cli,vite等腳手架構建的vue項目。當然,vue2和vue3都是可以滴。 1. 前提:你的代碼庫已經提交到Github上 如果沒有的話,請到GitHub上新建倉庫,並把你本地的項目提交到GitHub上新建的倉庫里。 具體方法,可以參考我的博客 Git使用記 ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:霽明 什麼是CORS CORS(跨域資源共用)是一種基於HTTP頭的機制,可以放寬瀏覽器的同源策略,實現不同功能變數名稱網站之間的通信。 前置知識 同源定義:協議、域 ...
  • 1、使用 Object.entries() 和 Object.fromEntries() // 將對象轉換為數組並轉換回來,以便於操作 const person = { name: 'jack', age: 20 }; const entries = Object.entries(person); ...
  • title: Nuxt Kit 的使用指南:從載入到構建 date: 2024/9/12 updated: 2024/9/12 author: cmdragon excerpt: 摘要:本文詳細介紹了Nuxt Kit的使用方法,包括如何使用loadNuxt載入配置、buildNuxt進行項目構建、l ...
  • 安裝vite npm create vite@latest 你還可以通過附加的命令行選項直接指定項目名稱和你想要使用的模板。例如,要構建一個 Vite + Vue + ts 項目,運行: # npm 7+,需要添加額外的 --: npm create vite@latest my-vue-app - ...
  • codecv —— 一款製作簡歷的工具,幫助你以 Markdown 的簡潔語法快速編寫生成專業的簡歷,並支持轉為 PDF 保存,還提供了海量模板。 ...
  • title: Nuxt Kit 的使用指南:模塊創建與管理 date: 2024/9/11 updated: 2024/9/11 author: cmdragon excerpt: 摘要:本文是關於Nuxt Kit的使用指南,重點介紹瞭如何使用defineNuxtModule創建自定義模塊及inst ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...