激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 面試分析分布式架構Redis熱點key大Value解決方案

面試分析分布式架構Redis熱點key大Value解決方案

2022-03-10 23:59Q.E.D Redis

這篇文章主要為大家介紹了分布式架構Redis熱點key大Value解決方案,以及在面試中如果遇到這類問題的分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助

引言

關于 Redis 熱點數據 & 大 key 大 value 問題也是容易被問的高階問題,不如一次痛快點說完,讓面試官無話可說,個人工作經驗中,熱點數據問題在工作中相比雪崩更容易遇到,只是大部分時候熱點不夠熱,都會被提前告警解決,但這個問題一旦控制不了造成的線上問題也是足夠讓你今年績效墊底了,廢話不說進入正題。

正常情況下,Redis 集群中數據都是均勻分配到每個節點,請求也會均勻的分布到每個分片上,但在一些特殊場景中,比如外部爬蟲、攻擊、熱點商品等,最典型的就是明星在微博上宣布離婚,吃瓜群眾紛紛涌入留言,導致微博評論功能崩潰,這種短時間內某些 key 訪問量過于大,對于這種相同的 key 會請求到同一臺數據分片上,導致該分片負載較高成為瓶頸問題,導致雪崩等一系列問題。

1、面試官:你在項目中有沒有遇到 Redis 熱點數據問題,一般都是什么原因引起的?

問題分析:上次聽群里大佬面試阿里 p7 就被問到這個問題,難度指數五顆星,對我等小白著實是加分項。

答:關于熱點數據問題我有話要說,這個問題我早在剛剛學習使用 Redis 時就從已經意識到了,所以在使用時會刻意避免,堅決不會給自己挖坑,熱點數據最大的問題會造成 Reids 集群負載不均衡(也就是數據傾斜)導致的故障,這些問題對于 Redis 集群都是致命打擊。

先說說造成 Reids 集群負載不均衡故障的主要原因:

  • 高訪問量的 Key,也就是熱 key,根據過去的維護經驗一個 key 訪問的 QPS 超過 1000 就要高度關注了,比如熱門商品,熱門話題等。
  • 大 Value,有些 key 訪問 QPS 雖然不高,但是由于 value 很大,造成網卡負載較大,網卡流量被打滿,單臺機器可能出現千兆 / 秒,IO 故障。
  • 熱點 Key + 大 Value 同時存在,服務器殺手。

那么熱點 key 或大 Value 會造成哪些故障呢:

  • 數據傾斜問題:大 Value 會導致集群不同節點數據分布不均勻,造成數據傾斜問題,大量讀寫比例非常高的請求都會落到同一個 redis server 上,該 redis 的負載就會嚴重升高,容易打掛。
  • QPS 傾斜:分片上的 QPS 不均。
  • 大 Value 會導致 Redis 服務器緩沖區不足,造成 get 超時。
  • 由于 Value 過大,導致機房網卡流量不足。
  • Redis 緩存失效導致數據庫層被擊穿的連鎖反應。

2、面試官:真實項目中,那熱點數據問題你是如何準確定位的呢?

答:這個問題的解決辦法比較寬泛,要具體看不同業務場景,比如公司組織促銷活動,那參加促銷的商品肯定是有辦法提前統計的,這種場景就可以通過預估法。對于突發事件,不確定因素,Redis 會自己監控熱點數據。大概歸納下:

提前獲知法:

根據業務,人肉統計 or 系統統計可能會成為熱點的數據,如,促銷活動商品,熱門話題,節假日話題,紀念日活動等。

Redis 客戶端收集法:

調用端通過計數的方式統計 key 的請求次數,但是無法預知 key 的個數,代碼侵入性強。

?
1
2
3
4
5
6
7
public Connection sendCommand(final ProtocolCommand cmd, final byte[]... args) {
    //從參數中獲取key
    String key = analysis(args);
    //計數
    counterKey(key);
    //ignore
}

Redis 集群代理層統計:

像 Twemproxy,codis 這些基于代理的 Redis 分布式架構,統一的入口,可以在 Proxy 層做收集上報,但是缺點很明顯,并非所有的 Redis 集群架構都有 proxy。

面試分析分布式架構Redis熱點key大Value解決方案

Redis 服務端收集:

監控 Redis 單個分片的 QPS,發現 QPS 傾斜到一定程度的節點進行 monitor,獲取熱點 key, Redis 提供了 monitor 命令,可以統計出一段時間內的某 Redis 節點上的所有命令,分析熱點 key,在高并發條件下,會存在內存暴漲和 Redis 性能的隱患,所以此種方法適合在短時間內使用;同樣只能統計一個 Redis 節點的熱點 key,對于集群需要匯總統計,業務角度講稍微麻煩一點。

面試分析分布式架構Redis熱點key大Value解決方案

以上為說的這 4 個方法都是現在業界比較常用的,方法,我通過學習 Redis 源碼還有一個新的想法。第 5 種:修改 Redis 源碼。

 修改 Redis 源代碼:(從讀源碼中想到的思路)

我發現 Redis4.0 為我們帶來了許多新特性,其中便包括基于 LFU 的熱點 key 發現機制,有了這個新特性,我們就可以在此基礎上實現熱點 key 的統計,這個只是我的個人思路。

面試官心理:小伙子還挺有想法,思路挺開闊,還打起了修改源碼的注意,我都沒這個野心。團隊里就需要這樣的人。

(發現問題,分析問題,解決問題,不等面試官發問,直接講述如何解決熱點數據問題,這才是核心內容)

