主頁 > 軟體工程 > 高并發環境下構建快取服務,你需要注意這6點

高并發環境下構建快取服務,你需要注意這6點

2023-01-06 08:11:19 軟體工程

摘要:高并發環境下構建快取服務需要注意哪些問題?

本文分享自華為云社區《【高并發】高并發環境下構建快取服務需要注意哪些問題?》,作者:冰 河,

快取特征

(1)命中率:命中數/(命中數+沒有命中數)

(2)最大元素(空間):代表快取中可以存放的最大元素的數量,一旦快取中元素的數量超過這個值,或者快取資料所占的空間超過了最大支持的空間,將會觸發快取清空策略,根據不同的場景,合理設定最大元素(空間)的值,在一定程度上可以提高快取的命中率,從而更有效的使用快取,

(3)清空策略:FINO(先進先出)、LFU(最少使用)、LRU(最近最少使用)、過期時間、隨機等,

  • FINO(先進先出):最先進入快取的資料,在快取空間不夠或超出最大元素限制的情況下,會優先被清除掉,以騰出新的空間來接收新的資料,這種策略的演算法主要是比較快取元素的創建時間,在資料實時性較高的場景下,可以選擇這種策略,優先保證最新策略可用,
  • LFU(最少使用):無論元素是否過期,根據元素的被使用次數來判斷,清除使用次數最少的元素來釋放空間,演算法主要是比較元素的命中次數,在保證高頻資料有效的場景下,可以選擇這種策略,
  • LRU(最近最少使用):無論元素是否過期,根據元素最后一次被使用的時間戳,清除最遠使用時間戳的元素,釋放空間,演算法主要是比較元素最近一次被獲取的時間,在熱點資料場景下,可以選擇這種策略,
    過期時間:根據過期時間判斷,清理過期時間最長的元素,或者清理最近要過期的元素,

快取命中率影響因素

(1)業務場景和業務需求

快取往往適合讀多寫少的場景,業務需求對實時性的要求,直接會影響到快取的過期時間和更新策略,實時性要求越低,就越適合快取,在相同Key和相同請求數的情況下,快取的時間越長,命中率就會越高,

(2)快取的設計(粒度和策略)

通常情況下,快取的粒度越小,命中率越高,快取的更新和命中策略也會影響快取的命中率,當資料發生變化時,直接更新快取的值會比移除快取或使快取過期的命中率更高,

(3)快取容量和基礎設施

快取的容量有限,則容易引起快取失效和被淘汰(目前多數的快取框架或中間件都采用了LRU演算法),同時,快取的技術選型也是至關重要的,比如采用應用內置的本地快取就比較容易出現單機瓶頸,而采用分布式快取則畢竟容易擴展,所以需要做好系統容量規劃,并考慮是否可擴展,此外,不同的快取框架或中間件,其效率和穩定性也是存在差異的,

(4)其他因素

當快取節點發生故障時,需要避免快取失效并最大程度降低影響,這種特殊情況也是架構師需要考慮的,業內比較典型的做法就是通過一致性Hash演算法,或者通過節點冗余的方式,

有些朋友可能會有這樣的理解誤區:既然業務需求對資料時效性要求很高,而快取時間又會影響到快取命中率,那么系統就別使用快取了,其實這忽略了一個重要因素–并發,通常來講,在相同快取時間和key的情況下,并發越高,快取的收益會越高,即便快取時間很短,

提高快取命中率的方法

從架構師的角度,需要應用盡可能的通過快取直接獲取資料,并避免快取失效,這也是比較考驗架構師能力的,需要在業務需求,快取粒度,快取策略,技術選型等各個方面去通盤考慮并做權衡,盡可能的聚焦在高頻訪問且時效性要求不高的熱點業務上,通過快取預加載(預熱)、增加存盤容量、調整快取粒度、更新快取等手段來提高命中率,

對于時效性很高(或快取空間有限),內容跨度很大(或訪問很隨機),并且訪問量不高的應用來說快取命中率可能長期很低,可能預熱后的快取還沒來得被訪問就已經過期了,

快取的分類和應用場景

(1)本地快取:編程實作(成員變數、區域變數、靜態變數)、Guava Cache
(2)分布式快取:Memcached、Redis

高并發場景下快取常見問題

(1)快取的一致性

更新資料庫成功——更新快取失敗
更新快取成功——更新資料庫失敗
更新資料庫成功——淘汰快取失敗
淘汰快取成功——更新資料庫失敗

(2)快取并發

并發時請求快取時已過期或者沒有命中或者更新的情況下有大量的請求訪問資料庫,

解決辦法:在快取更新或者過期的情況下,先嘗試獲取到lock,當更新完成后,嘗試釋放鎖,其他的請求只需要犧牲一定的等待時間

(3)快取穿透

在高并發的場景下,如果某一個key被高并發的訪問沒有被命中,出于對容錯性的考慮會嘗試從后端的資料庫獲取,從而導致大量的請求訪問了資料庫,主要是當key對應的資料為慷訓者為null的情況下,這就導致資料庫中并發的執行了很多不必要的查詢操作,從而導致了巨大的沖擊和壓力,

解決方法:快取空物件:對查詢結果為空的物件也進行快取,如果是集合可以快取一個空的集合,而不是null,如果是單個物件可以通過欄位標識來區分,需要保證快取資料的時效性(實作相對簡單),適合命中不高但可能會頻繁更新的資料,
單獨過濾處理:對所有可能對應資料為空的key進行統一的存放,并在請求前做攔截(實作相對復雜),適合命中不高更新不頻繁的資料

(4)快取顛簸問題

快取的顛簸問題,有些地方可能被稱為“快取抖動”,可以看作是一種比“雪崩”更輕微的故障,但是也會在一段時間內對系統造成沖擊和性能影響,一般是由于快取節點故障導致,業內推薦的做法是通過一致性Hash演算法來解決,

(5)快取雪崩現象

快取雪崩就是指由于快取的原因,導致大量請求到達后端資料庫,從而導致資料庫崩潰,整個系統崩潰,發生災難,導致這種現象的原因有很多種,上面提到的“快取并發”,“快取穿透”,“快取顛簸”等問題,其實都可能會導致快取雪崩現象發生,這些問題也可能會被惡意攻擊者所利用,還有一種情況,例如某個時間點內,系統預加載的快取周期性集中失效了,也可能會導致雪崩,為了避免這種周期性失效,可以通過設定不同的過期時間,來錯開快取過期,從而避免快取集中失效,

從應用架構角度,我們可以通過限流、降級、熔斷等手段來降低影響,也可以通過多級快取來避免這種災難,

此外,從整個研發體系流程的角度,應該加強壓力測驗,盡量模擬真實場景,盡早的暴露問題從而防范,

(6)快取無底洞現象

該問題由 facebook 的作業人員提出的, facebook 在 2010 年左右,memcached 節點就已經達3000 個,快取數千 G 內容,他們發現了一個問題—memcached 連接頻率,效率下降了,于是加 memcached 節點,添加了后,發現因為連接頻率導致的問題,仍然存在,并沒有好轉,稱之為”無底洞現象”,

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/541308.html

標籤:其他

上一篇:高并發環境下構建快取服務,你需要注意這6點

下一篇:【吐槽貼】專案經理的進階日常:專案要收尾了,我卻慌了

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more