Redis 熱點key

壓測報redis 熱點問題

熱點問題概述

產生原因

熱點問題產生的原因大致有以下兩種:

  • 用戶消費的數據遠大于生產的數據(熱賣商品、熱點新聞、熱點評論、明星直播)。

    在日常工作生活中一些突發的的事件,例如:雙十一期間某些熱門商品的降價促銷,當這其中的某一件商品被數萬次點擊瀏覽或者購買時,會形成一個較大的需求量,這種情況下就會造成熱點問題。同理,被大量刊發、瀏覽的熱點新聞、熱點評論、明星直播等,這些典型的讀多寫少的場景也會產生熱點問題。

  • 請求分片集中,超過單Server的性能極限。

    在服務端讀數據進行訪問時,往往會對數據進行分片切分,此過程中會在某一主機Server上對相應的Key進行訪問,當訪問超過Server極限時,就會導致熱點Key問題的產生。

熱點問題的危害


  • 流量集中,達到物理網卡上限。
  • 請求過多,緩存分片服務被打垮。
  • DB擊穿,引起業務雪崩。

如前文講到的,當某一熱點Key的請求在某一主機上超過該主機網卡上限時,由于流量的過度集中,會導致服務器中其它服務無法進行。如果熱點過于集中,熱點Key的緩存過多,超過目前的緩存容量時,就會導致緩存分片服務被打垮現象的產生。當緩存服務崩潰后,此時再有請求產生,會緩存到后臺DB上,由于DB本身性能較弱,在面臨大請求時很容易發生請求穿透現象,會進一步導致雪崩現象,嚴重影響設備的性能。

常見解決方案

通常的解決方案主要集中在對客戶端和Server端進行相應的改造。

服務端緩存方案


首先Client會將請求發送至Server上,而Server又是一個多線程的服務,本地就具有一個基于Cache LRU策略的緩存空間。當Server本身就擁堵時,Server不會將請求進一步發送給DB而是直接返回,只有當Server本身暢通時才會將Client請求發送至DB,并且將該數據重新寫入到緩存中。此時就完成了緩存的訪問跟重建。

但該方案也存在以下問題:

  • 緩存失效,多線程構建緩存問題

  • 緩存丟失,緩存構建問題

  • 臟讀問題

使用Memcache、Redis方案


該方案通過在客戶端單獨部署緩存的方式來解決熱點Key問題。使用過程中Client首先訪問服務層,再對同一主機上的緩存層進行訪問。該種解決方案具有就近訪問、速度快、沒有帶寬限制的優點,但是同時也存在以下問題。

  • 內存資源浪費

  • 臟讀問題

使用本地緩存方案

使用本地緩存則存在以下問題:

  • 需要提前獲知熱點

  • 緩存容量有限

  • 不一致性時間增長

  • 熱點Key遺漏

傳統的熱點解決方案都存在各種各樣的問題,那么究竟該如何解決熱點問題呢?

阿里云數據庫解熱點之道

讀寫分離方案解決熱讀


架構中各節點的作用如下:

  • SLB層做負載均衡

  • Proxy層做讀寫分離自動路由

  • Master負責寫請求

  • ReadOnly節點負責讀請求

  • Replica節點和Master節點做高可用

實際過程中Client將請求傳到SLB,SLB又將其分發至多個Proxy內,通過Proxy對請求的識別,將其進行分類發送。例如,將同為Write的請求發送到Master模塊內,而將Read的請求發送至ReadOnly模塊。而模塊中的只讀節點可以進一步擴充,從而有效解決熱點讀的問題。讀寫分離同時具有可以靈活擴容讀熱點能力、可以存儲大量熱點Key、對客戶端友好等優點。

熱點數據解決方案


該方案通過主動發現熱點并對其進行存儲來解決熱點Key的問題。首先Client也會訪問SLB,并且通過SLB將各種請求分發至Proxy中,Proxy會按照基于路由的方式將請求轉發至后端的Redis中。

在熱點key的解決上是采用在服務端增加緩存的方式進行。具體來說就是在Proxy上增加本地緩存,本地緩存采用LRU算法來緩存熱點數據,后端db節點增加熱點數據計算模塊來返回熱點數據。

Proxy架構的主要有以下優點:

  • Proxy本地緩存熱點,讀能力可水平擴展

  • DB節點定時計算熱點數據集合

  • DB反饋 Proxy 熱點數據

  • 對客戶端完全透明,不需做任何兼容

