思考题

  • 大规模数据存储面临的新问题与挑战
  • 索引技术
  • 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完成
  • 争议
    • 只能有一个主服务器——代码不允许存在多个主服务器 ,限制系统可扩展性和可靠性的一个缺陷
    • 系统的最大存储容量和正常工作时间受制于主服务器的容 量和正常工作时间
    • 要将所有的元数据进行编制,并且几乎所有的动作和请求 都经过它
  • 争议的解决

    • 元数据是非常紧凑的,仅仅只有数K到数M的大小
    • 主服务器通常是网络上性能最好的节点之一
    • 可靠性通过“影子”主服务器制作主服务器的镜像,一旦 主服务器失败它将接替工作
    • 主服务器极少成为瓶颈,因为客户端仅仅取得元数据然后 将它们缓存起来,随后的交互工作是直接与chunk servers 进行
    • 使用单个的主服务器可以大幅度地降低软件的复杂性
    • 多个的主服务器,软件将变得复杂以能够保证数据完整性、 自动操作、负载均衡和安全性。

      云存储应用

  • iCloud

  • Microsoft Onedrive
  • Dropbox
  • Amazon cloud drive
  • 百度云