摘要:
Jerasure库提供Reed-Solomon和Cauchy Reed-Solomon两种编码算法的实现. Reed-Solomon编解码接口 1. 编码矩阵生成 // generate matrix, last m rows matrix = talloc(int, m*k); for (i = 0; i < m; i++) { for (j = 0; j < k... 阅读全文
摘要:
上周末ADC,@明俨 主持TFS开源主题的讨论,居然有TFS外部用户到现场咨询使用过程中的问题,感觉这些小公司维护大系统挺不容易的,尤其是在对内部实现不清楚的情况下。期间有人分享自己公司的做法,存文件的时候,存到多个server上,然后把文件跟server的对应关系记录到文档(不能丢,方便查找),当出现异常时,人工介入拷贝文件以增加文件副本数,然后更新文件跟server的对应关系;做法看起来很土,... 阅读全文
摘要:
TFS数据服务器的block是在DS第一次启动前格式化的,所有block的空间是预先分配好的,而物理块对应的index文件,则是block被分配使用时创建的。Index文件的大小是根据block中文件数目增加而增长的,为了提高性能,将整个index文件都mmap到内存直接访问。 在初次mmap index文件时,会计算block中预期的文件数,计算出index文件的理论大小index_s... 阅读全文
摘要:
TFS目前使用扩展块来解决文件写、更新问题。扩展块的数量由磁盘可用空间、主块大小、扩展块大小、Dataserver(DS)配置项block_ratio决定。TFS主块和扩展块的数量在文件系统格式化的时候就已经确定,并且预先分配了所有块的存储空间。DS周期性的汇报存储空间使用率给Namserver,DS根据主块和扩展块使用率中的较大值做为DS储存空间的使用率。 扩展块使用率引发的问题 ... 阅读全文
摘要:
在早期,应用要使用TFS,需要知道TFS名字服务器的地址才能访问TFS,然后调用读写接口存取文件,当应用比较少时,这种方式不会引发什么问题,但目前在淘宝内部,有200多个应用使用TFS做为后端的存储系统,必须要对应用的存储资源进行统一的管理与运维。 TFS做为一个应用存储平台,缺乏统一管理至少存在如下问题: 多集群管理:多集群访问控制、切换、容灾等。 访问控制:应用只要... 阅读全文
摘要:
集群数据对比功能的添加对TFS DS做了修改,在把DS上到日常测试环境前对其进行了一次回归测试,测试用例都通过,但checkserver检查到有大量block未同步到辅集群,查看dataserver的日志发现同步队列已经阻塞住了,一直重复retry。 主备集群的数据同步是由主集群的DS在后台进行,其将成功的写、删等操作记录在本地日志,并启动后台线程将日志重放到备集群,DS没重放一条日志,如果失败... 阅读全文
摘要:
TFS没有采用目前流行的3副本策略,而是使用集群内配置2个副本,并把数据同步到一个辅集群,辅集群同样配置2个副本;这种方式对于实现异地机房容灾很方便,辅集群的数据同步是由主集群的数据服务器在后台发起的;目前主集群可读写,辅集群只读,双集群同时读写功能已开发完成,但没有在线上使用。 由于数据同步到辅集群是异步操作,当某次读文件的操作落到辅集群上时,可能该文件的同步尚未完成,此时在辅集群上读不到数据... 阅读全文
摘要:
当你的系统发布时,你需要告诉用户如何去使用,通常你会写一份示例代码放在文档中,让用户能通过这个例子快速知道该如何使用,这个实例代码对用户会有多大影响呢? TFS是淘宝的分布式文件系统,主要用于小对象的存储(如图片、交易快照等),在TFS的开源wiki上,也有一个简单的实例。具体的说,TFS客户端提供了基本的open、read、write、close接口,用户在读写前,需要先根据对应的模式open... 阅读全文
摘要:
TFS数据服务器(DS)通过在物理块的头部存放一个BlockPrefix结构来记录逻辑块与物理块的对应关系,在DS时,会读取每一个已经使用的block,并读取block头部的信息,汇报给NS,NS通过这些信息建立逻辑块到DS的映射关系。最初,TFS使用300G的小盘,按照每个主块64M,每个扩展块2M计算,物理块的总数接近1500个,即使这些块全部使用全部使用了(正常状态下扩展块的利用率不会太高)... 阅读全文
摘要:
TFS主要用于小文件存储,其将多个小文件存储在大的block中,并为这些小文件建立in-block索引,优化了文件的存储空间和寻址过程。TFS为了保证用户数据的安全性,为每个block在不同的数据服务器(dataserver,ds)上创建多个副本,另外,TFS还支持多集群数据同步。 TFS提供给用户使用的基本接口类似于vfs提供的文件系统,主要包括open、read/write、close、ls... 阅读全文