技術補給站第10期:分析內部運行機制,教你解決Redis性能問題

      網友投稿 838 2022-05-28

      Redis是一種鍵值數據庫,有著時延低、性能好、數據結構豐富的特點,常用作緩存、排行榜、計數器、 消息隊列等,是電商秒殺、聊天系統等業務場景中的“熟客”。

      讀懂Redis:緩存神器原來是這樣工作的

      一個網站總有大量的數據是用戶共享的,如果每個用戶都去數據庫查詢,效率就太低了。所以有了新的解決方案:將用戶共享數據緩存到服務器的內存中。

      舉個例子,應用程序們從MySQL查詢到的數據,會到Redis這里登記,后面再需要用的時候,就先查找Redis的緩存,無需返回到MySQL查找。一套流程下來,為MySQL減輕了不小的負擔,網絡服務的性能顯著提升。

      Redis堪稱數據庫屆的萬金油,哪里需要往哪里搬,這也得益于它有著豐富的數據結構,以及強大的讀寫性能。

      以數據結構為例,Redis和其他結構化存儲的重要區別便是,它不僅支持字符串,還支持不同類型的抽象數據結構,如列表、映射、集、排序集、HyperLogLogs、位圖、流和空間索引等。那么Redis是如何做到如此“萬能”的,它支持的這些數據結構又是如何從底層實現呢?《三次給你聊清楚Redis》之Redis是個啥 就從非關系型數據庫談起,詳細聊了聊這個問題,就像最簡單的字符串,Redis并未沿襲傳統c語言的慣例,而是單獨構建了一種簡單的動態字符串抽象類型,并充分利用SDS實現。

      當我們對Redis的基本原理了然于胸后,再針對業務場景進行優化時,也能更合理地使用各種Redis命令。

      Redis性能:禍福相依的內部運行機制

      另一方面,Redis為了把內存中的數據持久到磁盤上,也提供了完善的持久化機制,主要包括2種:

      RDB:產生一個數據快照文件

      AOF:實時追加命令的日志文件

      但是如果配置不合理,持久化會占用過多內存從而影響性能。舉個例子,如果AOF的刷盤時機設置為每次寫入都刷盤,由于每次寫命令都需要寫入文件并刷到磁盤中才會返回,當寫入量很大時,會增加磁盤IO的負擔,大大降低Redis的寫入性能。Redis 持久化是如何做的?一文聊聊 RDB和AOF對比分析 談到了這兩種持久化機制對Redis性能的影響,建議大家針對不同的業務場景選擇合適的持久化方式。

      在討論Redis性能問題的時候,不得不提的一點是它的單線程結構,這里的單線程指的是執行命令 ,比如一條命令從客戶端到達服務端不會立刻被執行,而是會進入一個隊列中等待,每次只會有一條指令被選中執行。【Redis破障之路】:Redis單線程架構 詳細分析了單線程模型的Redis為什么性能如此之高,能達到每秒萬級別的處理能力,簡單透露兩點:純內存訪問、I/O多路復用技術,具體可以閱讀文章。而Redis的單線程架構,也意味著網絡問題會對它的性能產生一定的影響。

      另外,當業務規模擴大,單個Redis服務無法承載的時候,我們常常會用分布式架構來提高Redis的性能,Redis主從復制以及哨兵的原理解讀 和 Redis Sentinel 源碼:Redis的高可用模型分析 都討論了主從模式下的關鍵功能:哨兵,通過對其源碼的理解,詳細說明了哨兵的代碼實現方式,并學會使用哨兵功能解決主節點的寫能力、存儲能力限制等等。

      除此之外,諸如數據結構的復雜度、網絡帶寬、操作系統以及硬件本身都會對Redis的性能產生影響,它的性能問題幾乎涵蓋了 CPU、內存、網絡、磁盤的方方面面,再此不一一贅述。

      【技術補給站】第10期:分析內部運行機制,教你解決Redis性能問題

      綜上,我們分析了影響Redis性能的一些關鍵內部機制,比如它的緩存淘汰算法;它的持久化會占用過多內存從而影響性能;它的單線程架構等。通過了解Redis的這些內部實現原理,也能進一步幫助大家排查它的性能問題。

      Redis調優:宕機怎么辦?收下這幾顆靈丹妙藥

      下面,我們將給出一些應對Redis性能問題的解決方案。

      以常見的緩存問題為例,通常情況下,Redis緩存層由于某種原因宕機后,所有的請求會涌向存儲層,短時間內的高并發請求可能會導致存儲層掛機,稱之為“Redis雪崩”。Redis緩存異常應對方案分析 有針對性的總結了Redis發生緩存穿透、雪崩、擊穿情況時,能夠有效應對的解決方案,比如不要給訪問頻繁的熱點數據設置過期時間,從而解決Redis實例沒有起到緩存層作用的問題。

      另一個經常被詬病性能問題的是fork, fork是開源Redis的一個重要依賴,當 Redis 開啟了后臺 RDB 和 AOF rewrite 后,在執行時,它們都需要主進程創建出一個子進程進行數據的持久化,fork就是創建子進程的系統調用函數。

      在華為云GaussDB(for Redis)服務團隊支撐某客戶業務上云的過程中 ,就發現了由fork引發的時延抖動問題,文章一場由fork引發的超時,讓我們重新探討了Redis的抖動問題 還原了當時的場景,探究了fork對性能的影響,包括業務抖動、內存率利用率降低和實例容量受限。比如,在電商大促、熱點事件等業務高峰時發生上述fork,會導致Redis阻塞,進而對業務造成雪崩的影響。

      團隊通過修改日志、系統性排查整改代碼中的 fork調用,最后在新版本GaussDB(for Redis)中解決了該問題,并清零了內部的fork使用,與原生Redis相比,徹底解決了fork的性能隱患。

      其實,考慮到業務場景越來越復雜,原生Redis出現性能瓶頸難以避免。這時候,最簡單粗暴的解決方法就是使用商業版本的Redis,一勞永逸解決可能存在的性能問題。

      在 GaussDB(for Redis)與原生Redis集群的性能對比 中,就比較了華為云自研Redis和原生Redis集群在X86架構下的性能測試報告,結果表明GaussDB(for Redis)在性能、抗寫和存儲成本上的優勢明顯。

      從相識到相惜:Redis與計算存儲分離四部曲 進一步從技術角度拆解分析了GaussDB(for Redis)如何在存算分離的架構下,實現強一致、秒擴容、超可用、低成本。以強一致為例,Redis遇到流量壓力進行主從切換時很容易發生數據不同步問題,GaussDB ( for Redis)就在存儲層(DFV層)去進行強一致的數據同步,而非計算層,這樣就避免了任何中間態下的數據的不一致,再也不用擔心宕機導致數據丟失。更多的技術細節揭秘,也可以閱讀這組專題高斯Redis揭秘系列文章,更全面的認識GaussDB ( for Redis)。

      Redis的性能問題,涉及到的技術細節很多,本專題只是列出了一些較為典型的問題,希望讀者能夠通過上述提及的技術文章,對它有更深入的認識,學會從底層運行機制去思考Redis的性能調優。

      最后

      福利時間到,小編準備了3個小問題,參與互動的小伙伴有機會獲得由華為云社區提供的開發者大禮包,任選其一回答即可。

      問題1:例舉1個會讓Redis變慢的現象和原因。

      問題2:簡單說說你用過的Redis性能調優方案。

      問題3:如何避免Redis集群異步復制可能帶來的數據丟失,強一致性實現方法有哪些?

      歡迎大家踴躍參加。

      技術補給站

      聚焦熱門的細分技術領域,帶來系統且專業的干貨解讀,從而為開發者提供新技術知識的補給,助力技術能力更上一層樓。

      往期回顧

      【第1期】 中臺規劃:重磅發布!《IT 2.0時代,華為全場景驅動下中臺規劃實戰全集》

      【第2期】數倉調優:數倉性能調優必讀:從系統級到SQL級,帶你進階為性能調優高手

      【第3期】依賴圖繪制:學習大數據治理,手把手教你從零開始畫DAG作業依賴圖

      【第4期】音視頻:音視頻爆火的背后,藏著哪些技術奧秘?華為云視頻云專家為你深度解讀

      【第5期】云原生:從架構和實踐,剖析KubeEdge+Volcano技術硬實力

      【第6期】LiteOS實操:帶你步步深入LiteOS,掌握物聯網開發秘笈

      【第7期】 API應用:20個超實用API應用案例,開啟API進階之路(內附資料下載)

      【第8期】 HiLens開發:用好ModelArts+HiLens,輕松上手端云協同AI開發

      【第9期】 從Angular、React到Vue,探秘三大主流前端框架

      Redis 云數據庫 GaussDB(for Redis) 數據庫 緩存

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:談談網站架構設計開發的一些來龍去脈
      下一篇:Kafka過期數據未老化原因及解決方案
      相關文章
      精品久久久久久亚洲综合网| 亚洲电影日韩精品| 亚洲无线码在线一区观看| 亚洲国产成人久久一区久久| 亚洲AV无码一区二区三区久久精品| 亚洲xxxx视频| 亚洲不卡影院午夜在线观看| 亚洲熟妇无码av另类vr影视| 亚洲中文字幕久久精品无码A| 久久久久亚洲国产| 亚洲av日韩综合一区久热| 久久精品国产亚洲av瑜伽| 国产亚洲蜜芽精品久久| 国产亚洲成在线播放va| 亚洲AV无码一区二区三区国产| 亚洲国产一区明星换脸| 亚洲深深色噜噜狠狠爱网站| 亚洲精品成人网站在线观看| 亚洲国产成人片在线观看无码| 久久精品亚洲中文字幕无码网站 | 亚洲GV天堂GV无码男同| 色偷偷尼玛图亚洲综合| 婷婷综合缴情亚洲狠狠尤物| 亚洲第一视频在线观看免费| 亚洲色偷偷综合亚洲AV伊人| 伊人久久亚洲综合| 亚洲av午夜成人片精品网站 | 亚洲AV无码乱码在线观看富二代 | 亚洲视频在线观看免费视频| 91丁香亚洲综合社区| 亚洲精品国产suv一区88 | 综合偷自拍亚洲乱中文字幕| 亚洲а∨天堂久久精品| 国产亚洲精品成人a v小说| 亚洲中文字幕无码久久综合网| 久久青青草原亚洲AV无码麻豆| 噜噜噜亚洲色成人网站∨| 亚洲乱人伦精品图片| 亚洲精华国产精华精华液好用 | 亚洲精品综合久久中文字幕 | 国产精品亚洲аv无码播放|