HLFS: 基于HDFS和LFS技术的EBS开源实现
来源:互联网 发布:音频矩阵处理器 编辑:程序博客网 时间:2024/05/16 07:41
HLFS(HDFS Log Structured FileSystem)是一个开源EBS系统,隶属于《谁来拯救云计算》一文作者康华所发起的cloudxy项目。 HDFS最大的特色是结合了LFS和HDFS, HDFS提供了可靠、随时可扩展的文件服务,而LFS弥补了HDFS不能随机更新的缺憾。 HDFS一个较为成熟的项目,为HLFS提供可靠的、可扩展的存储服务, 大大简化了HLFS的设计。在HLFS中,虚拟磁盘对应一个文件, 文件长度能够超过TB级别,客户端支持Linux和Xen,其中linux基于NBD实现, xen基于blktap2实现,客户端通过类posix接口libHLFS与服务端通讯。 HLFS主要特性有: 支持多副本,支持动态扩容,支持故障透明处理,支持快照。
数据分片和定位
每个虚拟磁盘对应一个HLFS文件,HLFS文件由多个段组成,段是HDFS独立文件默认为64M。 数据分配和定位由HDFS提供,系统本身不需要设计数据分片和定位相关算法。
数据分片和定位
每个虚拟磁盘对应一个HLFS文件,HLFS文件由多个段组成,段是HDFS独立文件默认为64M。 数据分配和定位由HDFS提供,系统本身不需要设计数据分片和定位相关算法。
数据存储
HLFS中,文件即日志,日志即文件,文件的更新全是已追加方式记录到日志末尾。
从物理上看,日志由多个固定长度的段组成, 这些段头尾相连组成一个线性的log,段是HDFS中的独立文件,文件名是segno.seg,其中segno是从0开始递增的编号。从逻辑上看,日志由一些列日志项组成,日志项不能跨段。 除了日志项的头部之外, 日志项的格式包括 A (data)| B (meta-data block log) | C (inode log) | D(inode_map log), 其中data是被修改的数据块,如果data包含多个数据块,那么这些数据块必须连续, meta-data block log是由于被修改的索引块, inode log是新的inode, inode_map记录inode位置信息(只包括一个inode)。 inode_map是定位数据块和inode的关键数据结构, HLFS打开文件时必须得到最新的inode_map信息。定位inode_map的方法如下: HLFS从日志末尾(最后一个段的末尾)读取inode和inode_map。与经典LFS系统不同, inode_map仅包含一个inode, 而从日志末尾可直接读到inode, 因此inode_map结构其实没有存在的必要, 留着inode_map是便于将来扩展成单个日志文件支持多文件。
LFS系统中的一个重要的问题是定位日志末尾的算法, 最简单的办法是根据文件长度确定日志末尾, 但是这种方法无法跳过最后一个不完整的日志项(日志项可能只写入了一半)。这个问题通用的解决办法是增加检查点机制, 从检查点顺序扫描日志, 遇到不完整的日志(通过checksum、日志项中的其它元数据判断)就认为日志结束,并且将不完成的日志truncate掉。
垃圾回收由用户手工发起, 具体分为两个步骤,首先分析段的利用率(即数据块存活率),写入segment_usage。 分析利用率有两种方法,一种是客户端计算,另外一种map/reduce计算。 如果段利用率低于某以阈值, 则启动真正的垃圾回收。 垃圾回收是将段中有效的日志项重新写入到日志末尾。 一个日志项中可能包含有效或者失效的数据块,必须严格区分这两者,只能将日志项中的有效数据重新写入日志末尾,否则可能导致丢失更新。
LFS类系统非常容易实现快照功能——只需将当时的inode位置记录到snapshot文件。
集群成员关系
HDFS维护集群成员关系,处理节点退出和加入。
HDFS维护集群成员关系,处理节点退出和加入。
复制和一致性
HDFS保证复制和一致性, HDFS的append操作比GFS复杂, 能够保证一致性。
性能
EBS的主要应用是RDS数据库应用,而HLFS的关注点是中小型个人host服务, 性能不是HLFS目前的主要关注点。
读写IO随机化仍然严重: 首先, 非原地更新必然导致数据块在物理上非连续存放,因此读IO比较随机, 顺序读性能下降。 其次,虽然从单个文件角度看来, 写IO是顺序的,但是在HDFS的chunk server服务了多个HLFS文件, 因此从它的角度来看, IO仍然是随机的。同样构建在HDFS之上的HBase是怎么解决随机IO问题的? HBase每个region server负责多个tablet, 每个tablet都需要记录日志到HDFS, 为了提高日志效率, 每个regioin server上的tablet合用一个日志文件。 或许HLFS也借鉴HBase做法进行优化。
写延迟问题, HDFS面向大文件设计, 小文件写延时不够优化。
垃圾回收的影响, HLFS写日志线程发现没有请求时,会启动垃圾回收, 垃圾回收需要读取和写入大量数据, 对正常写操作造成较大影响。 此外,按照目前实现,相同段上的垃圾回收和读写请求不能并发, 垃圾回收算法对正常操作的干扰较大。
写日志性能需要进一步优化。 一次只往日志写入一个日志项,一个日志项只能包含连续数据块, 写日志的吞吐率不是很好。
总结
HLFS是基于HDFS和LFS实现的一个开源EBS系统, 得益于HDFS,HLFS的实现难度降低,并拥有三高特性: 高可靠、高可用、高可扩展。只要HLFS能够解决好性能问题, 相信会更加完美。
原文:http://peterylh.blog.163.com/blog/static/120332012226104116710/
阅读全文
0 0
- HLFS: 基于HDFS和LFS技术的EBS开源实现
- HLFS: 基于HDFS和LFS技术的EBS开源实现
- LFS、BLFS、ALFS、HLFS的区别
- LFS、BLFS、ALFS、HLFS的区别
- LFS,BLFS,ALFS,HLFS
- 做自己的linux发行版 LFS、BLFS、ALFS、HLFS的区别
- 当虚拟机遇见Hadoop -- 基于hadoop的开源EBS实现思索
- Pyston——基于LLVM和现代JIT技术的开源Python实现
- 基于kerberos的hdfs和hbase登录
- sheepdog(牧羊犬):一种EBS的开源实现
- 基于Struts技术的Web层应用设计和实现
- 基于HDFS的FTP
- 基于HDFS的FTP
- 基于HDFS的FTP
- 基于HDFS的FTP
- HDFS的实现思想和概念
- EBS Form弹性域开发和实现时的概念
- 基于HDFS的SparkStreaming案例实战和原理浅析
- Unity3D有关内存管理的资料网址
- 【数据库SQL】找到会员卡重复的,保留其中一条数据
- Java基础之private、protected、public和default的区别
- 排序之冒泡排序
- JavaScript DOM编程艺术第七章Ajax学习笔记
- HLFS: 基于HDFS和LFS技术的EBS开源实现
- POJ 2777 Count Color (线段树的区间更新+lazy tag)
- Oracle安装不完全后使用自带工具调整(Net Manager,Net Configuration Assistant)的相关总结
- 嵌入式Linux入门2:工具掌握(Windows篇)
- Android——实现两次点击返回键提示退出
- Linux下Redis的安装与部署
- 回车触发事件
- docker存储结构解析
- 【Unity学习笔记】——基础篇:渲染管线