03 August 2014

分布式存储系统设计

###假设

1 硬件是廉价的且易失效的(服务器,磁盘) 2 网络是不可靠的(消息乱序,消息丢失,网络数据包错误,网络分区通信异常) 3

由此带来了同步,备份等一系列困难

###特点

  • 高性能:性能随集群规模线性增长。主要指吞吐量(IOPS) 访问延时
  • 可扩展: 增加新的机器很容易,并且性能随规模增长,线性增长
  • 易用:从运维,用户人员角度考虑。用户,对外接口易用 ;运维人员,完善的监控 运维 数据处理(导入导出 压缩解压)工具链,与主流系统集成,例如与hadoop mapreduce 很好地集成进行数据导入导出
  • 可用性:面对异常时可正常提供服务的能力。例如4个9(99.99%) 一年停机时间 365×24×60/10000 = 52.56分钟
  • 低成本 : 可在廉价硬件上运行

###考虑因素

  • 架构
  • 数据分布 如何让数据均匀分布; 元数据与数据是否分离
  • 一致性 复制(备份)策略 强一致 弱一致 最终一致
  • 容错 宕机 网络断开 存储失效后的错误处理
  • 负载均衡
  • 事务与并发
  • 协议

###权衡 压缩率和压缩速度的权衡 由于CAP中的P总是要满足的,所有关键是 C 和 A 的权衡

###分类

  • 分布式文件系统 以数据块(chunk)为单位存储Blob对象 定长块 大文件。例如 facebook Haystack TFS GFS 经常为后两种的底层存储

  • 分布式表格系统 行存储 列存储(Google Bigtable) 以及两者直接的混合

  • 分布式数据库 例如Amazon RDS

  • 分布式键值系统 半结构化数据 一致性哈希

例如Amazon Dynamo Memcache mdb Redis

###数据结构###

  • B树 B+树
  • 哈希表
  • LSM(Log Structure Merge Tree)树

###性能### 随机读写远慢于顺序读写

####写

  • LevelDB 写数据:commit log 可变MemTable 不可变MemTable SSTable()

####读

  • COW
  • MVCC

####并发控制

  • 锁机制
  • COW:读不加锁
  • MVCC:读不加锁

####事务

  • ACID

####日志

  • 操作日志
  • 重做日志

####数据压缩

  • 算法 Huffman 和 LZ系 (BMDiff Zippy )
  • 压缩速度和压缩比的权衡

###数据分布###

不管采用何种数据分布方式,为了让每台机器的数据分布尽量均衡,需要自动负载均衡,而自动负载均衡设计数据的迁移、复制, 而硬件网络的不稳定导致一致性的问题

####分布方式 一致性哈希分布:随机读取性能好 顺序分布(B+):顺序读取性能好,子表的合并与分裂复杂度高

####负载均衡

数据迁移:平滑

数据复制: 最大保护模式:强复制:主从副本机制(Commit Log + checkpoint) 一致性好 最大性能模式:异步复制:NWR副本机制 可用性好 最大可用模式:正常情况下为最大保护模式,网络异常情况下为最大性能模式,一致性和可用性的很好权衡

###容错###

常见故障

  • 数据中心过热
  • 配电装置故障
  • 机架调整
  • 网络重新布线
  • 机架故障
  • 机架不稳定
  • 路由器重启
  • 路由器故障
  • DNS 故障
  • 单机故障
  • 硬盘故障

故障检查

  • 心跳机制:主从架构,主主动,主被动

故障恢复 数据复制 数据迁移

惟一解决办法:多副本,但由此带来的一致性问题

问题

  • 服务器宕机 : 停电、内存错误
  • 网络异常 : 超时(成功、失败、未知), 消息乱序,消息丢失,网络数据包错误,网络分区通信异常
  • 磁盘故障 : 老化、损坏、数据错误

###一致性###

用户端

  • 强一致性
  • 弱一致性
  • 最终一致性:读写一致性 会话一致性 单调读一致性 单调写一致性

存储系统

  • 副本一致
  • 更新顺序一致

###扩展性###

####指标 故障恢复时间 扩容自动化程度 扩容的灵活性

####架构 P2P架构

主从架构:主流,完全能够胜任大多数应用(google 8000台,Hadoop 3000台),进一步可采用两级架构

异构:分片 多副本

跨机房部署

  • 集群整体切换
  • 单个集群跨机房
  • Paxos 选主副本

###算法

  • Paxos : 数据一致性
  • 2PC : 数据事务的原子性
  • Quorum

一个需要在生产环境运转的存储系统的架构是很复杂的.除了真实的数据持久化组件外,这个系统还需要包含以下特性;可伸缩性与强大负载均衡解决方案、会员与故障检测、故障恢复、副本同步、超负荷处理、状态转移、并发与任务调度、请求编组、请求路由、系统监控与报警以及配置管理.

点对点(P2P)存储系统:扁平命名空间(namespace) 分布式文件系统:层次化(hierarchical)的命名空间

###存储工程师能力要求

  1. 基本硬件知识
  2. 性能评估

硬件性能

访问L1 Cache            0.5ns
分支预测失败            5 ns
访问L2 Cache            7 ns
Metex加锁/解锁          100 ns
内存访问                100 ns
千兆网络发送1MB数据     10  ms
从内存顺序读1MB数据     0.25 ms
机房内网络来回          0.5  ms
异地机房之间网络来回    30-100 ms
SATA 磁盘寻道           10  ms
从SATA磁盘顺序访问1MB   20  ms
固态盘SSD访问延迟       0.1-0.2ms

存储介质

类别 IOPS 价格 随机读取 随机写入 内存 千万级 友好 友好 SSD盘 35000 友好 写入放大问题 SAS磁盘 180 磁盘寻道 磁盘寻道 SATA磁盘 90 磁盘寻道 磁盘寻道