Redis集群設計原理

来源:https://www.cnblogs.com/chenyumin/archive/2019/05/13/10856521.html
-Advertisement-
Play Games

恢復內容開始 Redis集群設計包括2部分:哈希Slot和節點主從,本篇博文通過3張圖來搞明白Redis的集群設計。 節點主從: 主從設計不算什麼新鮮玩意,在資料庫中我們也經常用主從來做讀寫分離,直接上圖: 圖上能看得到的信息: 1, 只有1個Master,可以有N個slaver,而且Slaver也 ...


---恢復內容開始---

Redis集群設計包括2部分:哈希Slot和節點主從,本篇博文通過3張圖來搞明白Redis的集群設計。

 

節點主從:

主從設計不算什麼新鮮玩意,在資料庫中我們也經常用主從來做讀寫分離,直接上圖:

 

 

圖上能看得到的信息:

1, 只有1個Master,可以有N個slaver,而且Slaver也可以有自己的Slaver,由於這種主從的關係決定他們是在配置階段就要指定他們的上下級關係,而不是Zookeeper那種平行關係是自主推優出來的。

2, 讀寫分離,Master只負責寫和同步數據給Slaver,Slaver承擔了被讀的任務,所以Slaver的擴容只能提高讀效率不能提高寫效率。

3, Slaver先將Master那邊獲取到的信息壓入磁碟,再load進記憶體,client端是從記憶體中讀取信息的,所以Redis是記憶體資料庫。

當一個新的Slaver加入到這個集群時,會主動找Master來拜碼頭,Master發現新的小弟後將全量數據發送給新的Slaver,數據量越大性能消耗也就越大,所以儘量避免在運行時做Slaver的擴容。

簡單總結下主從模式的設計:

優點:讀寫分離,通過增加Slaver可以提高併發讀的能力。

缺點:Master寫能力是瓶頸。

          雖然理論上對Slaver沒有限制但是維護Slaver開銷總將會變成瓶頸。

          Master的Disk大小也將會成為整個Redis集群存儲容量的瓶頸。

 

哈希Slot:

這個藝名看起來很文藝,但也不是什麼新技術,他的真名就叫分表分庫,再上一個圖:

圖上能看到的信息:

1, 對象保存到Redis之前先經過CRC16哈希到一個指定的Node上,例如Object4最終Hash到了Node1上。

2, 每個Node被平均分配了一個Slot段,對應著0-16384,Slot不能重覆也不能缺失,否則會導致對象重覆存儲或無法存儲。

3, Node之間也互相監聽,一旦有Node退出或者加入,會按照Slot為單位做數據的遷移。例如Node1如果掉線了,0-5640這些Slot將會平均分攤到Node2和Node3上,由於Node2和Node3本身維護的Slot還會在自己身上不會被重新分配,所以遷移過程中不會影響到5641-16384Slot段的使用。

簡單總結下哈希Slot的優缺點:

缺點:每個Node承擔著互相監聽、高併發數據寫入、高併發數據讀出,工作任務繁重

優點:將Redis的寫操作分攤到了多個節點上,提高寫的併發能力,擴容簡單。

雙劍合併:

看到這裡大家也就發現了,主從和哈希的設計優缺點正好是相互彌補的,將圖一每一套主從對應到圖二中的每一個Node,就是Redis集群的終極形態,先Hash分邏輯節點,然後每個邏輯節點內部是主從,如圖:

想擴展併發讀就添加Slaver,想擴展併發寫就添加Master,想擴容也就是添加Master,任何一個Slaver或者幾個Master掛了都不會是災難性的故障。

---恢復內容結束---


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 查詢語句 查看賬戶下的所有表 1 select * from tab; 查看賬戶下的所有表的詳細信息 1 select * from user_tables; 1.1 select select 用於從數據看查詢數據。語法: 1 select field1,filed2,.. . 2 from ...
  • -->尋找低效的SQL語句 ,下麵的語句主要適用於從視圖v$sqlarea中獲得當前運行下且耗用buffer_gets較多的SQL語句 SELECT executions , disk_reads , buffer_gets , ROUND( ( buffer_gets - disk_reads ) ...
  • Rman常用命令 Preview選項 1) 顯示用於還原system表空間數據文件的備份文件 RMAN> restore datafile 2 preview; 2) 顯示用於還原特定的表空間的備份文件; RMAN> restore tablespace users preview; 3) 顯示執行 ...
  • 文章大綱 一、搜索引擎框架基礎介紹二、ElasticSearch的簡介三、ElasticSearch安裝(Windows版本)四、ElasticSearch操作客戶端工具--Kibana五、ES的常用命令六、Java連接ElasticSearch進行數據操作七、項目源碼與參考資料下載八、參考文章 一 ...
  • 最近Oracle資料庫總是出問題,於是卸載乾凈後重新安裝,安裝過程中遇到了一些問題於是百度解決,在這裡記錄下來方便以後查看。 win10系統安裝oracle11g時遇到INS-13001環境不滿足最低要求 在安裝時點擊setup.exe之後,出現了:[INS-13001]環境不滿足最低要求 這時,打 ...
  • 1.大數據與機器學習的關係: 大數據領域我們做的是數據的存儲和簡單的統計計算,機器學習在大數據的應用是為了發現數據的規律或模型,用機器學習演算法對數據進行計算的到的模型,從而決定我們的預測與決定的因素(比如在大數據用戶畫像項目里,生成的特殊用戶欄位)。 2.大數據在機器學習的應用 目前市場實際開發模式 ...
  • 前言 人生在於折騰系列,網路,多線程等系列博客樓主還在繼續折騰也不會放棄。這是全新的系列,緩存的知識其實並不僅僅在於簡單的增刪改查,我覺得有必要全面深入的學習一波。記錄學習的過程與體悟。 RDB 什麼是RDB 對redis中的數據執行周期性的持久化,通過配置文件中設置檢查間隔時間與備份觸發條件來對數 ...
  • Microsoft SQL Server SQL Server 是Microsoft 公司推出的關係型資料庫管理系統。具有使用方便可伸縮性好與相關軟體集成程度高等優點,可跨越膝上型電腦到運行Microsoft Windows Server的大型多處理器的伺服器等多種平臺使用。 Microsoft S ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...