哈希擴展——一致性哈希

目錄

一、什么是一致性哈希

二、一致性哈希原理

2.1 hash 環

三、服務器擴容場景?

3.1 服務器增加

3.2 服務器減少

3.3 使用虛擬節點

四、 一致性哈希的使用場景?


一、什么是一致性哈希

一致性哈希是一種哈希算法,用于將數據分布到不同的節點或存儲區域,而保持數據的一致性和均衡性。在分布式系統中,一致性哈希通常用于解決負載均衡和數據分布的問題。

一致性哈希的基本原理是將數據的鍵通過哈希函數映射到一個固定的哈希空間中。然后,將這個哈希空間分布到環形的哈希環上。每個節點或存儲區域在哈希環上占據一個位置,稱為虛擬節點或者物理節點。

當需要存儲或查找數據時,通過哈希函數計算數據的哈希值,并沿著哈希環順時針尋找距離最近的節點。這樣可以實現數據的高效分布和查找,同時也能夠避免節點動態增減時數據重新分布的開銷。

一致性哈希算法的優勢在于其簡單、高效,并且能夠保持數據的均衡性和一致性。在分布式存儲系統、負載均衡器等場景中被廣泛應用。

一致性哈希算法的優點在于:當新增或刪除節點時,只會影響到環上的一小部分節點,因此不會像傳統的哈希算法那樣造成大量的數據遷移和重新分片。同時,由于節點數較多,請求可以被更好地平均分配,從而實現了負載均衡的效果。

另外,一致性哈希算法還可以通過增加虛擬節點來解決節點不均衡的問題,從而進一步提高負載均衡的效果。

例如:有三臺服務器編號node1,node2,node3;有3000萬個key,需要將這3000萬個key均勻的緩存到三臺機器上。

解決方案:取模算法?hash(key)% N,即:對 key 進行 hash 運算后取模,N 是機器的數量;

這樣對 key 進行 hash 后的結果對 3 取模,得到的結果一定是 0、1 或?2,正好對應服務器node0node1node2,存取數據直接找對應的服務器即可。

取模算法雖然使用簡單,而服務器數量 N 發生變化后?hash(key)% N計算的結果也會隨之變化!

二、一致性哈希原理

一致性哈希算法也是取模算法,與上面的對服務器取模不同的是它是對 2^32 取模。

即:key % (2^32)

2.1 hash 環

這時,通過計算 key%(2^32),看它落到了圓上的哪一點,然后順時針向后走,遇到的第一臺服務器就是它存放的服務器。

A->B弧線上的點都對應->B服務器
B->C弧線上的點都對應->C服務器
C->A弧線上的點都對應 ->A服務器

三、服務器擴容場景?

3.1 服務器增加

受到影響的數據范圍只有 A到D 這條弧線上的數據

3.2 服務器減少

受到影響的數據范圍只有A->B?

3.3 使用虛擬節點

實際應用中,服務器綁定的點可能長這個樣子:

這樣的話容易出現數據偏斜:A服務器承擔壓力太大,B和C服務器性能浪費了。

這時候就要用到虛擬節點技術:我們就給A服務器,設置三個虛擬的分身,B/C也一樣
A->A1 A2 A3
B->B1 B2 B3
C->C1 C2 C3

?

這里只有ABC三臺服務器是真正存在的,所以數據如果順時針遇到的是A的分身服務器,則直接存儲到A上。
同理,B的分身,存儲到B服務器上
同理,C的分身,存儲到C服務器上

四、 一致性哈希的使用場景?

一致性哈希是一種在分布式系統中常用的技術,其使用場景包括但不限于以下幾個方面:

  1. 負載均衡:一致性哈希可以用于負載均衡,將請求均勻地分布到多個服務器上,避免出現某些服務器負載過重的情況。

  2. 緩存分布:在分布式緩存系統中,一致性哈希可以用來確定將數據存儲在哪個節點上,從而提高緩存命中率和整體性能。

  3. 分布式存儲:一致性哈希可用于分布式存儲系統中,確定數據存儲在哪個節點上,提高數據的訪問速度和可靠性。

  4. 容錯性:當系統中的節點出現故障或新增節點時,一致性哈希可以幫助系統快速地重新分配數據,提高系統的容錯性和可擴展性。

  5. P2P 網絡:在對等網絡(P2P)中,一致性哈希可以幫助節點發現其他節點的位置并快速建立連接。

