HDFS关键设计| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第15天
关键设计
分布式存储系统的基本概念
- 容错能力:能够处理绝大部分异常场景,例如服务器宕机、网络异常、磁盘故障、网络超时等。
- 一致性模型:为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保障这多个副本的内容都是一致的
- 可扩展性:分布式存储系统需要具备横向扩张scale-out的能力
- 节点体系:常见的有主从模式、对等模式等,不管哪种模式,高可用是必须的功能。
- 数据放置:系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。
- 单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决的是根据系统特点,如何高效得存取硬盘数据。
NameNode目录树的维护
-
fsimage
- 文件系统目录树
- 完整的存放在内存中
- 定时存放到硬盘上
- 修改是只会修改内存中的目录树
-
EditLog
- 目录树的修改日志
- client更新目录树需要持久化EditLog后才能表示更新成功
- EditLog可存放在本地文件系统,也可存放在专用系统上
- NameNode HA方案一个关键点就是如何实现EditLog共享
HDFS写异常处理:Lease Recovery
-
租约:Client要修改一个文件时,需要通过NameNode 上锁,这个锁就是租约(Lease)。
-
情景:当文件写了一半,client自己挂掉了。可能产生的问题:
- 副本不一致(导致每次不同的副本读出来的数据不一致)
- Lease无法释放(租约需要定期刷新,但无法释放之后会出现无法修改的情况)
-
解决方法:Lease Recovery
HDFS写异常处理:Pipeline Recovery
-
情景:文件写入过程中,DataNode侧出现异常挂掉了。
-
异常出现的时机:
- 创建连接时(重新选一个连接)
- 数据传输时(重新构建节点)
- complete阶段(Pipeline 重新连接)
-
解决办法:Pipeline Recovery
Client读异常处理
- 情景:读取文件的过程,DataNode侧出现异常挂掉了
- 解决办法:节点Failover
- 增强情景:节点半死不过,读取很慢
旁路系统
控制面切换
-
可观测性措施
- 指标埋点
- 数据采集
- 访问日志
- 数据分析
-
运维体系建设
- 运维操作需要平台化
- NameNode操作复杂
- DataNode机器规模庞大
- 组件控制面API

浙公网安备 33010602011771号