当前位置: 首页 > news >正文

使用一致性哈希解决哈希分片负载均衡的扩展性问题

声明:本文的图全部源于:小林coding

上来咱先说,一致性哈希是应对分布式系统的算法

假设有一个负载均衡问题,也就是大批流量来请求,那怎么分配这些流量?

随机?还是挨个轮询?

这都可以,甚至不同机器的配置不同,可以根据配置分配权重,然后分发流量

但是流量可以如此,数据呢?有亿级数据,如何拆分,使得访问请求不会造成数据库崩掉?

通常来讲可以范围分片或者哈希分片,将数据拆分到不同的存储节点上去。假定选择ID,那有可能热点数据集中到同一张表里了,没起到分摊访问数据库流量的作用。哈希分片确实是一种可以均匀分散数据到不同节点上的算法。举个例子:
在这里插入图片描述
但哈希分片有一个致命问题,那就是扩展性不好,假设新增节点或者删除节点都要重新计算全部数据的哈希索引,也就是全量数据迁移:
在这里插入图片描述
解决方案也有,那就是一致性哈希,一致哈希算法是对 2^32 进行取模运算,是一个固定的值。可以想象有一个圈,存储节点做哈希,比如根据节点的 IP 地址进行哈希。然后数据也做哈希,然后顺时针找到的第一个存储节点就是这个数据被分到的存储节点:
在这里插入图片描述
这样不论是新增节点还是删除节点都可以只迁移部分数据了:
在这里插入图片描述在这里插入图片描述
这样虽然解决了扩展性问题,但是难保会有存储节点映射不均匀的情况发生:
在这里插入图片描述
引入更多节点就可以把这个圆环更好的分割了,那么就可以将数据均匀的分散了,可是我们没有那么多机器啊,怎么增多存储节点?
答案就是引入虚拟节点,映射到圆环上的是虚拟节点,而每个真实节点可以被若干虚拟节点映射到:
在这里插入图片描述

当某个真实节点被移除时,该节点的多个虚拟节点均会移除。

还可以为硬件配置更好的节点增加权重,比如对权重更高的节点增加更多的虚拟机节点。

相关文章:

使用一致性哈希解决哈希分片负载均衡的扩展性问题

声明:本文的图全部源于:小林coding 上来咱先说,一致性哈希是应对分布式系统的算法 假设有一个负载均衡问题,也就是大批流量来请求,那怎么分配这些流量? 随机?还是挨个轮询? 这都…...

探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件

Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件,为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面,即使对于初学者来说,也能快速上手并开始创作。其强大的媒体管理功能&#x…...

三勾点餐系统|支持多端发布,方便二次开发

版本号1.7更新日志 新增:腾讯地图key设置(更新后请设置key) 新增:支付宝小程序登录和支付 新增:前端点餐时选择门店 新增:前端点餐页面优惠活动显示 新增:H5修改手机号 新增:H…...

深入理解AES加密算法:原理与Python实现

目录 深入理解AES加密算法:原理与Python实现1. AES算法简介2. AES加密解密流程3. Python实现AES加密解密4. 结论 深入理解AES加密算法:原理与Python实现 AES (Advanced Encryption Standard) 是目前最广泛使用的对称加密算法之一。它具有高效、安全和灵…...

Redis中List数据类型常用命令

目录 1. 基本操作 (1)在列表的头部插入一个元素 (2)在列表的尾部插入一个元素 (3)获取列表的长度 (4)获取列表中的元素 2. 读取和修改 (1)获取列表的范围&…...

借助Aapose.Cells 使用 C# 在 Excel 中读取、添加和编辑线程注释

Excel 中的线程注释是协作工作的重要功能。它允许多个用户在共享文档中添加、编辑和查看对话线程。在某些情况下,我们可能需要以编程方式管理这些线程注释。在这篇博文中,我们将学习如何使用 C# 在 Excel 中读取、添加和编辑线程注释。 Aspose.Cells 是…...

关于c++ grpc 和 c# grpc 通信的问题 以及 grpc 认证问题

一、c 和 c# 通信 c# 端服务器 如果域名 输入的是 https ,则 c 端需要匹配使用,也就是c 端需要进行安全认证。如果是http 则c 端不需要认证(基于c#的grpc 未 通信成功) 参考如下网址可以写一个简单的 .net grpc服务器 &#xff08…...