總的來說,一致性哈希在分布式系統中起到了路由和數據分布的作用,能夠提高系統的性能和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78981.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arcgis幾何與游標(1)

本節我們對幾何進行展開學習 ArcPy 的幾何對象 在 ArcPy 中,幾何對象是表示地理空間數據的核心。它包括點(Point)、多點(Multipoint)、線(Polyline)和面(Polygon)等類型…

分布式熱點網絡

核心設計理念: 在自然災害(地震、洪水、臺風)、極端環境(無人區)及網絡管制(欠費停機)等場景下,傳統中心化網絡易因核心節點失效導致全局癱瘓。本方案提出構建去中心化設備網絡&…

【5G學習】基本概念之多頻資源以及子載波和信道

在5G通信中,子載波、信道以及時域、頻域、碼域、空域是構建無線傳輸系統的核心概念。它們共同定義了信號的傳輸方式、資源分配和多維復用技術。以下是詳細解釋及其相互關系: 一、核心概念定義 1. 子載波(Subcarrier) 定義&#…

Coze 和 n8n 的詳細介紹及多維度對比分析,涵蓋功能、架構、適用場景、成本等關鍵指標

以下是 Coze 和 n8n 的詳細介紹及多維度對比分析,涵蓋功能、架構、適用場景、成本等關鍵指標: 一、Coze 詳細介紹 1. 基礎信息 類型:低代碼自動化平臺(SaaS)。開源性:閉源(企業版需付費&…

分發餅干問題——用貪心算法解決

目錄 一:問題描述 二:解決思路 貪心策略(C語言)算法復習總結3——貪心算法-CSDN博客 三:代碼實現 四:復雜度分析 一:問題描述 分發餅干問題是一個經典的可以使用貪心算法解決的問題&#xf…

【Python爬蟲】簡單案例介紹4

本文繼續接著我的上一篇博客【Python爬蟲】簡單案例介紹3-CSDN博客 目錄 3.4 完整代碼 3.4 完整代碼 此小節給出上述案例的完整代碼, # encodingutf-8 import re, json, requests, xlwt, csv import pandas as pd from lxml import etree from bs4 import Beauti…

使用ADB工具分析Android應用崩潰原因:以閃動校園為例

使用adb工具分析模擬器或手機里app出錯原因以閃動校園為例 使用ADB工具分析Android應用崩潰原因:以閃動校園為例 前言 應用崩潰是移動開發中常見的問題,尤其在復雜的Android生態系統中,找出崩潰原因可能十分棘手。本文將以流行的校園應用&q…

【藍橋云課】男女搭配 python

題目 題目 題解 import mathT int(input()) for _ in range(T):N, M, K map(int, input().split())people_num N M# 目前為止可以組成的隊數group_num min(N // 2, M)if people_num - group_num * 3 < K:group_num-math.ceil((K-(people_num - group_num * 3))/3)pr…

edge 更新到135后,Clash 打開后,正常網頁也會自動跳轉

發現了一個有意思的問題&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出現了打開deepseek也會自動跳轉&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的網站打不開了&#xff0c;需要的一直正…

MCP協議實戰指南:在VS Code中實現PostgreSQL到Excel的自動化遷移

作者&#xff1a;后端小肥腸 &#x1f34a; 有疑問可私信或評論區聯系我。 &#x1f951; 創作不易未經允許嚴禁轉載。 姊妹篇&#xff1a; 從PDF到精準答案&#xff1a;Coze助力RAGFlow框架提升數據召回率_提升ragflow-CSDN博客 CozeTreeMind實測&#xff1a;秒出ISO標準流程圖…

大模型微調(PEFT)

大模型微調&#xff08;PEFT&#xff09; PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;一、PEFT 核心方法1. LoRA&#xff08;Low-Rank Adaptation&#xff09;2. Adapter3. Prefix Tuning4. Prompt Tuning5. QLoRA&#xff08;Quantized LoRA&#xff09; 二…

flutter 打包mac程序 dmg教程

? 前提條件 ? 你已經在 macOS 上安裝了 Android Studio Flutter SDK。 ? Flutter 支持 macOS 構建。 運行下面命令確認是否支持&#xff1a; Plain Text bash 復制編輯 flutter doctor ---## &#x1f9f1; 第一步&#xff1a;啟用 macOS 支持如果是新項目&#xff0c;…

鴻蒙開發-動畫

1. 動畫-動畫特效 // 定義接口 (每個列表項的數據結構) interface ImageCount {url: stringcount: number }// 需求1: 遮罩層顯隱 透明度opacity 0-1 層級zIndex -1~99 // 需求2: 圖片縮放 縮放scale 0-1Entry Component struct Index {// 基于接口, 準備數據State images…

js:循環查詢數組對象中的某一項的值是否為空

循環檢查 selinfo 數組中的每一個對象&#xff0c;判斷其中的 po_qty 和 price 是否為空&#xff08;null、undefined 或空字符串 ""&#xff09;&#xff0c;可以使用以下幾種方法&#xff1a; 方法1&#xff1a;使用 forEach 循環檢查每一項 const selinfo this.…

x-cmd install | jellex - 用 Python 語法在終端里玩轉 JSON 數據!

目錄 核心功能與特點安裝優勢亮點適用場景 還在為命令行下處理 JSON 數據煩惱嗎&#xff1f;jellex 來了&#xff01;它是一款基于終端的交互式 JSON 和 JSON Lines 數據處理工具&#xff0c;讓你用熟悉的 Python 語法&#xff0c;輕松過濾、轉換和探索 JSON 數據。 核心功能與…

4月份到9月份看6本書第二天【ERP與企業管理】

ERP與企業管理 1-11章全面介紹了ERP的基本原理、物料管理功能、計劃功能、生產和采購管理功能、效益以及實施和應用ERP為企業帶來的深層次的變化。 第12章討論了軟件系統的選型。 第13章介紹了ERP實施和運行管理的方法 第14章介紹了國際上廣泛使用的ERP實施應用的評估方法。…

Opencv計算機視覺編程攻略-第十三節 跟蹤視頻中的物品

這是opencv系列的最后一節&#xff0c;主要學習視頻序列&#xff0c;上一節介紹了讀取、處理和存儲視頻的工具&#xff0c;本文將介紹幾種跟蹤圖像序列中運動物體的算法。可見運動或表觀運動&#xff0c;是物體以不同的速度在不同的方向上移動&#xff0c;或者是因為相機在移動…

001 藍橋杯嵌入式賽道備賽——基礎

個人筆記&#xff0c;不扭扭捏捏&#xff0c;一口氣到位。方便自己也方便大家 00 時鐘線 cubeMX已經完成了大多數工作 01 LED&#xff08;GPIO輸出&#xff09; 在使用LED的時候先把SN74HC573鎖存器PD2置高電平&#xff0c;然后寫入LED所要的高低電平&#xff0c;然后置PD2低…

案例-索引對于并發Insert性能優化測試

前言 最近因業務并發量上升,開發反饋對訂單表Insert性能降低。應開發要求對涉及Insert的表進行分析并提供優化方案。 ??一般對Insert 影響基本都在索引,涉及表已按創建日期做了分區表,索引全部為普通索引未做分區索引。 優化建議: 1、將UNIQUE改為HASH(64) GLOBAL IND…

【技術文章的標準結構與內容指南】

技術文章的標準結構與內容指南 技術文章是傳遞專業知識、分享實踐經驗的重要媒介。一篇高質量的技術文章不僅能夠幫助讀者解決問題&#xff0c;還能促進技術交流與創新。以下是技術文章通常包含的核心內容與結構指南。 1. 標題 一個好的技術文章標題應當&#xff1a; 簡潔明…