首页 >> 大全

听小董谝存储 三

2023-11-05 大全 25 作者:考证青年

目录

序章

第一章 的功能

第二章 资源管理

2.1 上下架

2.2 上架

2.3 上架与mover

第三章 业务管理

第四章 路由管理

4.1 data shard的数据结构

4.2 data shard的生命周期

4.3怎么知道路由变更了

4.4变更了之后,怎么做

4.5 保证各个路由一致

序章

前面两章基本上只是告诉了大家一个存储系统最顶层的模块与路由是什么样子的,但是具体各个模块都是怎么工作的我们依然一无所知,从这一章开始,我们就依次深入了解一下,,都是怎么工作的。

这一节 我们先了解一下

第一章 的功能

图一 整体框架

图二 路由样式

老鸟:小菜,图一图二就是前面两章的总结。咱们这一节说的是模块的功能。那么第一步,咱们就得先总结出都有哪些功能。你先谈谈你的看法吧。

小菜:首先从图一来看,管理了全局各个模块,那么首先应该有资源管理的功能。换句话说,,的增加与删除都应该由管理。然后,业务管理。也就是说为某个用户新增一个业务/删除一个业务,也需要通过。既然有业务管理,那么那个业务的路由管理肯定也是的职责了。我大概就能想到这么多了。

老鸟:嗯基本也就这3个功能了。咱们开始吧。

第二章 资源管理

老鸟:说到资源管理,那咱们就先明确一下什么叫资源。看图一来说,整个集群里除了外,所有的模块都是资源,都归管。

OK,咱们再明确一下整个集群里各个模块的功能。

:统一管理集群内的资源,业务与路由。

:做用户请求的转发。

:具体的存储数据。

:探测集群内是否需要数据搬迁合并分裂的场景,如果有,把任务分配给Mover。

Mover:根据分配的任务,执行具体的数据搬迁分裂合并工作。

2.1 上下架

老鸟:首先前文已经说了,为了保证数据安全性,咱们的一组是按照一主两副部署的。所以每次上架机器的时候也都是3台服务器一起部署的。对来说,并没有对外暴露上下架的功能,反而是化整为零,把这一组机器划分成n个(卷)每个卷都是一个固定的大小,然后循环调用上下架卷的功能。

小菜:你说化整为零,为什么不能直接上架整机呢?

老鸟:作为具体存储数据的模块,咱们的是可以采用多种机型的。有的机器是12个磁盘,每个磁盘300G;有的机器是4个磁盘每个磁盘3000G。如果按整机上下架,那么那边就得区分不同的机型,但是反过来如果按照卷来计算,就屏蔽了存储机型差异对的影响。对来说,数据是存储在一个一个卷上面的,每个卷都有他自己的编号。(如下图三,两种机型,有不同的卷数)

图三 不同的机型 提供不同数量的卷

小菜:把层次的整机打散成一个个的卷,那么一个个卷下面还有没有别的层次?

老鸟:有的。还记得之前说的data shard么。对来说,不同的机型提供不同数量的卷,每个卷的大小都是一样的。同时每个卷又能提供固定数量的data shard。Data shard,卷,,整个集群的概念可以类比真实世界里的仓库。

就是仓库的厂长。就是一个个厂房。一个仓库可以有多个厂房,厂房的面积有大有小,每个厂房里面可以摆放不同数量的货架,这个货架就是data shard。所有的货架的容量都是相同的。每个货架上都摆着相同数量的货篮。货篮是厂长进行数据管理的最小单位,而这每一个最小单位都是由(货架编号,货篮编号)这个二元组来唯一标识的。

小菜:层级关系我懂了,那么每个货篮是怎么存放货物的呢?

老鸟:这个是整个存储系统的核心,这个问题你先记着,咱们后面讲到模块的时候再说。

2.2 上架

上架就比简单多了,在注册一下,同时把路由推送给就OK了。

2.3 上架与mover

上架着两个组件比还简单,光在注册一下就OK。

第三章 业务管理

老鸟:所谓的业务管理,说白了就是每次新来一个客户给他分配data shard并记录的过程。

小菜:没听懂。

老鸟:依然用上面的仓库举例。村东头的王大妈找到仓库的厂长,说需要10个货篮放鸡蛋。村西头的李大爷要13个货篮放自己产的苹果。然后厂长就遍历一下自己管理的所有货架,看看那些货架比较空闲,挑出来还没有被用的货篮分配给二老就OK。所谓的业务管理说白了就是分配并关联data shard与业务的过程。

第四章 路由管理

小菜:路由管理都是具体管理什么呢?

老鸟:其实我也很不喜欢这个路由这个词,有时候是名词,有时候是动词,有时候还能是形容词。但是在这里,它的语义就是保证各个的路由状态一致,同时也记录了里面每个data shard的状态。

小菜:听得很模糊。

老鸟:没事。咱们慢慢说。先说说data shard的状态。这个很容易理解吧,新上架的里面的data shard 还没有分配给用户使用,后面分配给用户使用,后面还有可能服务器断电导致数据不可访问,这么多现实情况,data shard肯定也是有不同的状态与之对应的。Data shard这些不同的状态我们一般叫它生命周期。

