基础知识:
谷歌的第一个集群级文件系统(2001)
为具有大文件的批处理应用程序设计
同时管理metadata和chunk的单一主程序
为了可靠性,chunk通常被复制3份
GFS教训:
扩展到大约50M文件,10个P
大量大文件增加了上游应用程序的复杂性
不适用于对延迟敏感的应用程序
扩展限制增加了管理开销
而Colossus则专注于存储效率的提升以及各种扩展功能。
谷歌数据中心内部示意图。
你怎么使用PB级的空闲磁盘空间?
你怎么使用PB级的空闲磁盘空间?
在紧急磁盘空间不足的情况下
典型的集群:
成千上万的机器
PB级别分布式HDD
可选的TB级本地SSD
10 GB/S的对分带宽
第1部分:从GFS到Colossus的迁移
GFS架构问题
GFS master
master节点机器不够大,不能容纳更大的文件系统
metadata操作的单一瓶颈节点
可以容错,但不是高可用
可预测的性能
没有延迟保证
GFSv2的一些明显目标
更大!
更快!
可预测的尾部延迟
用Colossus取代GFS master节点
用D服务器取代GFS 的chunk server
注意:D(Disk的缩写)服务器,它相当于在Borg上运行的GFS Chunkserver。D构成了最低的存储层,并被设计为惟一可以直接读写存储在物理磁盘上的文件的应用程序,物理磁盘被连接到D所运行的机器上。在GFS中, master节点记录文件系统元数据,Chunkserver管理原始数据chunk的读写。与此类似,D服务器管理对原始数据的访问,而Colossus服务器管理哪些数据被映射到哪个D服务器上。Colossus客户端与Colossus对话,以确定从哪个D服务器读取/写入数据,然后直接与D服务器对话,以执行读取/写入操作。如下图所示。
一个简单的问题
Bigtable的“文件系统”
追加写
单一写(多个读)
没有快照和重命名
不需要目录
元数据放在哪里?
当时的存储选项
GFS
分片MySQL(本地磁盘和复制)
广告数据库
带有Paxos复制的本地键值存储
Chubby
Bigtable (GFS上的键值排序存储)
当时的存储选项
GFS←缺少有用的数据库特性
MySQL分区←负载平衡差,复杂
本地键值存储←无法伸缩
Bigtable←hmmmmmm .... 见下一节
为什么选择Bigtable ?
Bigtable解决了许多难题:
在tablets之间自动分割数据
通过查询元数据定位tablets
易于使用的语义
高效的单点查找和扫描
文件系统元数据保存在内存本地组中。
元数据在Bigtable 中!?!?
GFS master -> CFS
CFS“curators”运行在Bigtable tablet服务器中
Bigtable的一行对应于一个文件
Stripes是一组复制集合:打开、关闭、结束
Colossus 存储元数据?
元数据大约是数据大小的1/10000
所以如果我们在Colossus上建造一个Colossus…
100PB数据→10TB元数据
10TB元数据→1GB元元数据
1GB元元数据→100KB元…
现在我们可以把它放进Chubby中!
第2部分:Colossus和高效存储
主题
Colossus可以进行伸缩和集群划分
应用互补→更便宜的存储
数据放置,IO平衡是困难的
集群是什么样子的?
让我们来谈谈钱
总拥有成本(Total Cost of Ownership,TCO)
TCO包含的远不止一块磁盘的零售价
一个密度更大的磁盘可能会以$/GB的溢价出售,但仍然比部署成本低(电源、连接开销、维修)
存储TCO的成分
最重要的是,我们关心的是存储TCO,而不是磁盘TCO。存储TCO是数据持久性和可用性的成本,以及提供数据服务的成本。
如果我们保持磁盘繁忙,就会最小化总存储TCO。
我应该买什么磁盘?
我应该买哪些磁盘?
我们会有一个组合,因为我们一直在成长
我们有一个IOPS和容量的总体目标
我们选择磁盘使集群和机群更接近我们的整体组合
我们想要什么
相同数量的热数据(盘轴繁忙)
用冷数据填满磁盘的剩余部分(填满磁盘)
如何实现?
Colossus重新平衡旧数据和冷数据
…并将新写的数据均匀地分布在磁盘上
当事情进展顺利时
每个方格即是一个D服务器
方格大小显示磁盘容量
方格颜色显示盘轴利用率
粗略的模式
购买flash作为缓存,在磁盘范围内考虑IOPS/GB
购买磁盘作为容量,填满磁盘
希望磁盘永远是繁忙的:否则我们买了太多的flash,但却不够忙…
如果我们购买用于IOPS的磁盘,字节级别的改进就没有帮助
如果冷字节无限增长,我们就有大量的IO容量
填充磁盘是困难的
文件系统在磁盘100%满时不能正常工作
没有空间就不能删除容量进行升级和维修
个别磁盘组不希望达到接近100%的配额
管理员对统计上的过度使用感到不舒服
供应链不确定性
应用程序必须改变
几乎与我们数据中心的任何其他东西不同,磁盘I/O成本正在上升
想要比HDD提供更多访问的应用程序可能需要考虑让热数据更热(因此flash工作得很好),让冷数据更冷
一个写于X年前的应用程序可能会导致我们购买更小的磁盘,从而增加存储成本
结论
Colossus对于优化我们的存储效率非常有用。
存储效率
元数据伸缩允许对资源进行划分
组合不同大小和不同类型工作负载的磁盘的能力非常强大
展望未来,I/O成本趋势将要求应用程序和存储系统同时发展。
谢谢!
往期推荐
饿了么交易系统 5 年演化史
关于数据中台,你需要知道的三个“大”和三个“小”
进行微服务治理,先要对微服务进行度量
雷军公开演讲:你在面试牛人,牛人也在面试你
Kubernetes 在知名互联网公司的落地实践
技术琐话
以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。本号由坐馆老司机技术团队维护。