前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云存储硬核技术内幕——(9) 相见时难别亦难

云存储硬核技术内幕——(9) 相见时难别亦难

作者头像
用户8289326
发布2022-08-04 15:26:54
2070
发布2022-08-04 15:26:54
举报
文章被收录于专栏:帅云霓的技术小屋

上一期,我们提到,Ceph将每个对象拆分为若干大小恒定(2MB或4MB)的Object,每个Object拆分为数量恒定(2的整数次方)的PG。每个PG映射到OSD(物理磁盘)并落盘。

遗留了两个问题:

1、为什么不把RBD块直接拆分为PG并映射到OSD,而要隔一层Object?

2、为什么每个Object的大小恒定,而拆分为PG的数量为2的N次方?

我们先回答容易的第二个问题:

Object大小恒定为2MB或4MB,字节数实际上是2的整数次方。在拆分为2的整数次方个PG以后,每个PG的大小仍然是2的整数次方。由于无论是机械硬盘还是SSD固态盘,每个扇区的大小都是4096Byte,每个PG的扇区数量也可以是2的整数次方。这样,在计算偏移量的时候,可以用CPU的移位指令代替除法指令,以取得更高的性能。

第一个问题的答案相对复杂一些。

假设我们使用静态hash算法,将Object直接映射到一组OSD,一旦OSD背后的物理磁盘损坏,Object是没有办法映射到另一个好的磁盘的。

同时,新加入Ceph集群的节点及其挂载的OSD(磁盘),也没有办法帮忙分担其他OSD的负载。

唐朝大诗人李商隐的一首七律,形象地描述了这种情况:

相见时难别亦难,东风无力百花残。——坏的磁盘的数据难以迁移出去,新加入集群的磁盘难以帮忙承担其他磁盘的负担;

春蚕到死丝方尽,蜡炬成灰泪始干。——只能让整个集群里面原有的磁盘鞠躬尽瘁了;

晓镜但愁云宾改,夜吟应觉月光寒。——早晨起来担心使用自己云服务的客户改换门庭,晚上低吟想到年底的KPI不禁觉得寒彻骨髓

蓬山此去无多路,青鸟殷勤为探看。——已经入了云架构的重重山岭没有退路,不如当初报北大青鸟的编程培训班做个程序员得了!

那么,如果使用动态算法呢?

我们虽然还没有介绍CRUSH算法的具体实现,但在上一期,我们提到了,CRUSH算法是从PG映射到OSD的算法,与普通的函数不同的是,它的输出是一个数组osd[n],其中n为副本数。

那么,以3副本为例,3个OSD之间需要互相交换信息,确保各自是工作正常的。(不正常的情况下会怎么样?大家想一想)

在Ceph的原始设计中,每个Object大小一致,被拆分为几万个PG,并映射到几百个OSD上,所有的Object上,各个PG到OSD的映射关系一致。也就是说,每个OSD只需要维护自身上面的几百个PG,并且在每个数据交换周期(心跳周期)内,OSD需要与这几百个PG的其他副本所在的OSD交换信息。

如果去掉Object层,每个对象会被拆分为数万到数千万个不等的PG,由于对象的大小不等,Ceph无法维护这么多PG到OSD的映射关系,OSD也不可能负担这个数量级的心跳状态!

原来,所有的原始设计都是值得尊重的。

下一期,我们看看,Ceph的多副本机制的实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档