TFS分布式文件系统学习总结(3)-dataserver类结构详解

本文详细介绍了TFS分布式文件系统的dataserver组件,主要包括DataManagement和BlockManagement两个部分。DataManagement负责管理client的缓存数据,而BlockManagement则管理磁盘中的物理块。DataFile用于缓存未写入磁盘的文件,BlockFileManager管理逻辑和物理块,确保文件的持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本小节主要是介绍dataserver文件访问管理类结构,dataserver主要是由DataManagement和BlockManagement进行管理,其中DataManagement是用来管理client正在写文件的缓存数据的(即还没有持久化的阶段),而BlockManagement是管理磁盘中的物理块数据信息的。下面来详细的阐释下DataManagement和BlockManagement。

1、DataManagement文件数据缓存管理类:

DataManagement:

简介:DataManagement主要是用于管理DataFile信息。

file_number_:为该dataserver的文件序号,在集群里唯一。它是有一个64位的整形进行存储,高32位存储dataserver的信息(ip:port),低32位用于分配该dataserver的文件序号,最大不超过4的32次方个文件,视图如下:

 

last_gc_data_file_time_:清除已经过期的保留在缓存里的没有写到磁盘的文件,对应的类为DataFile。

data_file_map_:类型为hash_map<uint64_t, DataFile *>的缓存未写入磁盘的文件数据管理hash map。

 

DataFile:

简介:DataFile主要是用于缓存client端写入的信息,该信息client未写完毕所以缓存在DataFile内存中。在DataFile的文件内容信息如果超过一定时期后,会认为是超时写而清理掉。

这里主要介绍crc_, tmp_file_name_, ref_count三个字段的意义,其余的字段看字段名就知道其作用了。

crc_:该字段用于检测当client端发送写完成操作时携带的crc值进行判断,传输的数据是否有误。

fd_:如果client写入的数据文件大于2M的话,那么就不要用内存的方式进行缓存了,就用到写文件的方式来缓存,而tmp_file_name_字段则是要写入的文件名路径。

ref_count_:该文件的引用计数

 

2、BlockManagement物理块数据信息管理类:

BlockFileManagement:

简介:BlockFileManager主要是用于管理逻辑/物理磁盘块的,当有一个文件写完毕后BlockFileManagement会在某个逻辑块中选择一个物理块让文件持久化。

compact_logic_blocks_:压缩块map

physical_blocks_:物理块map

bit_map_size_:super_block_.main_block_count_ + super_block_.extend_block_count_ + 1,从代码可以看出是dataserver上的主块与扩展块数量之和,BlockFileManager会维护一个整形数组,该数组的每一bit代表一个对应块的信息标识。

normal_bit_map_:normal_bit_map_是用来统计块的使用情况的

error_bit_map_:error_bit_map_是用来统计出问题块的情况的

super_block_:超级块信息

super_block_impl:超级块操作接口

 

LogicBlock:

简介:LogicBlock意为逻辑块,逻辑块管理着属于它的物理块信息。

avail_data_size:当前逻辑块总空间大小,包括已使用的和未使用的空间大小。

visit_count_:该逻辑块访问次数。

last_abnorm_time_:上次逻辑块处理出现异常的时间。

phusical_blocks_:逻辑块对应的物理块。

 

PhysicalBlock:

简介:PhysicalBlock意为物理块,文件写入的载体。

data_start_:物理块开始存储数据的偏移量(为512字节),因为每个物理块都前都会保存一个BlockPrefix结构体信息。

total_data_len:块总大小 - data_start_

block_prefix_:用于连接一个逻辑块下的物理块信息

TFS(Taobao FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。 目前,国内自主研发的文件系统可谓凤毛麟角。淘宝在这一领域做了有效的探索和实践,Taobao File System(TFS)作为淘宝内部使用的分布式文件系统,针对海量小文件的随机读写访问性能做了特殊优化,承载着淘宝主站所有图片、商品描述等数据存储。 文章首先概括了TFS的特点:最近,淘宝核心系统团队工程师楚材(李震)在其官方博客上撰文(《TFS简介》,以下简称文章)简要介绍了TFS系统的基本情况,引起了社区的关注。 完全扁平化的数据组织结构,抛弃了传统文件系统的目录结构。 在块设备基础上建立自有的文件系统,减少EXT3等文件系统数据碎片带来的性能损耗。 单进程管理单块磁盘的方式,摒除RAID5机制。 带有HA机制的中央控制节点,在安全稳定和性能复杂度之间取得平衡。 尽量缩减元数据大小,将元数据全部加载入内存,提升访问速度。 跨机架和IDC的负载均衡和冗余安全策略。 完全平滑扩容。 当前,TFS在淘宝的应用规模达到“数百台PCServer,PB级数据量,百亿数据级别”,对于其性能参数,楚材透漏: TFS在淘宝的部署环境中前端有两层缓冲,到达TFS系统的请求非常离散,所以TFS内部是没有任何数据的内存缓冲的,包括传统文件系统的内存缓冲也不存在......基本上我们可以达到单块磁盘随机IOPS(即I/O per second)理论最大值的60%左右,整机的输出随盘数增加而线性增加。 TFS的逻辑架构图1如下所示: 图1. TFS逻辑架构图(来源:淘宝核心系统团队博客) 楚材结合架构图做了进一步说明: TFS尚未对最终用户提供传统文件系统API,需要通过TFSClient进行接口访问,现有JAVA、JNI、C、PHP的客户端 TFS的NameServer作为中心控制节点,监控所有数据节点的运行状况,负责读写调度的负载均衡,同时管理一级元数据用来帮助客户端定位需要访问的数据节点 TFSDataServer作为数据节点,负责数据实际发生的负载均衡和数据冗余,同时管理二级元数据帮助客户端获取真实的业务数据。 标签:分布式  阿里巴巴
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值