淘寶實時數據傳輸平台: TimeTunnel介紹
作者在工作中遇到了類似流式數據實時接入的業務場景,所以對淘寶的實時數據倉庫這一塊做了一些調研和了解。本文從業務場景和設計上介紹了淘寶的TimeTunnel工具,文中的圖片來自淘寶數據倉庫團隊交流過程中的sildes,也參考了一些相關文檔。
業務背景
TimeTunnel(簡稱TT)是一個基於thrift通訊框架搭建的實時數據傳輸平台,具有高性能、實時性、順序性、高可靠性、高可用性、可擴展性等特點(基於Hbase)。
目前TimeTunnel在阿裏巴巴廣泛的應用於日誌收集、數據監控、廣告反饋、量子統計、數據庫同步等領域。
開源在:TaoCode,代碼是開源的。
業務保障:
保證為所有的報表按時準備好所需數據,延遲不超過一分鍾;
保證為所有的實時應用提供實時數據,延遲不超過一秒鍾。
在整個數據倉庫中的角色(圖中”TT”字樣):

在全量/批量數據導入部分使用的是DHW和DataX,其中DataX貌似是開源的,也是一個不落地的異構數據源傳輸工具。
而在增量,或者說是流式場景下,這部分數據的采集和導入就依賴了TimeTunnel。
TT對接的Storm和Galaxy流計算模塊也簡單提一下:
galaxy是一套支持SQL定義業務邏輯的流計算服務化平台
galaxy之於storm,就類似hive之於hadoop的關係
下圖為Galaxy的一個架構圖:
組件
Time Tunnel大概有幾部分組成,TTmanager,Client,Router,Zookeeper,Broker。
TTManager: 負責對外提供隊列申請、刪除、查詢和集群的管理接⼝口;對內故障發現,發起隊列遷移
Client是一組訪問timetunnel的api,主要有三部分組成:安全認證api,發布api,訂閱api。目前client支持java,python,php三種語言。
Router:為客戶端提供路由信息,找到為消息隊列提供服務的Broker。Router是訪問timetunnel的門戶,主要負責路由、安全認證和負載均衡。Client訪問timetunnel的第一步是向Router進行安全認證,如果認證通過,Router根據Client要發布或者訂閱的topic對Client進行路由,使Client和正確的Broker建立連接,路由的過程包含負載均衡策略,Router保證讓所有的Broker平均地接收Client訪問。
Zookeeper是hadoop的開源項目,其主要功能是狀態同步,Broker和Client的狀態都存儲在這裏。
Broker是timetunnel的核心,負責消息的存儲轉發,承擔實際的流量,進行消息隊列的讀寫操作。

其他
對接數據
- 數據庫的日誌(如mysql、oracle等)
- 服務器產生的日誌(如apache)
- app通過接口產生的數據
隊列資源
- 隊列是一種資源,TimeTunnel提供隊列。
- 隊列按需申請,訂閱隊列接口
持續服務
- 故障發現,發起遷移
- Broker之間流量均衡
- 上下線機器平穩擴容
WhyHBase?
- 順序scan速度快
- 很好的擴展性
- 強一致性
- 高並發寫
- 底層數據存儲基於HDFS
- 開源,社區活躍
- 國內頂級的運維和開發團隊
HBase表設計
- 一個Queue對應一個region
- 一組Queue(256/512)對應一個表
- Rowkey:queueID + timestamp + seq +brokerID
- 數據列族+屬性列族
- 按天分表,方便刪除曆史數據
- Pre-Sharding降低compact和split的發生
全文完 :)
最後更新:2017-04-03 12:56:43