简化映射元数据的一些方法

分布式存储系统中,元数据服务器通常是一个集中管理者,通常由它选择(根据一些负载均衡算法)合适的存储节点来存储文件数据,这就形成了文件元数据中的映射元数据部分,映射元数据记录文件数据分布信息。

 

常用的实现方法为存储节点周期性的向元数据服务器报告状态信息,元数据服务器根据这些节点的信息选择负载最小的存储节点作为本次请求的数据服务者,这就要求元数据服务器为每个文件维护一个数据分布链,当文件很大,而数据分块较小时,这个链表可能很长,而且变长的数据分布链也不便于存储。

 

一些分布式文件系统为了简化文件元数据,使用不同的方法将这个变长的数据分布链去掉,下面描述几种经典的实现。

 

Google File System中,元数据服务器从不在磁盘上存储文件的映射信息以及其它一些元数据,这些信息全部存在于内存中。每个存储节点记录自己所拥有的数据块信息等,在系统启动时,各个存储节点将自身的数据块存储信息报告给元数据服务器,元数据服务器将所有的信息进行收集、合并,在内存中产生文件的元数据信息。GFS使用的方式对元数据服务器的性能要求较高,并极大的延长了每次系统启动的时间。

 

Ceph中,文件的分布式通过CRUSH哈希算法实现的,该算法的原理我也理解不了,它能实现将数据(可能有多个拷贝)随机的分配到一个存储池中(存储节点集)。通过这种方式,文件也不需要存储映射元数据,UCSC后来的很多关于元数据索引/查找的论文都是建立在这种数据分配方式上的,因为它极大的简化了元数据结构。

 

最近淘宝的TFS也正是开源了,从taobao code上看到淘宝核心系统部的一些开源项目,真的对阿里巴巴有点刮目相看了,以前一直以为阿里巴巴只是赢在电子商务的理念上,现在发现我错的离谱啊。TFS主要用于淘宝网的图片存储,如果你经常逛淘宝,你就不难发现淘宝中图片文件的数量级之大了,种类繁多的商品,每种商品通常还要存储不同大小的几种版本(缩略图,大图),海量图片的背后的那个贤惠的存储系统就是TFSTFS的数据块大小为64M,而图片文件通常都是小文件,也就是即使要存储文件的映射数据,也只有一项,而TFS连这一项都省去了,它运用了一种小技巧。因为淘宝网的用户并不在乎文件在存储系统叫什么名字,于是TFS将一部分元数据集成到文件名中,其中就包含映射元数据。

 

http://img02.taobaocdn.com/bao/uploaded/i2/T1.5RNXcJjXXaMe8w__110326.jpg_310x310.jpg,这个名字是淘宝网中某个文件的全局路径名,文件名T1.5RNXcJjXXaMe8w__110326.jpg_310x310.jpg包含了文件的位置信息,图片的大小,后缀名等一些元信息。

 

posted @ 2013-04-19 14:08  ydzhang  阅读(630)  评论(0编辑  收藏  举报