【分布式】分片存储服务器

news2024/11/18 22:24:27

完成了配置路由服务器之后,我们来到了对存储服务器的重构

在我们加入配置服务器组之后,我们发现我们的kvserver,也就是存储服务器还是单点的:

在这里插入图片描述
同样,我们可以借助之前实现的raft对单点进行拓展,我们可以设置三组分片存储服务器,每组三个,实现三副本,如下图:

在这里插入图片描述
这里我们引入几个概念:

  1. 资源池和可用区(故障隔离域)的概念。同一个资源池内的机型同构(简化资源调度逻辑,比如相同的磁盘数量和磁盘大小)。不同的业务可以使用不同的资源池,做到存储层资源隔离
  2. 不同交换机下的节点定义为不同的可用区(故障隔离域)。可用区之间实现交换机级别的隔离
  3. 每个存储集群由一个或者多个资源池组成。资源池之间IO隔离,资源池内部机型同构
  4. 每个资源池内部,由多个可用区组成。每个可用区由若干台服务器(存储节点)组成

简单来说,就是对于属于一组的分片存储服务器,为避免大规模宕机,它们应该处于不同的可用区当中,但是处于同于个资源池内,因为它们的机型同构(硬件配置相同)。

这里同学们理解即可,对于不是生产场景的系统,没有必要去严格划分。


除了将存储单点拓展为多点之外,我们对存储节点自身的架构也稍加探讨:

在这里插入图片描述

在之前添加配置服务器组的时候,我们说过,存储服务器本身也有一份配置,本身也维护了一张哈希槽表,也就是说,此时存储服务器架构为:

  1. 从上到下分为RPC层,shared层,引擎层
  2. RPC层负责通信
  3. shared层将RPC请求转化为对具体的某一个bucket的读写操作
  4. engine层负责将请求转化为对磁盘的请求

那么在存储时,我们的方案是:

  1. 请求进入RPC层之后, 根据shardid 进行分发,获取到对应的shard实例(句柄)
  2. shard使用key和value操作engine层
  3. 一个节点(或者一块磁盘)公用一个engine,使用shardID作为key前缀,用于区分不同的shard(在迁移的时候,可以使用shardID为前缀扫描属于该shard的所有的key和value)

除此之外,我们可以采用一个bucket对应一个engine,而不是之前的全局公用,这样不仅实现更简单,同时,数据迁移时我们直接对整个engine进行拷贝即可,不再需要扫描了


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode热题100】打卡第7天:盛最多水的容器

文章目录 盛最多水的容器⛅前言🔒题目🔑题解 盛最多水的容器 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合…

自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板,排针间距和Arduino Nano 相同,整体尺寸略小,适合插在面包板上。兼容HK32F030MF4P6 和0301M,板载CH340N 串口和DS1307 时钟模块。开源工程地址:HK32F030MF4P6 紧凑开发板…

Python学习36:文本分析与加密

类型:字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪…

测试百科:白盒测试用例的设计

正文 语句覆盖:每条语句至少执行一次。判定覆盖:每个判定的所有可能结果至少出现一次。(又称“分支覆盖”)条件覆盖:每个条件的所有可能结果至少执行一次。判定/条件覆盖:一个判定中的每个条件的所有可能结…

PyTorch-网络模型的保存和读取

1. 模型的保存 方法一:保存模型的结构模型的参数 陷阱:需要让文件访问到你自己的模型定义方式,可以用import的方式引入先前的模型定义。 model_save.py import torch import torchvisionvgg16 torchvision.models.vgg16(weightsNone) # …

Linux— 网络编程套接字

目录 预备知识 认识端口号 理解源端口号和目的端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 sockaddr 结构​编辑 sockaddr_in 结构 in_addr结构 地址转换函数 简单的UDP网络程序 实现一个简单的英译汉的功能 简易的远程…

注解-反射-XML配置原理

java刚开始原本是直接在方法中创建对象执行程序等,部分代码重复率高,后来就发展成方法封装调用,再后来出现的像spring框架等,引入了XML配置,使得程序更加简洁,方便等,其中XML配置也是基于java反…

java 线程安全和多线程

文章目录 前言一、ThreadLocal是什么?二、synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁,二者的主要区别有以下 5 个:三、线程安全的集合类有哪些?四、说一下你对CompletableFuture的理解四、项目中是如何创建线程池…

R语言生物群落(生态)数据统计分析与绘图(从数据整理到分析结果展示)

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线,通过多个来自经典…

C++类和对象三

文章目录 类和对象三初始化列表用途与特性 explicit关键字再谈构造函数static成员static的特性 友元友元函数友元函数特性 友元类友元类特性 内部类概念特性 匿名对象拷贝对象时的一些编译器优化 类和对象三 初始化列表 初始化列表:以一个冒号开始,接着…

【源码解析】Spring Bean生命周期源码解析

Spring启动核心 AbstractApplicationContext#refresh,Spring刷新容器的核心方法。最关键的就是 AbstractApplicationContext#invokeBeanFactoryPostProcessors,扫描BeanAbstractApplicationContext#finishBeanFactoryInitialization,生成Be…

【MySql】InnoDB一棵B+树可以存放多少行数据?

文章目录 背景一、怎么得到InnoDB主键索引B树的高度?二、小结三、最后回顾一道面试题总结参考资料 背景 InnoDB一棵B树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞…

[C语言实现]带你手撕带头循环双链表

目录 什么是双链表? 带头结点的优势: 双链表的实现: 什么是循环双链表? 众所周知,顺序表的插入和删除有时候需要大量移动数据,并且每次开辟空间都可能会浪费大量内存和CPU资源,于是我们有了链表,我们之…

【实用篇】SpringCloud01

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

基于复旦微 JFM7K325T 全国产FPGA的高速数据采集、图像处理方案

板卡概述 PCIE-XM711 是一款基于 PCIE 总线架构的高性能数据预处理 FMC载板,板卡采用复旦微的 JFM7K325T FPGA 作为实时处理器,实现 各个接口之间的互联。该板卡可以实现 100%国产化。 板卡具有 1 个 FMC(HPC)接口,1 路…

这10道测试用例面试题,面试官肯定会问到

前言 软件测试面试中,测试用例是非常容被问到的一个点,今天小编就给大家把最常见的测试用例方面的问题给大家整理出来,希望对大家的面试提供帮助。 1、 什么是测试用例‍ 答:测试用例的设计就是如何覆盖所有软件表现出来的状态…

硬盘有多少图片取决我的网速, Python获取硬盘少女图集

目录 前言开发环境:案例实现的步骤:代码展示尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 图片数据在网络中随处可见, 如果需要一些图片素材 一睹为快把! ! ! 开发环境: 解释器: python 3.8 编辑器: pycharm 2022.3 专业版 内置模块使用 os &g…

CH341的I2C接口编程说明

CH341的I2C接口特性: 1、支持I2C速度20K/100K/400K/750K; 2、默认不支持设备的ACK应答监测,即忽略ACK状态;强制支持需修改软件; 引脚序号功能说明24SCL23SDA Windows系统SPI通讯接口函数 HANDLE WINAPI CH341OpenD…