<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
關於 Redis 熱點資料 & 大 key 大 value 問題也是容易被問的高階問題,不如一次痛快點說完,讓面試官無話可說,個人工作經驗中,熱點資料問題在工作中相比雪崩更容易遇到,只是大部分時候熱點不夠熱,都會被提前告警解決,但這個問題一旦控制不了造成的線上問題也是足夠讓你今年績效墊底了,廢話不說進入正題。
正常情況下,Redis 叢集中資料都是均勻分配到每個節點,請求也會均勻的分佈到每個分片上,但在一些特殊場景中,比如外部爬蟲、攻擊、熱點商品等,最典型的就是明星在微博上宣佈離婚,吃瓜群眾紛紛湧入留言,導致微博評論功能崩潰,這種短時間內某些 key 存取量過於大,對於這種相同的 key 會請求到同一臺資料分片上,導致該分片負載較高成為瓶頸問題,導致雪崩等一系列問題。
問題分析:上次聽群裡大佬面試阿里 p7 就被問到這個問題,難度指數五顆星,對我等小白著實是加分項。
答:關於熱點資料問題我有話要說,這個問題我早在剛剛學習使用 Redis 時就從已經意識到了,所以在使用時會刻意避免,堅決不會給自己挖坑,熱點資料最大的問題會造成 Reids 叢集負載不均衡(也就是資料傾斜)導致的故障,這些問題對於 Redis 叢集都是致命打擊。
先說說造成 Reids 叢集負載不均衡故障的主要原因:
那麼熱點 key 或大 Value 會造成哪些故障呢:
答:這個問題的解決辦法比較寬泛,要具體看不同業務場景,比如公司組織促銷活動,那參加促銷的商品肯定是有辦法提前統計的,這種場景就可以通過預估法。對於突發事件,不確定因素,Redis 會自己監控熱點資料。大概歸納下:
提前獲知法:
根據業務,人肉統計 or 系統統計可能會成為熱點的資料,如,促銷活動商品,熱門話題,節假日話題,紀念日活動等。
Redis 使用者端收集法:
呼叫端通過計數的方式統計 key 的請求次數,但是無法預知 key 的個數,程式碼侵入性強。
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 伺服器端收集:
監控 Redis 單個分片的 QPS,發現 QPS 傾斜到一定程度的節點進行 monitor,獲取熱點 key, Redis 提供了 monitor 命令,可以統計出一段時間內的某 Redis 節點上的所有命令,分析熱點 key,在高並行條件下,會存在記憶體暴漲和 Redis 效能的隱患,所以此種方法適合在短時間內使用;同樣只能統計一個 Redis 節點的熱點 key,對於叢集需要彙總統計,業務角度講稍微麻煩一點。
以上為說的這 4 個方法都是現在業界比較常用的,方法,我通過學習 Redis 原始碼還有一個新的想法。第 5 種:修改 Redis 原始碼。
修改 Redis 原始碼:(從讀原始碼中想到的思路)
我發現 Redis4.0 為我們帶來了許多新特性,其中便包括基於 LFU 的熱點 key 發現機制,有了這個新特性,我們就可以在此基礎上實現熱點 key 的統計,這個只是我的個人思路。
面試官心理:小夥子還挺有想法,思路挺開闊,還打起了修改原始碼的注意,我都沒這個野心。團隊裡就需要這樣的人。
(發現問題,分析問題,解決問題,不等面試官發問,直接講述如何解決熱點資料問題,這才是核心內容)
答:關於如何治理熱點資料問題,解決這個問題主要從兩個方面考慮,第一是資料分片,讓壓力均攤到叢集的多個分片上,防止單個機器打掛,第二是遷移隔離。
概括總結:
key 拆分:
如果當前 key 的型別是一個二級資料結構,例如雜湊型別。如果該雜湊元素個數較多,可以考慮將當前 hash 進行拆分,這樣該熱點 key 可以拆分為若干個新的 key 分佈到不同 Redis 節點上,從而減輕壓力
遷移熱點 key:
以 Redis Cluster 為例,可以將熱點 key 所在的 slot 單獨遷移到一個新的 Redis 節點上,這樣這個熱點 key 即使 QPS 很高,也不會影響到整個叢集的其他業務,還可以客製化化開發,熱點 key 自動遷移到獨立節點上,這種方案也較多副本。
熱點 key 限流:
對於讀命令我們可以通過遷移熱點 key 然後新增從節點來解決,對於寫命令我們可以通過單獨針對這個熱點 key 來限流。
增加本地快取:
對於資料一致性不是那麼高的業務,可以將熱點 key 快取到業務機器的本地快取中,因為是業務端的本地記憶體中,省去了一次遠端的 IO 呼叫。但是當資料更新時,可能會造成業務和 Redis 資料不一致。
面試官:你回答得很好,考慮得很全面。
問題分析:相比熱點 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 的響應時間造成負面影響,所以,業務上能拆則拆,下面舉幾個典型的分拆方案:
類似於場景一中的第一個做法,可以將這些元素分拆。
以 hash 為例,原先的正常存取流程是:
hget(hashKey, field); hset(hashKey, field, value)
現在,固定一個桶的數量,比如 10000,每次存取的時候,先在本地計算 field 的 hash 值,模除 10000,確定該 field 落在哪個 key 上,核心思想就是將 value 打散,每次只 get 你需要的。
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的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45