C++进阶(14)类型转换、IO流

文章目录 一、类型转换C语言隐式类型转换强制类型转换 C类型转换的情况类型转换的函数(4个) 二、IO流1、缓冲区2、提高输入输出效率3、文件操作文件权限写操作 --- ofstream文本方式写入二进制方式写入 读操作 --- ifstream文本方式读取二进制方式读取 其…...

配置oss cdn加速静态资源访问 阿里云

效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页,找到并点击“对象存储 OSS” 创建存储空间(Bucket) 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…...

实现 前端框架 SPA 路由功能:Hash 模式与 History 模式的手动实现

前言 在前端框架(如 Vue.js、React 等)中,路由管理通常会配置一个 router 对象来定义 URL 路径与组件的映射关系。 路径(path): 这是浏览器 URL 的一部分,比如 /home 或 /about。组件(compone…...

去中心化的新时代:Web3技术的全球影响

随着技术的不断演进,Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2,Web3通过去中心化、区块链和智能合约等技术,正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度,也对全球经济、社会和文化产生了深…...

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说,两侧都可以插入和删除,时间复杂度是O(1)。 有很多的操作,比如 llen 可以获取List的长度,lrem 可以删除元素 ,lrange可以去一个字符串 , lindex可以根据下标…...

Java | Leetcode Java题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {private class Node {// 哈希表存储关注人的 IdSet<Integer> followee;// 用链表存储 tweetIdLinkedList<Integer> tweet;Node() {followee new HashSet<Integer>();tweet new LinkedList<Integer&g…...

MVC与三层架构分层

1. 应用分层 应用分层类似公司的组织架构。我们进行项目开发时&#xff0c;最开始功能简单&#xff0c;前后端放在一起开发&#xff0c;但随着项目功能的复杂&#xff0c;项目会被前端和后端不同的团队接手&#xff0c;甚至更细粒度的团队。甚至后端开发也会根据功能再进行细分…...

Go语言基础--switch

在Go语言中&#xff0c;switch语句是一种非常强大的控制流结构&#xff0c;它允许一个变量的值与多个case进行比较&#xff0c;并根据匹配的结果执行不同的代码块。与C、C或Java中的switch不同&#xff0c;Go语言的switch更灵活&#xff0c;支持没有显式条件的switch&#xff0…...

【数字ic自整资料】AXI握手协议及outstanding

参考资料&#xff1a; ic基础|时序篇&#xff1a;握手协议valid和ready的时序优化_valid和ready握手信号-CSDN博客 https://zhuanlan.zhihu.com/p/365573848 1、AXI握手协议 当我们遇到时序违例时&#xff0c;通常采用的方式为插入寄存器&#xff08;打拍&#xff09;或者是…...

C++ //练习 18.13 什么时候应该使用未命名的命名空间?

C Primer&#xff08;第5版&#xff09; 练习 18.13 练习 18.13 什么时候应该使用未命名的命名空间&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 当需要将实体限定在特定文件中&#xff0c;并且不会作用于不同文件…...

yum小bug

这个错误是在克隆的机子上安装mysql时&#xff0c;查看有无mysql发现的 [rootwebserve-2 backup] # yum list installed | grep mysql Repository cr is listed more than once in the configuration Repository fasttrack is listed more than once in the configuration 这…...

GDB的基本使用

我有话说 因为时间和精力原因&#xff0c;本文写的虎头蛇尾了&#xff0c;除了启动调试与程序执行以外只有少量截图演示&#xff0c;只是简单的说明。如果有需要可以联系我&#xff0c;我有时间的话会把演示补上&#xff0c;谢谢理解。 启动调试与程序执行 启动调试并传递参数…...

如何利用AI创作高质量的文章

讯飞星火 利用AI创作高质量的文章需要遵循以下步骤&#xff1a; 确定主题和目标受众&#xff1a;在开始写作之前&#xff0c;明确文章的主题和目标受众。这将帮助你确定文章的风格、结构和内容。 收集资料和信息&#xff1a;在撰写文章之前&#xff0c;进行充分的研究&#x…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...