KV集群的请求分发

假定N为后台服务节点数,当前台携带关键字key发起请求时,我们通常将key进行hash后采用模运算 hash(key)%N 来将请求分发到不同的节点上, 后台节点的增删会引起几乎所有key的重新映射, 这样会造成大量的数据迁移,如果数据量大的话会导致服务不可用.

一致性哈希机制

我倾向于称之为一致性哈希机制而不是算法, 因为这其实和算法没太大关系. 设计这种机制的目的是当节点增减时尽量减小重新映射的key的数量, 尽量将key还映射到原来的节点上. 而对于一致性哈希机制, 如果集群有K个key映射到N个节点, 那么在增删节点时引起的key的迁移不会超过K/N个.

一致性哈希的原理

一致性哈希机制的原理, 是将集群节点分布到一个圆上, 各节点预设一个key, 这些key的hash值集中后可得到一个数组, 将该数组排序后首尾相连形成一个圆, 节点的key分布在圆的不同弧段上.

对于请求的key, 其hash值会落入该圆的某一弧段, 按顺时针方向遇见的第一个节点即为其对应节点.

减少节点: 如果删除某一节点, 或者是这个节点故障宕机了, 之前映射到这个节点的key, 会顺时针移到下一个节点, 而其他弧段不受影响.

增加节点: 与减少节点类似, 新的节点会加入到某一个弧段中, 这样原来这个弧段对应的一部分key, 则会落入新加入的节点.

减少热点

由于业务数据的不均或者是哈希算法的原因, 会造成一些热点节点. 可以通过以下方式减轻节点的热点现象

虚拟节点 Replica

虚拟节点是建立在物理节点之上的一种逻辑节点, 目的是为了将物理节点负责的弧段打散并尽量均匀(或随机)分布在整个圆上. 实现方式为: 对每一个物理节点, 为其创建M个虚拟节点后再加入圆环. 因为这些虚拟节点的key得到的hash值是分散的, 所以其在圆环上的分布也是分散的, 在所有的虚拟节点都加入圆环后, 每个物理节点实际上都在圆上分散地控制了M段圆弧.

对于请求的key, 其hash值会映射到某一个虚拟节点, 而热点区域的虚拟节点实际上底下对应的是多个物理节点, 这样就将热点分散到了不同的物理节点上.

哈希槽 Hash Slot

这是Redis集群的做法, 其实是虚拟节点的一种特殊形式. 针对使用的哈希算法, 在一开始就将哈希值拆分为1024或更多个小区间, 这些小区间就是哈希槽, 这些哈希槽会映射到不同的节点. 在节点减少前, 需要将这个节点的哈希槽分配给其他节点, 在增加节点时, 需要将其他节点的哈希槽挪一部分过来. 通过调整哈希槽在各个物理节点间的分配可以对热点进行分散.