4.1 data shard的数据结构

小菜:说了这么多一个路由到底是个什么数据结构呢?

老鸟:你觉得呢?

小菜:一个路由指明了某一段槽位里面的数据应该存储到哪些机器的哪个卷的哪个data shard。【, , , , , , , , , 】如何?

老鸟:很OK,很直观。如果某个业务有1w个,那这个业务的路由就是一个list,list里面每个元素都是上面那个结构,list的长度是1w。对吧?

小菜:是这个意思。

老鸟:假定槽位总数是100w,如果某个key经过hash后对100w取余,结果是。请问时间复杂度是多少?

_听小董谝存储 三_听小董谝存储 三

小菜:O(N),感觉方案不行呀。

老鸟:顺序存储只能是数组形式么?为什么不试试跳表呢?

小菜:好棒,那这样就可以把时间复杂度降低到O(logN)

老鸟:如果 发生了分裂,路由该怎么变化?

小菜:好像有点麻烦哦。。。。

老鸟:所以简单点,如果有1w个data shard,那么就申请一个长度为100w的数组,【0,99】存储的值都指向1号data shard,【100,199】存储的值都指向2号data shard……这样一来查找的时间复杂度就变成了O(1)。同时data shard的分裂合并都简单了直接改对应槽位的data shard编号即可。这就是用空间换时间,换效率的思路。

4.2 data shard的生命周期

Data shard完整的生命周期是比较复杂的,精简后大概就是如下几个状态间的跳转。

图四 data shard的生命周期转换

老鸟:首先我说明一下,同一个有一主两副共3个副本。因此一个data shard也有3个副本,那么自然每个副本也都有自己的状态了。Born是个中间状态,新上架的data shard初始化完成前是born,完成后就是free了。

Free:表明这个卷上的data shard已经是可用状态了。可以把它分配给某个业务使用了。

:表明业务正在使用。是正常状态。

Dead:如果正在使用的忽然断电,或者断网等情况而导致数据不可访问,那么就把把的状态改成dead。Dead的数据是不能被访问的。这个不能一方面是指网络或者电源断了,没法访问。第二也是不应该访问,即使网络又恢复了,在断网的这一段时间里数据并没有更新到这个副本上,可能存在脏数据,因此也不应该被访问。

:当数据变成dead,那么也就意味着3个副本里,最多只有2个了。2个自然比3个危险一些,那么就需要进行数据搬迁,dead的data shard里面的数据都搬迁走了之后,dead就变成了状态了。这个状态的意思就是说,我里面的数据虽然已经不完全了,但是在别地方已经有新的数据了。

小菜:如果真的发生了类似断电的情况,那么数据具体怎么搬迁呢?

老鸟:不要着急,这是层考虑的问题。另外图四只是最常见的data shard状态跳转,有一些不常见的情况,为了方便大家理解就没有画到图里。

4.3怎么知道路由变更了 有一个组件会循环的ping各个,如果在一定周期内,某个机器多次ping不通,就任务它dead了,组件就会上报到当出现某些问题后(非断电或网络问题),用户请求失败,就会打印错误日志。有一个组件会扫描的日志,当某个机器上的请求失败率超过某个比例,就任务这个机器dead了,组件就上报到机器上本身就部署着一个组件,它循环扫描机器的硬件情况,包括内存,cpu,磁盘ip等等信息,当发现异常信息后,就上报给,让把这个机器置dead。

4.4变更了之后,怎么做

先修改自己保存的路由,然后通知设置服务不可用。

4.5 保证各个路由一致

老鸟:我们知道在整个集群中的作用主要是“管理”,用户的请求路径并不直接通过。用户请求的是,那么现在的一个功能就是得把路由信息推送给。

小菜:如果有多个,修改了自己的路由后,然后也通知了设置了服务不可用。然后遍历把新的路由推送给他们就OK么。那么怎么知道推送完成了呢?

老鸟:引入路由版本号。

小菜:明白了,每次路由变更的时候都把自己的版本号加1。然后推送。

老鸟:是的。其实在保证路由一致这块的逻辑里,与就是保持心跳连接

1 问,亲爱的,你的版本号是多少?

2 回复,自己的版本号。

3 把收到的版本号和自己的最新版本号比较一下。如果一样,就说明一切OK,等一会再问问就OK。如果不一样,就说明这边有更新了,然后推送一部分路由过去。

4 收到路由后更新下自己的版本号,然后再把新的版本号回复给

5 再检查一下版本号。如果一致说明一次同步就已经把路由都推过去了。如果不一致,说明还没有同步完,再重复3 4 5的步骤。

小菜:有个问题,路由的同步是单线程遍历操作的,那如果某个还没有收到某个已经被置dead的路由,这个时候请求又通过这个被导入那个,那不是读到脏数据了?

老鸟:请参与4.4的后半部分。另外我乏了,跪安吧。再另外:我爱glt。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了