分布式文件系统实践经验交流
yubai.lk@taobao.com
Context
• 概述
• 一致性模型
• 元数据节点
• 数据节点
• 客户端API
•
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
概述
• 应用
• 需求
• 架构
应用
• MapReduce计算
– 高带宽
– 顺序扫描
– 批量顺序追加
•
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
格系统的底层存储
– 随机读取
– 小记录顺序追加
– 批量顺序追加
需求
• 超大规模的数据存储
• 易于扩展和迁移
• 容灾和自动恢复
• 高带宽和低延迟
架构
• 数据分块
– 大文件优化
• 大容量低配置数据节点
– 12T, sata
• 单一元数据节点
– 主备同步
– DNS切换
一致性模型
• 以记录为单位读写
– 并发和异步操作
– 记录级别的原子性
• 与GFS类似的语义
– 写成功的记录,多个副本强一致
– 写失败的记录,状态不确定
• 多副本一致性状态不确定
• 重复记录问题,需要用户处理
一致性模型
• Lease
– master元数据与chunk信息一致性检查
– 减小写数据对master带来的压力
– Lease期间Primary Replica主导数据追加
一致性模型
• Primary Replica主导的数据追加
– 接受master的lease 分配,并分发给其他副本
– 处理lease释放和续订,并分发给其他副本
– API都将数据发送给Primary Replica
– Primary replica决定写入的offset向其他副本分发
数据
• Lease期间的宕机
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
和处理
– 心跳检测和Primary汇报其他副本宕机
– 新建chunk
一致性模型
• Chunk状态和版本号
– Master在收到数据节点的lease分配成功后升级
自己名字空间的版本号
– 数据节点在收到lease并检查成功后升级自己
chunk的版本号
– Master不根据汇报信息更新自己的版本号,只
删除版本号低于自己的chunk
– 数据节点上的Chunk状态
• Readonly ,自己写失败或其他副本写失败
• Cannot copy,版本号低于master
元数据节点
• 批量并发操作
– Btree copy on write特性
• 在拷贝出来的根节点上批量修改,提交日志
• 然后提交或回滚修改后的根节点
• 运维接口
– 动态信息查询
– 允许人工介入的操作日志和ckeckpoint修正
数据节点
• 磁盘io
– Async io
• libaio
– Direct io
• 自己实现类似page cache和buffer cache
• 预读
– MapReduce读取模式:扫描
– BigTable读取模式:扫描或随机
数据节点
• 快速启动
– Chunk元数据定期dump到磁盘
– 配合操作日志则启动时不需要扫描磁盘
• 数据和操作日志
– 提高响应能力:不能在buffercache中对齐的数
据不立即写磁盘
– 更新chunk元数据的操作不实时刷新到磁盘
– 仅在打开和关闭chunk的时候更新一次chunk元
数据
数据节点
• 多磁盘管理
– 12 * 1T sata盘
– 支持损坏磁盘的热插拔
– 已损坏磁盘不可重新加载
• 软连接
• 数据链路
– Pipe line式的数据推送
• API->Primary Replica->Secondary Replica
• 跨交换机选择ip地址最近的下一个机器推送
• 同一交换机内随机选择下一个机器推送,避免在小集群
内都选择最近ip造成的瓶颈
数据节点
• 文件复用
– chunk文件不立即删除
– 改名复用已删除的文件
• 多网卡
– 多网卡地址向master汇报
– 过滤无效地址
客户端API
• 异步接口
– Wait / Select
– 多异步任务调度
• 写操作优先级
– BigTable日志优先
• 高级API
– 过滤重复记录
– 更像Posix接口
– DFSShell工具
总结
• 适应MapReduce和BigTable需求的底层存储
• 性能、实时性、可靠性优于HDFS,功能更华丽
• TFS
– 优势
• 名字空间与元数据空间分离
• 小文件支持
– 不足
• 写操作对namenode压力大
• 不支持并发追加
谢谢!
Q & A