TiDB 助力一面數據實現消費領域的決策分析平台
深圳市一面網路技術有限公司(下稱:一面數據)是一家為消費領域的領導企業提供實時、精準、全面的數據洞察和決策指導的創新型企業,利用人工智慧和演算法,進行自然語言處理,語義情感分析,回歸預測模型等,幫助客戶實現精準產品運營和預測市場變化。一面數據服務於國內外一流企業,包括世界最大的對沖基金、國際一線汽車品牌、快消品龍頭廠商,以及時尚鞋服大牌等。
一、改造前系統架構
一面數據的核心 IT 系統覆蓋了從數據獲取、數據清洗處理、數據建模到數據可視化的全套數據分析流程。核心系統每天有海量從互聯網採集的公開數據和來自企業內部的數據,對數據存儲的容量、擴展性和可用性都有很高的要求。
起初,一面數據的核心系統採用的是多個 MySQL 實例和一個 Cassandra 集群。MySQL 多實例集群主要存儲指定特徵的爬蟲數據,Cassandra 主要存儲數據量大、不適合存儲 MySQL 的全頁面緩存的數據。在數據量/請求量小的時候系統運行正常。下圖為:一面數據改造前系統構架圖
隨著數據量的增長,逐漸暴露出很多問題:
MySQL:
隨著數據增長,存儲容量接近單機的磁碟極限,單機的磁碟 IO 繁忙且易阻塞,查詢性能難以滿足業務增長的需求。數據量大了以後,傳統的 MySQL 水平擴展能力弱,性能和穩定性容易產生問題,在數據量和訪問量增長到一定階段將無法滿足常見的 OLAP 場景分析需求。技術團隊通過診斷系統性能問題,認識到現有資料庫已經成為瓶頸。
Cassandra:
Cassandra 對磁碟 IO 和內存要求高,添加一個實例,需要從其他實例遷數據,對網路帶寬、 磁碟要求特別高。另外 CQL 支持的特性太少,業務開發麻煩,例如不能聯表,不支持主鍵之外的索引,對主鍵以外的查詢比較困難,雖然有 Secondary Index,但是使用限制大。生態圈不完善,例如很難找到好用的監控。
二、改造後的系統架構 - 引入 TiDB 替換 MySQL 和 Cassandra
為從根本上解決以上問題,一面數據的技術團隊決定通過增加部署一套高性能的資料庫系統,以解決當前業務的痛點。 在評估和驗證了 MySQL Sharding 和 MongoDB 等傳統技術手段之後,團隊認識到:基於 MySQL Sharding (即利用 MySQL 中間件分庫分表) 架構在高可用安全能力,業務和查詢的靈活支持以及運維管理難度和成本上都不盡如人意,有著諸多架構上和技術上的缺陷;而 MongoDB 比較適合存儲爬蟲數據,但遷移成本高,不管是數據還是應用程序都需要做侵入性修改和調整,難度和開發成本驟升。另外,作為 NoSQL 資料庫,MongoDB 不支持 SQL 和 JOIN ,對 BI 工具的支持也不完善,數據分析師們無法直接使用。 最終從滿足業務需求、降低切換成本和減少運維成本等角度考慮,一面數據選擇了分散式關係型資料庫-TiDB 作為業務的首選事務型資料庫。
TiDB 支持包括跨行事務,JOIN 及子查詢在內的絕大多數 MySQL 的語法,用戶可以直接使用現有的 MySQL 客戶端連接。如果現有的業務已經基於 MySQL 開發,大多數情況不需要修改代碼即可直接替換單機的 MySQL。同時現有的大多數 MySQL 運維工具(如 PHPMyAdmin, Navicat, MySQL Workbench 等),以及備份恢復工具(如 mysqldump, mydumper / myloader)等都可以在 TiDB 直接使用,這也讓開發運維人員不用關注資料庫 scale 的細節問題,專註於業務開發,極大的提升研發的生產力。下圖為:一面數據改造後系統構架圖
一面數據的生產環境部署了數十個 TiKV 節點及幾個 TiDB 節點。遷移原有 MySQL 集群數據時使用 Percona 的 mydumper 以及 TiDB 專有優化的 loader 工具,逐個爬蟲進行遷移。目前 TiDB 集群存儲了接近數十 TB 的數據,把另外幾個應用遷移完成後將會每日新增近億條記錄。
完成遷移以後,系統不再需要維護多個 MySQL 實例以及 Cassandra 集群,運維成本大幅縮減,監控使用 Prometheus/Grafana,並且可以通過 Prometheus 的 AlertManager 定製規則複雜的報警規則。這些改變都讓一面數據的爬蟲存儲側的工作便利許多,可以讓一面數據的研發把精力更多放在業務研發而不是運維多個不同技術棧的複雜集群。
三、未來的架構規劃
目前 TiDB 新增了 TiSpark 組件,並且在 TiKV 層實現了 Spark 的下推運算元,使得可以直接在 TiDB 集群上跑 Spark 程序,這樣可以省去 ETL 的步驟。後續一面數據也考慮深入使用 TiSpark 組件,讓一面數據的整個系統增加一定的實時複雜查詢的能力。長遠來看,可以把現在 ElasticSearch,Impala,Hive 的業務都遷移到 Spark 集群上,這樣一方面統一了分析側的技術棧,另一方面連接了 Spark 豐富龐大的生態。下圖為:一面數據未來系統構架圖
在一面數據 CTO 張錦傑看來:「 TiDB 水平擴展性、兼容 MySQL 是非常好的特性,對需要使用關係型資料庫作為存儲方案的業務有極大的誘惑力,避免了傳統分表、分庫方案帶來的上層應用的複雜性,解決了我們目前迫切的關係型數據存儲的需求。」
推薦閱讀:
※偷得浮生半日閑—TIDB上海分舵遊記
※TiDB / TiSpark 在易果集團實時數倉中的創新實踐
※黃東旭DTCC2017演講實錄:When TiDB Meets Kubernetes
※三篇文章了解 TiDB 技術內幕 —— 談調度