熱點key處理

熱點數據的讀取

在熱點Key的處理上主要分為寫入跟讀取兩種形式,在數據寫入過程當SLB收到數據K1并將其通過某一個Proxy寫入一個Redis,完成數據的寫入。假若經過后端熱點模塊計算發現K1成為熱點key后, Proxy會將該熱點進行緩存,當下次客戶端再進行訪問K1時,可以不經Redis。最后由于proxy是可以水平擴充的,因此可以任意增強熱點數據的訪問能力。

熱點數據的發現

對于db上熱點數據的發現,首先會在一個周期內對Key進行請求統計,在達到請求量級后會對熱點Key進行熱點定位,并將所有的熱點Key放入一個小的LRU鏈表內,在通過Proxy請求進行訪問時,若Redis發現待訪點是一個熱點,就會進入一個反饋階段,同時對該數據進行標記。

DB計算熱點時,主要運用的方法和優勢有:

  • 基于統計閥值的熱點統計

  • 基于統計周期的熱點統計

  • 基于版本號實現的無需重置初值統計方法

  • DB 計算同時具有對性能影響極其微小、內存占用極其微小等優點

兩種方案對比

通過上述對比分析可以看出,阿里云在解決熱點Key上較傳統方法相比都有較大的提高,無論是基于讀寫分離方案還是熱點數據解決方案,在實際處理環境中都可以做靈活的水平能力擴充、都對客戶端透明、都有一定的數據不一致性。此外讀寫分離模式可以存儲更大量的熱點數據,而基于Proxy的模式有成本上的優勢。

轉載于:https://www.cnblogs.com/zgzf/p/10915455.html

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

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

相關文章

移動IM開發那些事:技術選型和常見問題

最近在做一個iOS IM SDK,在內部試用的階段,不斷有兄弟部門或者合作伙伴過來問各種技術細節,所以統一寫一篇文章記錄,統一介紹下一個IM APP的方方面面,包括技術選型(包括通訊方式,網絡連接方式,協議選擇)和常見問題。 …

webstrom打開通過頂部瀏覽器打開網頁,被跳轉到默認主頁

重新開始工作啦,希望以后認真一點,并把遇到的問題都記錄下來,雖然是小小白,但能無意間幫助到別人就更開心了呀 通過webstrom打開本地的文件時,發現跳轉到了默認主頁上,吐槽下,有些主頁真的超級流…

mockjs(接口服務代理)

mock官網:http://mockjs.com/ 一、搭建一個練習項目 1.利用vue的項目腳手架進行搭建 命令: vue create mock-demo 截圖: 2.安裝相關的依賴 命令: #使用 axios 發送 ajax npm install axios --save #使用 mock.js 產生隨機數據…

MD5算法原理

MD5(單向散列算法) 的全稱是Message-Digest Algorithm 5(信息-摘要算法),經MD2、MD3和MD4發展而來。MD5算法的使用不需要支付任何版權費用。MD5功能:輸入任意長度的信息,經過處理,輸…

函數-函數進階-裝飾器流程分析

老王:算了,估計你也想不出來。。。學過嵌套函數沒有? 你:yes,然后呢? 老王:想實現一開始你寫的america login(america)不觸發你函數的執行,只需要在這個login里面再定義一層函數&am…

制作手寫簽名

<!DOCTYPE html> <!-- saved from url(0056)http://hao2013.cn/canvas-special-master/brush/index.html --> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>簽名板(支持移動…

python第五次作業——陳靈院

習題1&#xff1a;讀入文件pmi_days.csv&#xff0c;完成以下操作&#xff1a;1.統計質量等級對應的天數&#xff0c;例如&#xff1a;優&#xff1a;5天良&#xff1a;3天中度污染&#xff1a;2天2.找出PMI2.5的最大值和最小值&#xff0c;分別指出是哪一天。 import csv impo…

iOS 二叉樹相關算法實現

什么是二叉樹&#xff1f; 在計算機科學中&#xff0c;二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”和“右子樹”&#xff0c;左子樹和右子樹同時也是二叉樹。二叉樹的子樹有左右之分&#xff0c;并且次序不能任意顛倒。二叉樹是遞歸定義的&#xff0c;所…

vux 組件庫首次使用安裝

