GaussDB(for Redis)提供了完備的大Key解決方案,支持大Key線上診斷、監控預警、承載力強等能力,彌補了開源Redis在大key問題上的不足,讓DBA如虎添翼。 ...
本文分享自華為雲社區《華為雲GaussDB(for Redis)揭秘第31期:大key治理》,作者: 高斯Redis官方博客。
從DBA的視角看,大Key無疑是引起Redis線上問題的常見原因。為瞭解決大Key隱患,業務首先要遵守合理的開發規範,減少大Key的產生和訪問依賴。但有時大Key是在程式運行過程中悄悄產生的,讓人防不勝防。因此,一款可隨時線上診斷,且能主動預警,防患於未然的Redis服務產品顯得尤為重要。
GaussDB(for Redis):支持大Key線上診斷
GaussDB(for Redis)採用計算、存儲分離的高可靠架構,每個計算節點上都部署有後臺任務。GaussDB(for Redis)通過後臺任務持續檢測分析存儲池中的大key情況,用戶執行命令時直接取結果,不會影響線上業務,跟業界阻塞式全量掃描方式相比,更安全。
用戶執行bigkeys命令後,將直接從節點上獲取“答案”,不用全庫掃描引起不必要的性能影響。
此外,GaussDB(for Redis)支持用戶自定義大key標準,比如大於1MB的string、大於10000個元素的hash類型等。該功能一經推出,收穫了很多客戶和DBA小伙伴的認可及點贊。
GaussDB(for Redis):支持大key監控預警
分享兩個真實案例:
1、業務周期性執行“lrange 0 -1”獲取list key的所有元素。但由於程式bug,業務也同時在長期、緩慢地向這個key中持續追加,導致key越來越長。直到線上業務出問題,幾經波折,才發現了這個危險的大Key。
2、業務長期穩定運行,有一天有新組件上線,線上業務開始不斷超時。幾經排查,發現新組件對Redis執行hmset f1 v1 f2 v2……,一條寫入命令攜帶了長達2萬個參數,嚴重影響了生產業務。
從DBA的角度,這類問題需要一個“大Key偵探”時刻盯防,一旦有對大Key的高危操作,立刻主動預警。
GaussDB(for Redis)設計了10+監控指標,提供“大Key偵探”的能力,例如:單個請求回包的最大元素個數(識別lrange 0 -1操作大key引起阻塞的場景)、單個請求攜帶的最大參數個數(識別hmset上萬元素批導引起阻塞的場景)……DBA只需要根據多年經驗,將這類指標訂閱告警,即可在第一時間“抓住大Key案發現場”,將風險扼殺於萌芽狀態。
GaussDB(for Redis):對大Key的承載能力更強
即使在大Key存在的一些業務場景,GaussDB(for Redis)的表現也是遠優於開源Redis的。下麵將介紹大Key經常引起的一些問題:
1、大key引發了CPU 100%,阻塞生產業務
在開源Redis中,大key容易引起CPU占用100%,使生產業務受損,引起線上問題。這是因為開源Redis本身就是單線程,尤其在這種比較脆弱的架構下使用大key,更容易引起線程阻塞,從而影響整個實例。
GaussDB(for Redis)的多線程架構天然就對大key更友好,不會有這個問題困擾。即使單個線程被個別大Key影響,整個GaussDB(for Redis)實例包含數十、上百個線程,整體業務基本都不會受到干擾。
2、大key因個別分片帶寬高,被Redis頻繁“流控”
目前市面上有一些開源Redis是基於一個大的容器混合部署很多租戶的Redis進程,但在這種架構下,為了避免一個客戶的Redis影響其他客戶,往往會對客戶的Redis進程進行流量控制,當某個客戶業務中對大key有較為頻繁的操作時,很容易觸發給客戶設定的該租戶的帶寬閾值並觸發流控,從而導致線上業務受損。
相比之下,GaussDB(for Redis)的每個分片都是一個獨立的容器,是客戶的獨享資源,更可靠,連接數、帶寬等資源不設主動流控,尤其是節點帶寬資源的“天花板”非常高。
3、大key導致傾斜,分片記憶體占用不均勻
開源Redis集群中,存儲大key會導致記憶體空間不均勻、消耗不均衡,大key所在分片有OOM風險。
GaussDB(for Redis)採用高性能存儲池,不會對某個節點分片造成數據量的傾斜,支持大key可靠存儲,不會導致分片OOM。
4、Redis擴容時要搬遷數據,大key總引起問題
開源Redis擴容時,由於涉及數據跨片搬遷,擴容過程耗時久,存在訪問阻塞的風險。如圖所示,因此開源Redis在有大key的情況下,擴容必須謹慎!
GaussDB(for Redis)支持秒級無感擴容,不論擴容量,還是擴CPU,都不需要搬遷數據,因此也不受大Key影響,運維體驗極佳。
本文介紹了GaussDB(for Redis)的大Key診斷、大Key預警特性,以及在大Key場景下如何解決開源Redis的穩定性痛點,為客戶提供了高效可靠的大Key解決方案。未來,GaussDB(for Redis)將持續致力於開發更多好用的企業級特性,幫助客戶輕鬆運維,高效開發。
附錄
- 本文作者:
華為雲資料庫GaussDB(for Redis)團隊
- 杭州/西安/深圳簡歷投遞:
- 更多產品信息,歡迎訪問官方博客:
bbs.huaweicloud.com/blogs/248875