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

分片架构,Redis Cluster 分析

分片架构解决的问题

通过堆机器,提升读写性能,与存储性能

分片架构设计要点

分片规则 

选择Cardinality大的作为分片键,尽可能保证数据分布均匀

常见分片键: 基于主键(业务型数据),基于时间(流水型数据)

常见分片策略:

分片策略

实现举例

数据分布

以后扩展

基于Hash

hash(分片键)%分片数

一致性hash算法

数据分布均匀

不易扩容,扩容需要数据迁移

范围分片

例如按年分,按月,按日

数据分表可能不均匀

易扩展,扩展不需要数据迁移

路由规则

客户端如何找到数据所在分片

  •  静态路由: 配置文件。特点: 简单,不能扩展再平衡,例如:Mysql分表
  • 动态路由:实现复制,支持动态扩展,再平衡

动态路由方式

基本流程

特点

举例

配置中心

配置中心记录分片信息,客户端先访问配置中心,

获取分片信息之后进行读写操作

支持大规模集群,配置中心需要独立部署,需要高可用

MongoDB的Sharding模式

路由转发

所有分片都保存路由信息,客户端请求任意分片,

获取分片信息之后进行读写操作

架构简单,一般利用gossip协议,不支持大规模集群

Redis Cluster (官方推荐1000,实际建议100)

高可用

备份方式

特点

举例

独立备份

架构简单,硬件成本高,分片级别的复制

Mysql ,Redis等

相互备份

架构复杂,硬件成本低,数据块级别的复制

ElasticSearch 等

redis cluster 分析

特点

理论支持1000台,实际建议100台以内。 高性能,线性可扩展,无代理,异步复制。

架构图- 来自阿里云溪社区

分片规则

分片键

redis的key

分片方式

类似一致性Hash, 通过CRC16算法计算出来的哈希值,对16384(2^14)取模,取模之后得到的值就是对应的槽位,然后每个Redis节点都会负责处理一部分的槽位。

扩展1 一般hash算法缺点

hash(键值)%分片数量,如果有分片挂掉,分片数量会下降,整个集群会失效。

扩展2 一致性hash算法

CRC16算法计算出来的哈希值,对2^32取模

实例也分布在圆环(0-2^32)上,我们在圆环上按照顺时针的顺序找到第一个实例

实例可能分布不均匀,采用虚拟节点机制解决

路由规则

路由转发模式,一般利用gossip协议,所有分片都保存路由信息,客户端请求任意分片

集群为了分布均匀,再平衡,或,添加,删除master实例,存在重定向的情况。

重定向

场景

命令

说明

全部迁移完成的情况下

MOVED命令

1.MOVED把客户端所请求数据的最新实例地址返返回客户端

2.更新客户端缓存的哈希槽分配信息

哈希槽数据还在迁移中

ASK

1.ASK 命令把客户端所请求数据的最新实例地址返回给客户端

2.客户端需要给目标实例 发送 ASKING 命令,然后再发送操作命令

3.不更新客户端缓存的哈希槽分配信息

备份方式

独立备份

故障转移

某一个节点认为A宕机了,那么此时是主观宕机

集群内超过半数的节点认为A挂了, 那么此时A就会被标记为客观宕机

从A节点的slave节点中选举出一个,将其切换成新的master对外提供服务

http://www.lryc.cn/news/89424.html

相关文章:

  • Linux-0.11 文件系统bitmap.c详解
  • 【Linux】基本指令,拥抱Linux的第一步
  • CTF 2015: Search Engine-fastbin_dup_into_stack
  • DRF之全局异常处理
  • AI创作工具的使用体验报告
  • C++算法模板(转自acwing)
  • 阿里云服务器最新优惠价格及最新收费标准(2023更新)
  • React实现监听粘贴事件并获取粘贴板中的截图
  • ISO_IEC_7816-3
  • 学习C#反射(Reflection)
  • Spring Boot的核心组件和工作原理
  • 【指针的深刻理解】
  • lintcode-图的拓扑排序(java)
  • 【状态估计】基于随机方法优化PMU优化配置(Matlab代码实现)
  • Rinne Loves Graph
  • 第15章:索引的数据结构
  • 机械师曙光16电脑开机自动蓝屏怎么解决?
  • 机器学习_Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_02---人工智能工作笔记0037
  • 第五篇:强化学习基础之马尔科夫决策过程
  • Oracle面试题
  • 用Vue写教务系统学生管理
  • 专门用于管理企业与自己客户之间所有信息的客户管理系统
  • (转载)基于多层编码遗传算法的车间调度算法(matlab实现)
  • Redis的常用数据结构之哈希类型
  • 计算机组成原理-存储系统-缓存存储器(Cache)
  • 打开c语言生成exe文件,出现闪退的解决方法
  • 算法基础学习笔记——⑩DFS与BFS\树与图
  • chatgpt赋能python:Python中可迭代对象的介绍
  • 报表控件FastReport使用指南——如何打开WebP格式的图片
  • 【鲁棒、状态估计】用于电力系统动态状态估计的鲁棒迭代扩展卡尔曼滤波器研究(Matlab代码实现)