設計藝術~緩存結構設計

背景

面對高QPS場景的業務,不得不考慮對一些數據做緩存設計,常見的緩存設計有這些:DB Proxy緩存、分布式緩存、Localcache緩存。
在考慮加緩存的背景下不考慮數據的一致性,都是瞎扯,所以我們再定義一下數據的一致性場景:強制一致性、最終一致性。本質上只要加了緩存就會破壞數據的一致性,最起碼破壞了數據的強一致性。但在不同的緩存選擇下,最終一致性的延遲效果是完全不同的。
在這里插入圖片描述

DB Proxy緩存

DB proxy 緩存是比較簡單的一種緩存,它的拓展性和策略手段也偏少,基本上只能做某 key 某 SQL 超過一定 QPS 之后,做一些結果緩存。緩存時間可以設置個1秒、2秒、3秒,按照你的業務需求去做決定。但本質上它的策略手段因為太單一,你也沒有辦法去做一些強制的刪除或強制的更新。所以優勢就在于簡單,純配置就可以。劣勢就在于策略手段太過單一,維護熱 key 緩存的 key 的手段太過單一。而且 DB proxy 緩存一般也不能承擔太多的緩存任務,只有一些非常非常高的 key 比如說一些 key 的 QPS 超過了20K 30K 才會考慮對著一個 k 去開啟。而且是得手動針對某一個 key 去開啟,最好不要全局去開啟,避免一些不必要的問題。

分布式緩存

分布式緩存應該是最常用的,最熟悉的應該就是 Redis 它可以把 DB 的一些查詢結果做一些緩存。效果策略手段也是最好的。我們可以做一些策略化的過期時間,可以針對某一個 key 或者批量針對某一批 key 去做緩存,由業務代碼去設定,靈活性更好。缺點的話就在于它對于超高的 QPS 的 key 這個超高怎么定義呢?就從 Redis 的單 key 的承載能力去做定義。一個 key 如果超過了5000QPS 也就是5K 多流量,可以認為是熱 key 那超過10K 也就是1萬的 QPS 那基本上就靠 Redis 去緩存,也是不可靠的,會引起單分片的 CPU 問題。靠分布式緩存就不太好解決了。

Localcache緩存

對于前面提到的,如果某一個 key 超過了10K 的 QPS 就需要考慮去做 local cache 本地緩存。本地緩存優勢就在于它可以本地區直接返回結果,對吞吐量、響應的效率、速度都有非常好的支持。但它的缺陷就在于維護成本太高。因為它會消耗機器的實際內存,我們內存資源是非常寶貴的,所以一般 local CACHE 會有一個內存上限,也會有很多的淘汰算法。再一個就是使用分布式緩存的話,因為它是分布式的,你可以去做一些強制更新,緩存更新。我們常見的延遲雙刪這些技術點,都是為了保證一致性。但 local CACHE 的話,它就不太好去做這些事情了。也就是說,local CACHE 緩存的 key 它沒有辦法去全量的刪除,在它過期時間之前。這也是它的一個缺點。

選型

所以選型的話,如果一個數據是超高 QPS 超過了10K 甚至以上,并且你認為它的一致性還好,就比如是一些點贊的數值啊。直播間人數啊這些完全可以考慮去通過 local cache 去做承載,但要設置好緩存這個 key 的條件和過期時間以及淘汰策略。避免因為 local CACHE 導致整個機器的內存使用消耗太高。最常用的,最實用的應該就是分布式緩存。它可以做一些像延遲雙刪這樣的一些技術手段,去保證一致性,也可以使用一些很多的算法去策略手段去做緩存,比如把時間打散,比如說某一個 key 去設置5秒還是3秒過期,由業務代碼去決定,靈活性是最好的。DB proxy 緩存的話就比較的簡單,可以為了在發現某一個 key 對機器產生影響了之后,主動的為這個 key 開啟緩存來,算是一個運維能力去保護 DB也就是說,得你主動的去發現某 key 特別超高。然后去開啟。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921680.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后端開發技術棧

后端開發技術棧核心技術內容平臺 (Content Platform)電商 (E-Commerce)金融科技 (FinTech) / 支付物聯網 (IoT - Internet of Things)游戲后端 (Game Backend)社交平臺搜索平臺企業級應用開發音視頻處理后端地圖與地理位置服務DevOps大數據開發大模型應用開發智能合約開發核心技…

【ICCV2025】計算機視覺|即插即用|ESC:顛覆Transformer!超強平替,ESC模塊性能炸裂!

論文地址:https://arxiv.org/pdf/2503.06671 代碼地址:https://github.com/dslisleedh/ESC 關注UP CV縫合怪,分享最計算機視覺新即插即用模塊,并提供配套的論文資料與代碼。 https://space.bilibili.com/473764881 摘要 本研究…

【面試場景題】如何進行高并發系統的性能測試?

文章目錄一、明確測試目標與指標二、測試環境搭建三、測試工具選型四、測試場景設計五、執行測試與監控六、瓶頸分析與調優七、測試報告與迭代總結高并發系統的性能測試是驗證系統在極限流量下是否能保持穩定運行的關鍵環節,需要結合場景設計、工具選型、指標監控、…

攻防世界ReverseMe-120

