侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

TFS的原理及应用

2022-06-27 星期一 / 0 评论 / 0 点赞 / 66 阅读 / 4431 字

大概两个月没有写博客了,这两个月被拉入到一个新的项目里,每天身背3个项目超级苦逼啊。 最近的一个项目由于原先的nas服务停了,所以没有办法,只能迁移到TFS上。这本来是一个内部的分享的。TFS本身

大概两个月没有写博客了,这两个月被拉入到一个新的项目里,每天身背3个项目超级苦逼啊。

最近的一个项目由于原先的nas服务停了,所以没有办法,只能迁移到TFS上。这本来是一个内部的分享的。TFS本身也是开源了,所以就拿出来分享一下吧。

这里大部分内容出自TFS的开源网站及内部的wiki,下面是TFS的项目

TFS开源项目:http://code.taobao.org/p/tfs/wiki/index/

TFS是taobao filesystem的简称,是一个分布式的文件系统,目前最新的版本是TFS2.X

TFS和NAS相比,具有线性扩容好,高并发性能好。和HDFS相比更适合小文件,和FastDF相比支持自定义文件夹结构

其1.0的架构如下:


TFS2.0的架构如下:


其中,nameserver负责元数据的管理,文件的定位,写文件块的分配,dataserver的管理,数据备份监控,数据分布及负载均衡。以及操作日志的管理。

dataserver用来存储管理数据文件,处理客户端的文件访问,转发数据写入请求,复制和处理数据文件。

resourcecenter用来管理应用(权限和统计),集群的管理(扩容及应用透明化),计算距离实现就近访问

metaserver用来提供目录和自定义文件服务,也能用来做为后端数据库存储的缓存

rootserver用来刮泥metaserver并且分配metaserver的服务对象

下面是TFS1的写流程和读流程

下面是TFS2的读写流程



TFS有自己的读写API,包括JAVA,c++,python,php各种版本,使用非常简单,下面是我自己封装的一个Utils类


/**     * 获取tfsmanager     * @return     */    public static DefaultTfsManager getTfSManager(){        String CONF_TFS_RS_ADDRESS=ConfigManager.getConfigValue("tfs.rsAddr");        String CONF_TFS_APPKEY=ConfigManager.getConfigValue("tfs.appkey");        String CONF_TFS_IMG_SERVER=ConfigManager.getConfigValue("tfs.image.host");        DefaultTfsManager tfsManager = new DefaultTfsManager();        tfsManager.setRsAddr(CONF_TFS_RS_ADDRESS);  // 设置WebService Root Server地址,地址格式为 ip:port        tfsManager.setAppKey(CONF_TFS_APPKEY);  // 设置appkey        tfsManager.init();        return tfsManager;    }    /**     * 存储tfs文件     * @param inputStream     * @param fileName     * @return     */    public static String saveTfsFile(InputStream inputStream,String fileName){        try {            DefaultTfsManager tfsManager=getTfSManager();            byte[] fileBytes = FileUtils.inputStreamToByte(inputStream);            String fileExt=FileUtils.getFileExt(fileName);            String tfsfileName=tfsManager.saveFile(fileBytes,null,fileExt,true);            return tfsfileName;        } catch (IOException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.            return "";        }    }    /**     * 获取tfs文件     * @param tfsFileName     * @return     */    public static OutputStream getTfsFile(String tfsFileName){        DefaultTfsManager tfsManager=getTfSManager();        OutputStream outputStream=new ByteArrayOutputStream();        Map fileInfor=new HashMap();        boolean result=tfsManager.fetchFile(tfsFileName,"",outputStream,fileInfor);        if(result){            return outputStream;        }else {            return null;        }    }


总结一下,以上内容大部分来着TFS的开源项目文档,大家有兴趣可以访问看一下。TFS使用非常简单,基本上可以替换我原先项目中对NAS的依赖。

广告 广告

评论区