淘宝开源实时数据传输平台-timetunnel
参考:http://www.php100.com/html/open-php/qitakaiyuan/2010/1227/7147.html
http://alikevin2011.iteye.com/blog/1545503
目前TimeTunnel在淘宝广泛的应用于日志收集、数据监控、广告反馈、量子统计、数据库同步等领域。
具有高性能、实时性、顺序性、高可靠性、高可用性、可扩展性等特点
timetunnel大概有四部分组成,client,router,zookeeper,broker。
client是一组访问timetunnel的api,主要有三部分组成:安全认证api,发布api,订阅api。目前client支持java,python,php三种语言
router是访问timetunnel的门户,主要负责路由、安全认证和负载均衡。client访问timetunnel的第一步是向 router进行安全认证,如果认证通过,router根据client要发布或者订阅的topic对client进行路由,使client和正确的 broker建立连接,路由的过程包含负载均衡策略,router保证让所有的broker平均的接收client访问。
zookeeper是hadoop的开源项目,其主要功能是状态同步,broker和client的状态都存储在这里。
broker是timetunnel的核心,负责消息的存储转发。
timetunnel的淘宝应用:
在淘宝,每天有1000多台服务器生成日志文件,日志总量大概有10T,每天成千上万的报表基于这些数据进行计算。有的报表每半小时计算 一次,有的报表每天计算一次,还有些非报表应用需要实时进行数据分析。如何保证这些报表和应用按时收到自己需要的数据?每天10T的数据,换算成峰值流量 是10T/12小时= 242.73MB/S,这么大的流量应该如何管理?
淘宝实时数据传输平台-timetunnel就是因这些需求而诞生的,目前在淘宝timetunnel使用三台服务器服务所有的应用,每秒钟实测流 入流量峰值为50MB/S(压缩后),流出流量为130MB/S(压缩后)。timetunnel保证为所有的报表按时准备好所需数据,延迟不超过1分 钟;保证为所有的实时应用提供实时数据,延迟不超过1秒。
notify发送消息流程:
1. 发送prepare消息(包含完整的消息内容)
2. 执行业务更新,可以使用数据库事务
3. 基于业务更新结果,发送rollback/commit信号到消息中间件
异常情况:因为断网或者机器crash,第3步操作一致没有发送到消息中间件,这样的消息称之为未决消息。
针对未决消息,会由消息中间件定时回调发送方系统,发送方系统基于消息体内容判断对应的数据库业务是否已经提交或者失败,发送rollback/commit.