背景:项目中可能会大量存储50K左右的htm小文件,估计每天产生1亿个左右;那么规划三年的存储总量将超千亿,加上俩份备份,总存储将达到15P,如果每台server总磁盘16T,总计需要1000台左右。显然,这么大规模的小文件存储,只能选择taobao的TFS。
1 tfs综述
http://blog.yunnotes.net/index.php/tfs_user_faq/
2 安装
http://blog.yunnotes.net/index.php/install_document_for_tfs/
3 部署
http://blog.yunnotes.net/index.php/deploy_document_for_tfs/
4 调用
http://code.taobao.org/p/tfs/wiki/jclient/
http://code.taobao.org/p/tfs-client-java/wiki/index/
5 下面重点说说碰到的问题
我是在本机的ubuntu13.04 64位上安装tfs2.2.16
首先apt-get安装依赖包automake,libtool,realine,libz-devel,uuid-devel,tcmalloc没遇上啥问题。
其次,下载源码安装tb-common-utils的俩个库也没遇上大问题。
然后,下载tfs源码编译安装遇到了很多问题,总之就是缺这个库缺那个库,具体见下面:
1 configure问题
在./configure 命令之后提示下面的错误: configure: error: C++ compiler cannot create executables
这是因为gcc环境不全,按这篇文章解决http://www.cnblogs.com/Dreama/articles/2114435.html
2 make&make install错误
由于taobao是用gcc早期版本4.1.2编译的,而我本机gcc是4.7.3版本,因此很多地方报错
a:configure加上--with-release参数:./configure --prefix=path_to_tfs --with-release
b:make时uuid相关错误
undefined reference to `uuid_generate‘
undefined reference to `uuid_unparse'
到 src/tools/nameserver中修改Makefile
或者报错的其他模块中,修改Makefile
LIBS = -lmysqlclient -lrt -lpthread -lm -ldl -lc 加 -lz -luuid
具体参见这篇文章:http://www.cnblogs.com/zhy113/archive/2013/03/20/2971267.html
千辛万苦终于安装成功了,配置ns.conf,ds.conf 参见源码部分:http://code.taobao.org/p/tfs/src/trunk/conf/ 不同的版本启动ns,ds需要的参数可能不太一样。
启动nameserver和dataserver,如果成功会打印出相应的pid
终于启动成功啦,用tfstool put一个文件,显示成功,但返回null文件名,google后好像是tfstool的问题。先不管它,下面用javaclient来调用:
我一开始自己下tfs-client-java源码打包成jar,版本是2.3.2,但是配置过程中发现2.1.4后需要rcserver,所以放弃高版本重新下载2.1.1版本;另外高版本的tfs-client-java 测试代码还需要tair这个jar,你得下载tair和tairjavaclient,实在依赖太多太麻烦了。因此我选择了低版本,然后自己写测试代码。
taobao的开源产品最大问题就是文档不太全,然后内部依赖太多,从TFS,TDDL等都是这样,依赖太多也导致产品的开源和推广进度会受到较大影响。说实话,很多人在编译和安装过程中遇到那么多error,8成人可能都放弃了。
现在终于OK啦:
调用代码如下:
package cn.com.dbapp.bas.tfs;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.taobao.common.tfs.DefaultTfsManager;
import com.taobao.common.tfs.TfsManager;
public class TfsjavaclientTest {
public static void main(String[] args){
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] { "tfs.xml" });
TfsManager tfsManager = (DefaultTfsManager) appContext.getBean("tfsManager");
//String localfile = "/opt/tfs/testfile";
//不传入suffix和tfsname
//String tfsname = tfsManager.saveFile(localfile, null, null);
//System.out.println("save with no parameters " + tfsname);
//String tfsname2 = tfsManager.saveFile("testfile".getBytes(), null, null);
//System.out.println("save with bytes " + tfsname2);
//return was as below
//save with no parameters T1ItETByJT1RCvBVdK
//save with bytes T1xaETByJT1RCvBVdK
//String tmp1="/opt/tfs/tmpfile";
//String tmp2="/opt/tfs/bytesfile";
//String tfsname3= tfsManager.saveFile("Hello TFS!!".getBytes(), null, ".html");
//System.out.println("save with bytes " + tfsname3);
tfsManager.fetchFile("T1xRETByJT1RXx1p6K", ".html","/opt/tfs/tfs.html");
//tfsManager.fetchFile("T1ItETByJT1RCvBVdK", null, tmp1);
//tfsManager.fetchFile("T1xaETByJT1RCvBVdK", null, tmp2);
System.out.println("Fectch file finished...");
}
}
tfs.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="tfsManager" class="com.taobao.common.tfs.DefaultTfsManager" init-method="init" >
<!-- 整个进程中系统最多等待多少个请求,取决于你有多少个线程并发的请求TFS -->
<property name="maxWaitThread">
<value>100</value>
</property>
<!-- 单个请求最大的等待时间(ms) 超过这个时间放弃这次请求-->
<property name="timeout">
<value>2000</value>
</property>
<!-- Tfs master nameserver ip address -->
<property name="nsip">
<value>10.0.2.15:8100</value>
</property>
<!-- TFS 集群的编号,这个编号只是一种参考,系统初始化的时候会从ns上取,取不到才用本地设置的.!-->
<property name="tfsClusterIndex">
<value>1</value>
</property>
<!-- TFS在读取文件的时候会缓存block所在的数据服务器ip,这个参数配置了最多缓存的记录个数!-->
<property name="maxCacheItemCount">
<value>10000</value>
</property>
<!-- 上一项缓存最大有效的时间(ms)!-->
<property name="maxCacheTime">
<value>5000</value>
</property>
<!-- 不需要排重功能时,下面配置项可以不设置 -->
<!-- tair排重数据库的serverlist -->
<!-- tair排重数据库的groupName -->
<!-- tair排重数据库的namespace -->
</bean>
</beans>
BTW, 由于网络问题,我的vbox不能选择桥接,只能用NAT,使得我的win7不能访问ubuntu的ip,我的调用代码是在ubuntu虚拟机上eclipse写的,在安装tfs过程中,也顺便安装了maven,svn等;加上去年装的hadoop,tomcat,hbase,hive,原先开的20G空间 ,1G ram已经不太够用啦。
分享到:
相关推荐
1. TFS简介 - 为什么要用TFS:TFS旨在解决传统代码管理工具的局限性,提供全面的项目生命周期管理,促进团队间的沟通与协作,确保项目的顺利进行。 - TFS的逻辑工作流:从创建项目、分配任务,到开发、测试、评审...
#### 一、TFS2013简介 **Visual Studio Team Foundation Server (TFS)** 是微软提供的应用生命周期管理(ALM)解决方案的核心平台。TFS2013不仅适用于本地部署环境,同时也支持云环境下的项目管理和开发工作流。...
1. TFS流程简介 TFS流程是一组或几组动作的集合体,在软件开发领域中往往用来体现一套系统的设计、开发、维护的过程。TFS提供了多种流程模板,例如CMMI 4.2,Scrum等,可以根据项目需求选择合适的流程模板。 2. ...
**一、TFS SDK简介** TFS SDK包含了一系列的API、库和工具,允许开发者使用.NET Framework或Java语言与TFS进行交互。通过这个SDK,开发者可以: 1. **访问TFS仓库**:获取源代码、工作项、构建等信息。 2. **创建...
Nginx-TFS简介** - Nginx-TFS是一种结合了Nginx与TFS(Tencent File System)的解决方案,旨在提供高效的文件存储和分发服务。Nginx作为高性能的Web服务器和反向代理服务器,可以提高TFS的访问速度和稳定性。 **2...
- **TFS简介**:TFS,即Team Foundation Server,是由微软开发的一款综合性的软件开发平台,旨在帮助开发团队更有效地管理和协作。它包含了源代码管理、构建自动化、测试管理等多个功能模块,适合各种规模的软件开发...
#### 一、TFS与VS2010简介 Microsoft Team Foundation Server (TFS) 是一种全面的协作平台,专为软件开发团队设计,提供源代码管理、项目跟踪、自动化构建、报告、实验室管理等功能。随着Visual Studio 2010 (VS...
【TFS简介】 Team Foundation Server (TFS) 是微软提供的一个全面的ALM(Application Lifecycle Management)解决方案,用于管理软件开发的整个生命周期,包括源代码、文档、测试和项目协作。TFS不仅适用于大型企业...
文章首先概括了TFS的特点:最近,淘宝核心系统团队工程师楚材(李震)在其官方博客上撰文(《TFS简介》,以下简称文章)简要介绍了TFS系统的基本情况,引起了社区的关注。 完全扁平化的数据组织结构,抛弃了传统...
#### 一、TFS简介 TFS(Team Foundation Server)是微软开发的一款团队协作工具,主要用于版本控制、工作项跟踪、自动化构建、测试管理和项目管理等方面。它可以帮助开发团队更好地协作,提高开发效率。 #### 二、...
一、TFS简介 TFS的核心功能包括源代码管理、敏捷项目管理、自动化测试、发布管理和问题追踪。通过提供这些工具,TFS旨在提高团队的协作效率,确保软件开发过程的顺畅。而“tfs_1202.tar.gz”是一个已经预先编译好的...
TFS-S23指纹识别仪简介及SDK开发包说明
1. TFS简介: TFS的主要目的是提升软件开发团队的效率和协作能力。它为团队提供了一个集中的存储库,用于管理源代码,同时提供工作项跟踪系统,便于项目管理和任务分配。TFS的逻辑工作流包括创建项目、设置权限、源...
- **TFS简介**:介绍TFS的基本概念,包括其在软件开发生命周期中的作用,以及与Visual Studio的集成。 - **安装和配置**:讲解如何在企业环境中部署TFS服务器,包括硬件和软件需求,以及设置步骤。 - **基础功能*...
### TFS 2012/2013 简介 Team Foundation Server 2012 和 2013 是微软的协作平台,主要面向软件开发团队,提供了一整套工具和服务,用于规划、协作、跟踪和控制软件开发过程。这两个版本在功能上有所升级,例如增强...
TFS2010简明扼要的介绍 软件开发流程与开发工具的介绍
### 一、TFS简介 TFS是微软推出的一款强大的版本控制和项目管理工具,集成了软件开发中的需求管理、源代码控制、测试管理、构建自动化和持续集成等多个方面。它支持敏捷开发流程,如Scrum和Kanban,帮助团队高效...