当前位置:网站首页>云存储硬核技术内幕——(9) 相见时难别亦难
云存储硬核技术内幕——(9) 相见时难别亦难
2022-08-04 15:38:00 【用户8289326】
在上一期,我们提到,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的多副本机制的实现。
边栏推荐
- 吴恩达机器学习[9]-神经网络学习
- 进程间通信方式
- Many merchants mall system function and dismantling 24 - ping the strength distribution of members
- 阿尔萨斯监控平台&普罗米修斯监控平台对服务器资源的监控
- Byte、Short、Integer、Long内部缓存类的对比与源码分析
- 【云原生 | 从零开始学Kubernetes】kubernetes之StatefulSet详解
- 保证通信的机制有哪些
- 2022年7月国产数据库大事记-墨天轮
- Semaphore 基本原理
- A detailed explanation of what is software deployment
猜你喜欢
随机推荐
GET 和 POST 请求的区别
Online Excel based on Next.js
For循环控制
Redis-主从复制
Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)
remote: Check Access Error, please check your access right or username and password!fatal: Authenti
SAP ABAP SteamPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
2022杭电多校4
为什么Redis默认序列化器处理之后的key会带有乱码?
洛谷题解P4326 求圆的面积
PHP 图片转PDF
RSA306B,500,600系列API接口代码
录音文件识别
Beginner crawler notes (collecting data)
【Gopher 学个函数】边学边练,简单为 Go 上个分
qt 复杂界面信号槽设计
A detailed explanation of what is software deployment
我在羊毛和二手群里报复性消费
FTP协议抓包-工具wireshark与filezilla