這道題比較經典,涉及三個知識點,所以記錄一下。首先給了一個文件,detect it easy看了下,是32位exe。放入ida中,找下main函數,F5反編譯看一下偽代碼。int __cdecl main(int argc, const char **argv, const …

小白也能看懂,HTTP中的文件上傳與下載到底發生了什么?

HTTP 文件傳輸協議解析:上傳與下載 這份文檔會用最簡單的方式,帶你了解 HTTP 協議是如何處理文件下載和上傳的。我們會專注于協議本身,看看客戶端(比如你的瀏覽器)和服務端(網站服務器)之間到底…

快速構建數據集-假數據(生成劃分)

快速構建數據集-假數據1、torch.randn(?)2、HuggingFace Datasets(?)🔹1. 從字典生成🔹2. 從 pandas.DataFrame 生成🔹3. 批量生成“業務型”假數據(配合 Faker)&#…

[修訂版]Xenomai/IPIPE源代碼情景解析

[修訂版]Xenomai/IPIPE源代碼情景解析 第一章:Interrupt Pipeline介紹 1.1 I-pipe與Xenomai1.2 I-pipe核心概念1.3 拉取I-pipe代碼 第二章:I-pipe對ARM64異常的改造 2.1 ARM64中斷機制與異常處理2.2 EL0_IRQ 中斷改造之入口2.3 EL0_IRQ 中斷改造之中斷處…

【Qt開發】按鈕類控件(三)-> QCheckBox

目錄 1 -> 概述 2 -> 核心特性 2.1 -> 狀態管理 2.2 -> 信號機制 2.3 -> 外觀與文本 3 -> 應用場景 4 -> 代碼示例 5 -> 總結 1 -> 概述 QCheckBox 是 Qt 框架中提供的一個基礎控件,用于實現復選框功能。它允許用戶在兩種或三種…

在新發布的AI論文中 pytorch 和tensorflow 的使用比例

根據 2025 年最新的學術動態和行業報告,PyTorch 在 AI 論文中的使用比例已占據絕對主導地位,而 TensorFlow 的占比持續下降。以下是基于多個權威來源的綜合分析: 一、頂級會議中的框架分布 在 NeurIPS、ICML、CVPR 等頂級學術會議中&#xff…

3DXML格式是什么?用什么軟件可以打開?

3DXML 是一種開放標準的數據交換格式,主要用于三維 CAD(計算機輔助設計)模型的存儲和交換。它是由 Dassault Systmes 開發的一種文件格式,常用于 CATIA V6 和其他支持該格式的應用程序中。3DXML 文件可以包含完整的 3D 模型數據&a…

9月8日星期一今日早報簡報微語報早讀

9月8日星期一,農歷七月十七,早報#微語早讀。1、中國火箭與月亮同框,遙感四十號03組衛星發射成功;2、湖南郴州開發區改革:編制數由815名減至680名,精簡16.6%;3、水利部對廣東、廣西啟動洪水防御Ⅳ…

windows系統搭建MQTT服務器

1、MQTT 協議 MQTT協議:實現MQTT協議需要客戶端和服務器端通訊完成。 三種身份: 發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。 消息的發布者和訂閱者都是客戶端,消息代理是服務器,消息發布者可以同時是訂閱者。 MQTT&am…

從 GPT 到 LLaMA:解密 LLM 的核心架構——Decoder-Only 模型

🔥從 GPT 到 LLaMA:解密 LLM 的核心架構——Decoder-Only 模型 “為什么所有大模型(LLM)都長一個樣?” 因為它們都有一個共同的“基因”——Decoder-Only 架構。 在前面兩節中,我們學習了: BER…

Codeforces Round 1047 (Div. 3)

由于最近這三天的數學建模,讓我這個精力本來就不多的AI手更加力竭了,沒注意到昨晚的cf,所以今天來補題了。 比賽連接:比賽傳送門 A題: You are doing a research paper on the famous Collatz Conjecture. In your e…

C++經典的數據結構與算法之經典算法思想:貪心算法(Greedy)

貪心算法(Greedy Algorithm):通過局部最優達成全局最優的決策策略 貪心算法是一種通過每次選擇局部最優解來期望全局最優解的算法思想。它不考慮未來的影響,僅根據當前信息做出最優選擇,適用于具有貪心選擇性質和最優子…

LangChain實戰(二十一):構建自動化AI客服系統

本文是《LangChain實戰課》系列的第二十一篇,將帶領您構建一個完整的自動化AI客服系統。通過結合對話記憶、工具調用和業務知識庫,我們將創建一個能夠處理復雜客戶查詢的智能客服解決方案。 前言 在現代商業環境中,客戶服務是企業成功的關鍵因素之一。傳統客服系統往往面臨…

一人公司智能管理系統概述

系統概述 項目結構 Al_Compny系統采用前后端分離的全棧架構,項目根目錄下包含兩個主要子目錄:Al_Compny_backend(后端服務)和Al_Compny_frontend(前端應用)。核心功能模塊 Al_Compny系統是一個面向"一…

OpenWrt | 在 PPP 撥號模式下啟用 IPv6 功能

文章目錄一、WAN 口配置二、LAN 口配置三、IPv6 測試本文將詳細介紹 將光貓的網絡模式改成橋接之后使用路由器撥號的上網方式的情況下,在 OpenWrt 上使用 PPP 撥號模式上網時,啟用 IPv6 功能的方法。 一、WAN 口配置 首先,我們需要在 網絡 …

Java如何實現一個安全的登錄功能?

安全登錄系統完整教程 📋 目錄 項目概述技術棧安全特性項目結構核心組件詳解安全實現原理部署和運行安全最佳實踐常見問題解答進階擴展 🎯 項目概述 這是一個基于Spring Boot和Spring Security的完整安全登錄系統,專為初學者設計&#xff…

星辰誕愿——生日快樂

前言 今天這篇博客并非技術文章,而是慶祝我可愛的妹妹18歲生日以及介紹我半年以來的學習經歷 祝生網站:星辰誕愿(用戶列表里第一位就是我妹妹,希望大家能獻上自己的祝福,能分享轉發更好,我在此感謝大家。如果使用手機&…