1、首先通過腳手架新建一個項目&#xff0c;過程略。 創建完項目后&#xff0c;在項目里安裝vux&#xff0c; 通過命令 npm install vux --save 安裝 2、安裝vux-loader&#xff0c; 通過命令 npm install vux-loader --save-dev 安裝&#xff08;vux文檔沒說明&#xff09; 3、…

@Component 和 @Bean 的區別

Spring幫助我們管理Bean分為兩個部分&#xff0c;一個是注冊Bean&#xff0c;一個裝配Bean。完成這兩個動作有三種方式&#xff0c;一種是使用自動配置的方式、一種是使用JavaConfig的方式&#xff0c;一種就是使用XML配置的方式。 Compent 作用就相當于 XML配置 Component pub…

js動態驗證碼獲取

<!DOCTYPE html> <html lang"cn"> <head><meta charset"UTF-8"><title>短信驗證碼</title> </head> <body> <input type"number" id"tel" value"13303861063"> <…

Base64 算法原理,以及編碼、解碼【加密、解密】 介紹

Base64編碼&#xff0c;是我們程序開發中經常使用到的編碼方法。它是一種基于用64個可打印字符來表示二進制數據的表示方法。它通常用作存儲、傳輸一些二進制數據編碼方法&#xff01;也是MIME&#xff08;多用途互聯網郵件擴展&#xff0c;主要用作電子郵件標準&#xff09;中…

js通過身份證獲取年齡

// 獲取用戶的身份證號碼let identityCard this.idNum.replace(/\s/g, "");//判斷長度let len identityCard.length;//設置新的變量var strBirthday "";//根據長度獲取年月日if (len 18) {strBirthday identityCard.substr(6, 4) "/" identi…

爬取豆瓣top250

#xpath #第一種方法 可在開發者工具中找到標簽&#xff0c;右鍵copy xpath&#xff0c;有時需去掉tbody標簽 #第二種方法 簡單學習xpath&#xff0c;自己書寫&#xff0c;掌握基本語法即可&#xff0c;簡單的層級關系#先將csv文件以記事本打開&#xff0c;更改編碼為ASNI&…

TCP/IP,Http,Socket,XMPP的區別

網絡由下往上分為 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。 通過初步的了解&#xff0c;我知道IP協議對應于網絡層&#xff0c;TCP協議對應于傳輸層&#xff0c;而HTTP協議對應于應用層&#xff0c; 三者從本質上來說沒有可比性&#xff0c; socket則是對…

LED音樂頻譜之點陣

轉載請注明出處&#xff1a;http://blog.csdn.net/ruoyunliufeng/article/details/37967455 一.硬件 這里的LED選擇直插的霧面LED&#xff0c;亮度可以還不失美觀。注意每行要加上限流電阻。74HC138&#xff08;三八譯碼器&#xff09;作為列選&#xff0c;每行都連著74HC595&a…

上架相關——App Store 上架流程

說實話&#xff0c;公司要上架一個自己做的一個小項目。為了完成這個任務&#xff0c;菜鳥的我一遍找資料一遍跟著做&#xff0c;一遍修改錯誤一遍查找解決方案。網上的資料大部分都是2015年以前的資料&#xff0c;資料有點不夠過時&#xff0c;而且步驟配圖也不是很詳細&#…

this.$router 的三種跳轉頁面方法

第一種&#xff1a; this.$router.push(需要跳轉到的路徑名稱)此方法跳轉后&#xff0c;會在歷史欄目中保存路勁地址&#xff0c;當點擊歷史標簽時可以進行訪問 第二種&#xff1a; this.$router.replace(需要跳轉到的路徑名稱)此方法跳轉后&#xff0c;會在歷史欄目中不保存…

cf777c

題意&#xff1a;給你一個n*m的數陣 對于一行到另一行&#xff0c;若存在一列從上到下遞減&#xff0c;則稱之符合題意 The first line of the input contains two positive integers n and m (1?≤?nm?≤?100?000) — the number of rows and the number of columns in t…

上架相關——appstore 更新app版本

注&#xff1a;此片文章是基于app已經上架&#xff0c;也就是證書都已經配置好的前提下。 首先是還是app打包 修改版本號 修改project處的pp文件 檢查無誤后打包打包完成后upload to app store 漫長的等待。。 上傳到appstore進入iTunesConnect 選擇我的app 選擇對應app點…