用于KV集群的一致性哈希Consistent Hashing机制的更多相关文章

  1. memcached集群和一致性哈希算法

    场景 由于memcached集群各节点之间都是独立的,互不通信,集群的负载均衡是基于客户端来实现的,因此需要客户端用户设计实现负载均衡算法. 取模算法 N个节点,从0->N-1编号,key对N ...

  2. 一致性哈希(consistent hashing)算法

    文章同步发表在博主的网站朗度云,传输门:http://www.wolfbe.com/detail/201608/341.html 1.背景        我们都知道memcached服务器是不提供分布 ...

  3. 深入一致性哈希(Consistent Hashing)算法原理,并附100行代码实现

    转自:https://my.oschina.net/yaohonv/blog/1610096 本文为实现分布式任务调度系统中用到的一些关键技术点分享——Consistent Hashing算法原理和J ...

  4. 4.安装fluentd用于收集集群内部应用日志

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-13 11:02:14 星期四 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  5. 一致性hash算法Consistent Hashing

    一致性hash算法Consistent Hashing 对于原有hash算法hash%n so... 1.话不多说直接上代码,原理或详解自行百度即可 import cn.pheker.utils.Ut ...

  6. [转]HBase hbck——检察HBase集群的一致性

    Hbase提供了hbck命令来检查各种不一致问题.hbck的名字仿效了HDFS的fsck命令,后者是一个用于检查HDFS中不一致问题的工具.下面这段非常易懂的介绍出自于hbck的源程序. 检查数据在M ...

  7. Web集群缓存一致性的思考

    共享cache+数据库实现缓存一致性: 1.1 memcache + mongo+定时器 1.1.1 memcache 优点:web集群共享数据 缺点:数据生命周期的不可预估性 1.1.2 mongo ...

  8. SSD固态盘应用于Ceph集群的四种典型使用场景

    在虚拟化及云计算技术大规模应用于企业数据中心的科技潮流中,存储性能无疑是企业核心应用是否虚拟化.云化的关键指标之一.传统的做法是升级存储设备,但这没解决根本问题,性能和容量不能兼顾,并且解决不好设备利 ...

  9. Golang 实现 Redis(7): Redis 集群与一致性 Hash

    本文是使用 golang 实现 redis 系列的第七篇, 将介绍如何将单点的缓存服务器扩展为分布式缓存.godis 集群的源码在Github:Godis/cluster 单台服务器的CPU和内存等资 ...

随机推荐

  1. Spring IOC 总结

    IOC 简介 IOC是(Inversion of Control,控制反转)的简写.Spring提供IOC容器,将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的的过度程序耦合.它由DI( ...

  2. Python学习日记(二十八) hashlib模块、configparse模块、logging模块

    hashlib模块 主要提供字符加密算法功能,如md5.sha1.sha224.sha512.sha384等,这里的加密算法称为摘要算法.什么是摘要算法?它又称为哈希算法.散列算法,它通过一个函数把任 ...

  3. Upgrade Windows Server 2016 to Windows Server 2019

    Pre-Upgrade Upgrade path: Windows Server 2016 can be upgraded to Windows 2019 in a single upgrade pr ...

  4. ArcGIS操作技巧——怎样把地图放到PPT中,并且进行编辑?

    需求:把arcgis配好的矢量地图插入到ppt中,并且要求可以在PPT中进行修改和重新着色.编辑. 效果:如下图所示: 操作过程: 方法一: 在最上面工具栏找到edit——>copy map t ...

  5. Go - IDE的选择与GoLand的安装

    目录 常用编辑器的选择 IDE的选择 GoLand的下载与安装 下载 安装 常用编辑器的选择 编写go程序,可以选择的编辑软件有很多,其中包括: notepad++ sublime visual st ...

  6. 用Python添加写入数据到已经存在的Excel的xlsx文件

    # coding:utf-8 from openpyxl import load_workbook import openpyxl # 写入已存在的xlsx文件第一种方法 # class Write_ ...

  7. HRBUST 2040 二叉树的遍历

    给出一棵二叉树的中序和前序遍历,输出它的后序遍历. Input 本题有多组数据,输入处理到文件结束. 每组数据的第一行包括一个整数n,表示这棵二叉树一共有n个节点. 接下来的一行每行包括n个整数,表示 ...

  8. 《BUG创造队》第九次团队作业:Beta冲刺与验收准备

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目验收 团队名称 BUG创造队 作业学习目标 (1)掌握软件黑盒测试技术:(2)学 ...

  9. 项目Beta冲刺(团队)-凡事预则立

    所属课程 软件工程1916|W(福州大学) 作业要求 项目Beta冲刺(团队)-凡事预则立 团队名称 基于云的胜利冲锋队 作业目标 为 Beta 冲刺规划安排 1.讨论组长是否重选的议题和结论 由于我 ...

  10. python获取参数列表

    def f(a=1, b=2, c=3): print(locals())#在函数内获取 #使用inspect模块,简单方便 python2.7: import inspectinspect.geta ...