TiDB 在猿輔導數據快速增長及複雜查詢場景下的應用實踐
猿輔導是國內擁有最多中小學生用戶的在線教育機構,旗下有猿題庫、小猿搜題、猿輔導三款在線教育 APP,為用戶提供在線題庫、拍照搜題、名師在線輔導相關的服務。其中,猿輔導APP已經有超過116萬付費用戶,提供小學英語、奧數,和初中高中全學科的直播輔導課程,全國任何地區的中小學生,都可以享受在家上北京名師輔導課的服務。
海量的題庫、音視頻答題資料、用戶數據以及日誌,對猿輔導後台數據存儲和處理能力都提出了嚴峻的要求。
猿輔導的業務決定了其後台系統具有以下特點:
- 數據體量大,增速快,存儲系統需要能夠靈活的水平擴展;
- 有複雜查詢,BI 方面的需求,可以根據索引,例如城市、渠道等,進行實時統計;
- 數據存儲要具備高可用、高可運維性,實現自動故障轉移。
在最初方案選型時,猿輔導初期考慮用單機 MySQL。但根據業務發展速度預估,數據存儲容量和並發壓力很快就會達到單機資料庫的處理瓶頸。如果在 MySQL 上加入分庫中間件方案,則一定要指定 sharding key,這樣是無法支持跨 shard 的分散式事務。同時 proxy 的方案對業務層的侵入性較強,開發人員必須了解資料庫的分區規則,無法做到透明。
除此之外,分庫分表很難實現跨 shard 的聚合查詢,例如全表的關聯查詢、子查詢、分組聚合等業務場景,查詢的複雜度需要轉嫁給開發者。即使某些中間件能實現簡單的 join 支持,但是仍然沒有辦法保證查詢的正確性。另外廣播是一個沒有辦法 Scale 的方案,當集群規模變大,廣播的性能開銷是很大的。同時,傳統 RDBMS 上 DDL 鎖表的問題,對於數據量較大的業務來說,鎖定的時間會很長,如果使用 gh-ost 這樣第三方工具來實現非阻塞 DDL,額外的空間開銷會比較大,而且仍然需要人工的介入確保數據的一致性,最後切換的過程系統可能會有抖動。可以說,運維的複雜性是隨著機器數量指數級增長,而擴容複雜度則是直接轉嫁給 DBA。
最終,猿輔導的後台開發同學決定尋求一個徹底的分散式存儲解決方案。通過對社區方案的調研,猿輔導發現分散式關係型資料庫 TiDB 項目。
TiDB 是一款定位於在線事務處理/在線分析處理(HTAP)的融合型資料庫產品,具備在線彈性水平擴展、分散式強一致性事務、故障自恢復的高可用、跨數據中心多活等核心特性;對業務沒有任何侵入性,能優雅的替換傳統的資料庫中間件、資料庫分庫分表等 Sharding 方案,並在此過程中保證了事務的 ACID 特性。同時它也讓開發運維人員不用關注資料庫 Scale 的細節問題,專註於業務開發,極大的提升研發的生產力。用戶可以把 TiDB 當作一個容量無限擴展的單機資料庫,複雜的分散式事務和數據複製由底層存儲引擎來支持,開發者只需要集中精力在業務邏輯的開發上面。下圖為 TiDB 與傳統的 MySQL 中間件方案的一些對比:
TiDB 集群主要分為三個組件:TiDB Server、TiKV Server、PD Server。下圖為 TiDB 整體架構圖:
TiDB Server 負責處理 SQL 請求,隨著業務的增長,可以簡單的添加 TiDB Server 節點,提高整體的處理能力,提供更高的吞吐。TiKV 負責存儲數據,隨著數據量的增長,可以部署更多的 TiKV Server 節點解決數據 Scale 的問題。PD 會在 TiKV 節點之間以 Region 為單位做調度,將部分數據遷移到新加的節點上。所以企業在業務的早期,可以只部署少量的服務實例,隨著業務量的增長,按照需求添加 TiKV 或者 TiDB 實例。
在實際上線的部署設置中,猿輔導選擇了 2 TiDB + 3 TiKV + 3 PD 的架構,隨著業務數據的增加可以彈性擴容,數據條數每天 500w,日常庫中數億條記錄,峰值 QPS 1000。
猿輔導的用戶端會做一些直播過程的音視頻質量的數據收集,比如丟包,延遲,質量打分。然後客戶端把這些數據發回伺服器,伺服器把這些數據存到 TiDB 上。
在猿輔導研發副總裁郭常圳看來:「TiDB 是一個很有野心的項目,從無到有的解決了 MySQL 過去遇到的擴展性問題,在很多場合下也有 OLAP 的能力,省去了很多數據倉庫搭建成本和學習成本。這在業務層是非常受歡迎的。」對於接下來的計劃,猿輔導預計在其他分庫分表業務中,通過 syncer 同步,進行合併,然後進行統計分析。
實際上,類似猿輔導這種場景的並不是第一家,在互聯網快速發展下,大量的企業面對著業務激增的情況。TiDB 靈活的水平擴展能力,能夠滿足企業業務快速發展的需要。
目前,TiDB 已有準生產測試用戶 200 余家,其中摩拜單車、同程旅遊、360 金融、心動網路、蓋婭互娛等數十家不同行業的領先企業已經應用在實際生產環境,涉及互聯網、遊戲、金融、政府、電信、製造業等多個領域。
推薦閱讀:
※TiDB 1.1 Alpha Release
※日均數據量千萬級,MySQL、TiDB 兩種存儲方案的落地對比
※TiDB 助力一面數據實現消費領域的決策分析平台