思考题
- 大规模数据存储面临的新问题与挑战
- 索引技术
- GFS体系结构
-
存储基础
新问题与挑战
核心问题是数据量与成本的矛盾
- 成本问题
- 容量问题
- 可靠问题
- 使用问题
Solution
二叉搜索树BST
- B树,B+树,B-树:多路平衡搜索树
-
分布式文件系统
分布式文件系统,相比传统文件系统
- 元数据与内容数据分离
- 存储容量通过分布式横向扩展
- 可通过冗余提高可靠性
- 文件分块存储
- GFS的设计思路
- 在廉价的不可靠的硬件上构建可靠的分布式文件系统
- GFS的假设与目标
- 硬件出错是正常而非异常
- 系统应当由大量廉价、易损的硬件组成
- 必须保持文件系统整体的可靠性
- 主要负载是流数据读写
- 主要用于程序处理批量数据,而非与用户的交互或随机读写
- 数据写主要是“追加写”,“插入写”非常少
- 需要存储大尺寸的文件
- 存储的文件尺寸可能是GB或TB量级,而且应当能支持存储成 千上万的大尺寸文件
- 硬件出错是正常而非异常
- 实现机制
- 将文件划分为若干块存储,每个Chunk的大小为64M
- 通过冗余提高可靠性:至少3个数据块冗余
- 通过单个Master(逻辑上只有一个)协调数据访问、元数据存储,结构简单,容易保持元数据的一致性
- 无缓存
- CFS的系统特点
- 采用中心服务器的模式:可以方面的增加Chunk Server,Master掌握系统内所有Chunk Server的情况,方便进行负载均衡,不存在元数据的一致性问题
- 不缓存数据,流式读写,不存在重复读写,使用Cache对性能提升不大
- 在用户态下实现,直接利用Chunk Server的文件系统存储Chunk,实现简单
- 提供专用的访问接口
- Master的任务
- 存储元数据
- 文件系统目录管理与加锁
- 与Chunk Server进行周期性通信,收集状态,跟踪数据块的完好性
- 数据块的创建、复制以及负载均衡
- 垃圾回收:在日志中记录删除操作,将文件改名隐藏,缓慢地回收隐藏文件,与传统的文件删除相比更简单更安全
- 陈旧数据块的删除:检测陈旧数据块并删除
- Master节点是系统的瓶颈,为此
- 尽可能减少数据读取中Master的参与程度
- 不适用Master读取数据,保存元数据
- 客户端缓存元数据
- 采用大尺寸的Chunk
- 数据修改交由Primary Chunk Server完成
- 争议
- 只能有一个主服务器——代码不允许存在多个主服务器 ,限制系统可扩展性和可靠性的一个缺陷
- 系统的最大存储容量和正常工作时间受制于主服务器的容 量和正常工作时间
- 要将所有的元数据进行编制,并且几乎所有的动作和请求 都经过它
争议的解决
iCloud
- Microsoft Onedrive
- Dropbox
- Amazon cloud drive
- 百度云