听小董谝存储 八

2023-11-05 15:21
文章标签 存储 小董

本文主要是介绍听小董谝存储 八,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

序章

Dispatcher

Mover

几个问题


我爱glt

序章

前面几章,其实已经把这个存储系统的核心模块说清楚了。但是一些附属模块,例如dispatcher与mover还是没有讲。这一节,作为整个系统的最后一篇,就说说这两个模块。

Dispatcher

其实整个dispatcher的功能很简单的,就是发现集群里面的不稳定因素,然后找人处理而已。

那么具体什么情况算是不稳定因素呢?

  •       某个datashard的体积太大(单个datashard理论上可以达到一个卷的体积那么大)
  •       某个particle或者某个卷dead
  •       某个业务用的datashard太多了,需要合并
  •       某个业务用的datashard太少了,读写性能不够,需要分裂
  •       某组机器上占用的体积超过、少于平均值n个百分点

发生类似上面的情况,就说明数据需要发生搬迁分裂合并等操作了,然后dispatcher就计算应该几个并发,在不影响现网读写的情况下,指挥mover进行数据搬迁分裂合并。

完了,dispatcher的功能就是这么简单。那么再问一句,它所需要的原始数据从哪里来呢?答案就是Master。

Mover

前文已经不止一次说了mover的功能就是进行数据搬迁分裂与合并。

那咱们就以搬迁为例,说说它具体怎么操作。如下图一,就是particle的简略写数据流程。

                                              

 

                                                                                            图一 particle简略的写流程                       

具体搬迁的时候,Mover只需要把历史数据搬迁走就OK了,新增数据protal那一层已经采用了双写模式,不用担心。那具体的历史数据怎么读取呢。直接把要搬迁的data shard所属的block打包搬迁走就OK了。如下图二。

                       

 

                                                                                            图二 Mover执行搬迁任务

新的机器那边,收到一个block后,先放到自己的磁盘里,然后把里面的每一个值都解析一下,反向更新到索引节点里。

那搬迁什么时候算是个头呢?老的机器那边数据一直在下刷,一直有新的block产生。

那就在搬迁的过程中,禁止这个data shard的DataRegion下刷。

这样一来,历史的数据占据了几个磁盘里面的block就是确定的了,终归是能搬迁完的。

几个问题

  • 可是如果搬迁需要很长时间,然后数据又一直写,dataregion的长度不够了怎么办?

我们设定了搬迁的最长时间,绝大多数的data shard在这个时间内都能搬迁完成。

  • 那如果就是有一个data shard写入的速度很快,时间就是不够怎么办?

首先,因为整体的路由是经过hash的,所以data shard的写入频率是和它负责的区域长度相关的,如果一个data shard负责的范围太大,前面的dispatcher就会识别到这种问题,先一步进行数据分裂。如果真的dispatcher出问题了,导致有一个data shard的增长速度特别快,在给定的时间内不能搬迁完成,那就只能手动调整搬迁时间了。

 

这篇关于听小董谝存储 八的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350754

相关文章

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

MySQL中存储过程(procedure)的使用及说明

《MySQL中存储过程(procedure)的使用及说明》存储过程是预先定义的SQL语句集合,可在数据库中重复调用,它们提供事务性、高效性和安全性,MySQL和Java中均可创建和调用存储过程,示例展... 目录概念示例1示例2总结概念存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

MySQL存储过程实践(in、out、inout)

《MySQL存储过程实践(in、out、inout)》文章介绍了数据库中的存储过程,包括其定义、优缺点、性能调校与撰写,以及创建和调用方法,还详细说明了存储过程的参数类型,包括IN、OUT和INOUT... 目录简述存储过程存储过程的优缺点优点缺点存储过程的创建和调用mysql 存储过程中的关键语法案例存储

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os