分布式系统学习——分布式存储与文件系统

NoSQL

类型

列存储

Hbase、Cassandra、Hypertable

文档存储

MongoDB、CoutTree

调研:

什么是 NoSQL 生态圈

分布式存储系统的定义与实现问题

  1. 数据分布:分布均匀?跨服务器读写
  2. 一致性:如何复制多个数据副本并保证不同副本之间的一致性
  3. 容错
  4. 负载均衡
  5. 事务与并发控制
  6. 易用性
  7. 压缩/解压缩

分布式存储系统分类

  1. 分布式文件系统:存储 Blob 对象、定长块以及大文件
    1. Facebook Haystack
    2. GFS Amazon EBS
  2. 分布式键值存储系统

调研学习:DAS、SAN、NAS

存储引擎

  1. 哈希存储引擎
    1. 哈希表的持久化实现
    2. 支持增删改和随机读取,不支持顺序扫描
    3. 对应键值存储系统
  2. B 树存储引擎
    1. B 树的持久化实现
    2. 支持增删读改,支持顺序扫描
    3. 对应关系数据库
  3. LSM 树存储引擎
    1. 支持增删读改,支持顺序扫描
    2. 互联网后台存储系统

数据模型

  1. 文件模型
    1. 以目录树的形式组织文件
    2. 对象模型与文件模型类似
  2. 关系模型
  3. 键值模型
  4. 表格模型
    1. 支持插入删除更新读取扫描
    2. 不支持多表关联

思考:单点登录(有状态服务器、无状服务器)

文件服务体系结构

层次文件 XX

  1. 树形结构目录——目录树
  2. 每个目录包含文件和其他可以从此目录访问的目录的名字
  3. 可以使用路径名来访问任一文件或目录
    1. NOTE: UNIX 文件系统不完全是树形的--一个文件可以在一个或多个目录中
  4. 目录图一说

目录图

目录的维护:目录树中目录位空时,才能删除指向该目录。

文件组

  • 位于给定服务器上的文件集合
  • 一个服务器可以包含数个文件组
  • 与 UNIX 中的文件集系统,一个存储设备或者分区拥有的文件的集合类似
  • 分布式系统中

分布式文件系统中的命名方法

思考题

讨论:

  1. 把主机名和文件的本地名字结合起来给文件明明
  2. 把远程文件目录附加到本地名字空间中
  3. 把所有各部分文件系统全部集成组成单一的全局名字结构

名字的结构

  1. 绝对名字/相对名字
  2. 单层(平面)地址/分层地址

查找与解析

迭代名称解析

  • 解析程序将完整名称(dir,name1,namek)发给 server0
  • Server0

连接:例解 DNS 递归/迭代名称解析原理

同步机制

DFS 锁机制例

  • 分布式锁机制:GFS、GPFS、Lustre
  • 租赁方式:NFS v4 提出,StorageTank 采用类似机制
  • 基于时间的机制:NFS v3 提出,SANergy 等采用

文件的远程访问方法

  • 远程服务和缓存是实现客户进程对远程文件进行访问的两个互相补充的方法
  • 常规文件缓存->减少磁盘读写,而分布式缓存->减少网络通信量
  • 分布式文件系统中缓存方案设计
    • 被缓存的数据的粒度
    • 客户缓存器的地点,即使用主存进行缓存,还是使用磁盘
    • 如何传播被缓存的副本的修改
    • 如何确定各个客户缓存中的数据是否一致

缓存

高速缓存

  • 写直达
  • 写回
  • 关闭时写
  • 集中控制
  1. 复制

    1. 通过对每个文件的独立备份来增加系统的可靠性
    2. 当一个文件服务器出现问题时,仍允许文件访问
    3. 把工作量分配到多个服务器上
  2. 更新协议
    1. 主拷贝复制
    2. 表决(voting)

分布式文件系统举例

  1. NAS

  2. VFS

    在定义网络文件系统 NFS 时创造的

  3. AFS
  4. Lusture
  5. GFS
    1. 继承理念,HDFS 开源
  6. MogileFS
  7. Fast DFS
  8. Windows DFS
  9. Hadoop HDFS
  10. TFS
    1. 淘宝提供海量小文件存储系统