讲解分布式数据存储的核心算法,数据分布的算法

hash 算法 -> 一致性 hash 算法(memcached) -> redis cluster 的 hash slot 算法

用不同的算法,就决定了在多个 master 节点的时候,数据如何分布到这些节点上去,解决这个问题

看到这里的时候,已经明白了,可能是通过 key 去路由到多个 master 上的

redis cluster 介绍#

  • 自动将数据进行分片,每个 master 上放一部分数据
  • 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的

在 redis cluster 架构下,每个 redis 要放开两个端口号,比如一个是 6379,另外一个就是加 10000 的端口号,比如 16379

16379 端口号是用来进行节点间通信的,通过 cluster bus(集群总线)。cluster bus 的通信是用来进行故障检测,配置更新,故障转移授权

cluster bus 用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间

最老土的 hash 算法和弊端(大量缓存重建)#

的确它的最大弊端就是,增加或者减少节点的时候,基本上所有数据都要重建路由

一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡)#

  • 优点:自动缓存迁移
  • 缺点:缓存热点问题

一致性 hash 的严重问题是缓存热点,关键字是 区间,因为它是一个环,顺时针找可用节点,所以只要节点够多,就能更均匀的均衡负载。

所以出现了虚拟节点,来解决这个缺点

如上图,假设只有 3 个物理节点,但是在这个环上,分布了若干个虚拟节点(最后指向的是物理节点)

对于数据落在 1-3 这个区间

  • 无虚拟节点:顺时针向右,全部导向了节点 3
  • 有虚拟节点:顺时针向右,被多个虚拟节点分割,可能会遇上节点 1、2、3 。这样就负载均衡了

redis cluster 的 hash slot 算法

redis cluster 有固定的 16384 个 hash slot,对每个 key 计算 CRC16 值,然后对 16384 取模,可以获取 key 对应的 hash slot

redis cluster 中每个 master 都会持有部分 slot,比如有 3 个 master,那么可能每个 master 持有 5000 多个 hash slot

hash slot 让 node 的增加和移除很简单:

  • 增加一个 master,就将其他 master 的 hash slot 移动部分过去
  • 减少一个 master,就将它的 hash slot 移动到其他 master 上去

移动 hash slot 的成本是非常低的

客户端的 api,可以对指定的数据,让他们走同一个 hash slot,通过 hash tag 来实现

如上图,思路与一致性 hash 是一样的。通过更过的 hash slot,将路由分布得更均匀。
当一台机器挂掉之后,会在极短的时间内,将挂掉的 hash slot 分配给其他两个物理节点

可以看成是 -> hash slot -> 机器,hash slot 数量固定,不一一对应机器,动态分配的。

数据分布算法:hash+ 一致性 hash + redis cluster 的 hash slot的更多相关文章

  1. 11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介绍

    分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 一.hash 算法 来了一 ...

  2. redis cluster和hash slot

    redis cluster介绍 从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代. redis cluster 支撑 N 个 redis ma ...

  3. redis cluster介绍

    讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法 一.概述 1.我们的m ...

  4. redis cluster集群的原理

    redis集群的概述: 在以前,如果前几年的时候,一般来说,redis如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有codis,或者twemproxy,都有.有一些red ...

  5. Redis实战 - 3.Hash

    hash Redis的Hash有点像一个对象(object),一个Hash里面可以存多个Key-Value对作为它的field,所以它通常可以用来表示对象. Hash里面能存放的值也能作为String ...

  6. Redis cluster集群模式的原理

    redis cluster redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片,每个master上放一部分数据 提供内 ...

  7. 高可用Redis:Redis Cluster

    转(https://www.cnblogs.com/renpingsheng/p/9862485.html) Redis Cluster是Redis官方提供的Redis集群功能 1.为什么要实现Red ...

  8. redis cluster 集群畅谈(一)

    redis单机在大数据量情况的会出现瓶颈问题,通过redis 主从架构和 哨兵集群结合可以实现99.99% 高可用 .水平扩容支持更高QPS的解决方案. 在大数据量面前,主从架构结合哨兵集群的解决方案 ...

  9. Redis Cluster(Redis 3.X)设计要点

    Redis 3.0.0 RC1版本号10.9号公布,Release Note这个版本号支持Redis Cluster.相信非常多同学期待已久,只是这个版本号仅仅是RC版本号,要应用到生产环境,还得等等 ...

  10. 面试系列17 redis cluster

    1.redis cluster介绍 redis cluster (1)自动将数据进行分片,每个master上放一部分数据(2)提供内置的高可用支持,部分master不可用时,还是可以继续工作的 在re ...

随机推荐

  1. pfx文件导出pem和私钥,更换网站域名证书

    openssl 路径: C:\Program Files\OpenSSL-Win64\bin -- 导出pem证书openssl pkcs12 -in C:\BackUp\Lightning\cert ...

  2. CMAKE的学习

    下面我们来介绍Cmake Cmake 我们着重介绍一下CMAKE,是因为CMAKE现在用的人比MAKEFILE多一些,也更好理解,编写一些. 1 安装 cmake 1.1 卸载已经安装的旧版的CMAK ...

  3. 矢量数据库与LLM的集成:实践指南

    矢量数据库与LLM的集成:实践指南 本文将了解到什么是矢量数据库,以及如何与LLMs进行集成.通过LLMs和向量数据库的结合,可以节省微调带来的开销和时间. 通常,LLM会在各种各样的数据上进行训练, ...

  4. drf(请求和响应)

    一 请求 源码分析 from rest_framework.request import Request class Request: def __init__(self, request, pars ...

  5. 04.JavaIO流问题

    目录介绍 4.0.0.1 说一下Java IO里面的常见类,字节流,字符流.接口.实现类.方法阻塞? 4.0.0.2 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多 ...

  6. HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)

    一.原题链接 Problem - 2045 (hdu.edu.cn) 二.题面 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole&quo ...

  7. Python 批量合并csv文件

    一.批量合并csv文件<方法1> import pandas as pd import glob import os # 获取所有CSV文件的路径 file_paths = glob.gl ...

  8. EVENG导入Win7镜像以后可以启动无法VNC打开

    原因:未安装支持 eveng 的 vncviewer 解决方法:下载 vncviewer: https://pan.eve-ng.cn/Tools/EVE-NG/Client/EVE-NG-Win-C ...

  9. matlab学习系列

    matlab系列学习 1.学习缘由 本来已经学习过这个软件,了解了包括电路仿真在内的诸多功能,能够比较熟练地编写m文件和函数. 但是,在最近的依次练习中发现之前的许多操作都忘记了.有一些基本的语法都不 ...

  10. HTML实现发送接收串口和TCP数据

    前提 请安装通讯调试工具,所有的网页必须运行在本工具上,在其他浏览器直接打开是不行的. 效果显示 在网页上右键打开,选择其他应用 2.在其他应用中找到通讯调试工具 如果没有这一项,点更多,在计算机中查 ...