3、如何解決熱點數據問題

 答:關于如何治理熱點數據問題,解決這個問題主要從兩個方面考慮,第一是數據分片,讓壓力均攤到集群的多個分片上,防止單個機器打掛,第二是遷移隔離。

概括總結:

key 拆分:

如果當前 key 的類型是一個二級數據結構,例如哈希類型。如果該哈希元素個數較多,可以考慮將當前 hash 進行拆分,這樣該熱點 key 可以拆分為若干個新的 key 分布到不同 Redis 節點上,從而減輕壓力

遷移熱點 key:

以 Redis Cluster 為例,可以將熱點 key 所在的 slot 單獨遷移到一個新的 Redis 節點上,這樣這個熱點 key 即使 QPS 很高,也不會影響到整個集群的其他業務,還可以定制化開發,熱點 key 自動遷移到獨立節點上,這種方案也較多副本。

熱點 key 限流:

對于讀命令我們可以通過遷移熱點 key 然后添加從節點來解決,對于寫命令我們可以通過單獨針對這個熱點 key 來限流。

增加本地緩存:

對于數據一致性不是那么高的業務,可以將熱點 key 緩存到業務機器的本地緩存中,因為是業務端的本地內存中,省去了一次遠程的 IO 調用。但是當數據更新時,可能會造成業務和 Redis 數據不一致。

面試官:你回答得很好,考慮得很全面。

4、面試官:關于 Redis 最后一個問題,Redis 支持豐富的數據類型,那么這些數據類型存儲的大 Value 如何解決,線上有遇到這種情況嗎?

 問題分析:相比熱點 key 大概念,大 Value 的概念比好好理解,由于 Redis 是單線程運行的,如果一次操作的 value 很大會對整個 redis 的響應時間造成負面影響,因為 Redis 是 Key - Value 結構數據庫,大 value 就是單個 value 占用內存較大,對 Redis 集群造成最直接的影響就是數據傾斜。

 答:(想難倒我?我可是有備而來。)

我先說說多大的 Value 算大,根據公司基礎架構給出的經驗值可做以下劃分:

注:(經驗值不是標準,都是根據集群運維人員長期觀察線上 case 總結出來的)

大:string 類型 value > 10K,set、list、hash、zset 等集合數據類型中的元素個數 > 1000。

超大: string 類型 value > 100K,set、list、hash、zset 等集合數據類型中的元素個數 > 10000。

由于 Redis 是單線程運行的,如果一次操作的 value 很大會對整個 redis 的響應時間造成負面影響,所以,業務上能拆則拆,下面舉幾個典型的分拆方案:

  • 一個較大的 key-value 拆分成幾個 key-value ,將操作壓力平攤到多個 redis 實例中,降低對單個 redis 的 IO 影響
  • 將分拆后的幾個 key-value 存儲在一個 hash 中,每個 field 代表一個具體的屬性,使用 hget,hmget 來獲取部分的 value,使用 hset,hmset 來更新部分屬性。
  • hash、set、zset、list 中存儲過多的元素

類似于場景一中的第一個做法,可以將這些元素分拆。

以 hash 為例,原先的正常存取流程是:

?
1
2
hget(hashKey, field);
hset(hashKey, field, value)

現在,固定一個桶的數量,比如 10000,每次存取的時候,先在本地計算 field 的 hash 值,模除 10000,確定該 field 落在哪個 key 上,核心思想就是將 value 打散,每次只 get 你需要的。

?
1
2
3
newHashKey = hashKey + (hash(field) % 10000);
hset(newHashKey, field, value);
hget(newHashKey, field)

面試官已經被我折服,終于放棄了 Redis 的追問。

總結

如果你對 Redis 真對不是很熟悉,有些人干脆說自己項目小,壓根沒有用過 Redis,只知道一些理論知識,那么我建議你讀者重點掌握《 說說 Redis 中有哪些數據結構及底層實現原理》《緩存必問:Redis 持久化,高可用集群》《Redis 雪崩,穿透,擊穿三連問》這三篇,至于 Redis 熱點數據問題,如果想要多談點工資盡量掌握。推薦閱讀《Redis 開發與運維》

以上就是面試分析分布式架構Redis熱點key大Value解決方案的詳細內容,更多關于分布式架構面試Redis熱點key大Value的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/qq_34272760/article/details/120754635

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
主站蜘蛛池模板: 黄色毛片视频在线观看 | 国产精品久久久久av | 日本中文高清 | 日韩精品一区二区在线 | 深夜网站在线观看 | 亚洲黑人在线观看 | 免费91在线 | 免费网址黄| av在线电影网址 | 得得啪在线视频 | 国产午夜电影 | chinese hd xxxx tube| 黄色电影免费网址 | 欧洲伊人网| 91精品视频网址 | 九九看片| xxxxhdvideosex| 欧美成人一区二区三区 | 色淫网站免费视频 | www.91tv| 黄色网www| 一本色道久久99精品综合蜜臀 | 黄www片 | 操操日日 | 草碰人人 | 91伊人久久| 欧美一级片一区 | www.99久| 中文字幕在线亚洲精品 | 成年人网站国产 | 搜一级毛片 | 成人免费毛片一 | 九一免费版在线观看 | av成人免费| 日韩视频一区二区在线观看 | 免费在线一级毛片 | 射逼网站 | 精品中文字幕在线播放 | 欧美3p激情一区二区三区猛视频 | 成人在线观看一区二区 | 午夜爱爱福利 |