存储系统设计要点
分布式存储系统设计
###假设
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)的命名空间
###存储工程师能力要求
- 基本硬件知识
- 性能评估
硬件性能
访问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 磁盘寻道 磁盘寻道