设为首页 收藏本站
查看: 1037|回复: 0

[经验分享] HLFS: 基于HDFS和LFS技术的EBS开源实现

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-22 14:08:25 | 显示全部楼层 |阅读模式
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中,文件即日志,日志即文件,文件的更新全是已追加方式记录到日志末尾。从物理上看,日志由多个固定长度的段组成, 这些段头尾相连组成一个线性的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的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/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-117324-1-1.html 上篇帖子: Oracle EBS供应商接口导入(转) 下篇帖子: 转Forms and Reports, Oracle EBS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表