靠自己努力赚钱:[url]http://72191.taobao.com[/url]
0.介绍
TimeTunnel(简称TT)是一个基于thrift通讯框架搭建的实时数据传输平台,具有高性能、实时性、顺序性、高可靠性、高可用性、可扩展性等特点。
高性能
2k大小的消息,峰值每秒4w TPS的访问。淘宝3台服务器,每天处理2.3T(压缩后)数据,峰值每秒50MByte流入流量、130MByte流出流量
实时性
90%的消息5ms以内送达
顺序性
如果你开启了顺序传输功能,timetunnel保证消息的发布顺序和订阅顺序是一致的
高可靠性
存储方面,我们设计了内存->磁盘->hadoop dfs三级缓存机制,确保数据可靠。 系统方面,我们将服务器节点组织成环,在环里面每一个节点的后续节点是当前节点的备份节点,当某节点故障时,后续节点自动接管故障节点数据,以保证数据可靠性
高可用性
单个节点故障,不影响系统正常运行
可扩展性
可以对系统进行横向和纵向扩展,横向扩展可以向现有的服务环里面增加节点,纵向扩展可以增加服务环
目前TimeTunnel在淘宝广泛的应用于日志收集、数据监控、广告反馈、量子统计、数据库同步等领域。
1.源代码 http://code.taobao.org/svn/TimeTunnel/trunk
2.安装
第一步: 获取源码
svn co http://code.taobao.org/svn/TimeTunnel/trunk
第二步: 编译
mvn clean install -Dmaven.test.skip=true
编译成功后各模块代码:
broker: broker/target/dist
client: client/java/target/dist
router: router/target/dist
第三步: 安装
将各模块拷贝到目标目录即可,假设目标目录为/usr/timetunel,则可以这样拷贝:
cp -r broker/target/dist /usr/timetunnel/broker/
cp -r router/target/dist /usr/timetunnel/router/
cp -r client/java/target/dist /usr/timetunnel/client/
第四步: 启动 zookeeper
timetunnel需要zookeeper同步状态,因此假设你的系统是安装并启动了zookeeper
第五步: 启动router
配置文件: /usr/timetunnel/router/conf/router.properties, 将ZK_HOST_LIST设置为你自己的zookeeper地址
执行/usr/timetunnel/router/bin/router-start.sh
第六步: 启动broker
3.相关配置信息
zookeeper
zookeeper是apache的开源项目,主要功能是状态同步,因此TimeTunnel也选择zookeeper作为状态同步的工具,将系统运行所需要的状态信息都存储在zookeeper里。以下介绍的配置结构都是指zookeeper里面的存储结构,所有介绍以"/"目录开始,由于zookeeper在访问时可以配置根目录,因此"/"是相对的。假设你的访问zookeeper的链接配置为host1:port1,host2:port2/tt2,那么"/"就是从/tt2开始。另请注意,配置项的值以json形式存储。
用户信息
/user
/name1 {"password":"xjddjdk"}
/name2 {"password":"jdjdhsd"}
/name3 {"password":"dhiksdh"}
/user目录下是所有可以访问TT的用户列表,每一个列表项的值是对应用户的密码,client就是使用这个用户和密码向router发起链接认证的。
注:此信息需要管理员设置。
topic信息
/categories
/click {"timetolive":"60","group":"group1"}
/subscribers
/userA-click
/userB-click
/p4p {"timetolive":"60","group":"group2"}
/subscribers
/userA-p4p
/userB-p4p
所有的topic信息都位于/categories目录下,每个topic都有两个属性:timetolive和group,timetolive是指属于此topic的消息在TimeTunnel中的最长存活时间,如果超过最长存活时间仍然没有被消费,则自动被删除;group是指属于此topic的消息应该被发布到那个broker环,一个broker环就是一个group。
每个topic下面都有subscribers目录,subscribers目录下是所有订阅ID,每一个订阅ID以username-topic对的形式存在,username和topic之间以中划线分割,每个用户对同一个topic只能订阅一次。
注:此部分信息也需要系统管理员设置
client连接信息
/clients
/host1
/1f264fe0 {"type":"pub", "timeout":"10"}
/host2
/1f264fe4 {"type":"pub", "timeout":"10"}
/host3
/1f264fe6 {"type":"pub", "timeout":"10"}
/host4
/1f264f50 {"type":"pub", "timeout":"10"}
/host5
/90cbcba7 {"type":"sub", "timeout":"10", "subscriber":"userA-click", "receiveWindowSize":"100"}
/1f2f4fe8 {"type":"sub", "timeout":"10", "subscriber":"userB-p4p", "receiveWindowSize":"100"}
/clients下记录了所有客户端服务器的连接信息,每个客户端服务器可以建立多个连接。每个连接用唯一的token串标识,每个连接至少有两个属性:type标识连接的类型,分发布和订阅两个类型;timeout标识一个最长空闲时间,单位是秒,如果一个连接在timeout设定的时间内没有发起人和请求,broker将此链接标识为无效连接,并进行清理。如果链接类型是订阅,则还会有两个额外的属性:subscriber标识订阅ID,receiveWindowSize设置该订阅单次访问的最大窗口,就是一次最多可以获取的消息个数。
注:此信息由router自动创建
broker环信息
/brokers
/group1
/b00000001 {"host":"localhost", "external":"9999", "internal":"9998"}
/b00000002 {"host":"localhost", "external":"9999", "internal":"9998"}
/b00000003 {"host":"localhost", "external":"9999", "internal":"9998"}
/b00000004 {"host":"localhost", "external":"9999", "internal":"9998"}
/group2
/b00000001 {"host":"localhost", "external":"9999", "internal":"9998"}
/b00000002 {"host":"localhost", "external":"9999", "internal":"9998"}
/b00000003 {"host":"localhost", "external":"9999", "internal":"9998"}
/brokers下存储所有broker环信息,broker环我们也称之为group。每个group有N个节点,每个节点有三个属性:host标识节点ip,external标识节点对外提供服务的端口,internal标识节点内部同步的端口
注:此数据当broker启动时由broker自动注册
配置文件:/usr/timetunnel/broker/conf/conf.properties,文件里有详细说明
/usr/timetunnel/broker/bin/broker-start.sh