TiFlash 開源了
TiFlash 終於 開源 (複製連結至瀏覽器檢視: http://github.com/pingcap/tiflash ) 了,而且不再閉源: 我們選了這個特別的節日開源並做出承諾,希望能顯得更加真誠 :)
PingCAP 一直以 來對開源這件事情,是有 信仰 的。這種信仰植根於創始人的情懷,也深深影響了這個旗幟下匯聚的所有人。開源本身並不是一種市場策略:遠在我們看清開源到底能帶來什麼的時候,我們就有了開源的堅持,這也使得我們的開源精神相對 純粹 。作為 TiDB 社群的一個重要力量,我們和其他社群貢獻者一起貢獻程式碼,通過社群使用者的使用、打磨,大家共同分享 TiDB 不斷進步的紅利,沒有任何人為障礙和邊界。自由和共贏的理念,也是我們對技術對開源的 倔強 。
TiDB 是一款 HTAP 分散式資料庫,其中提供 HTAP 能力的重要組成部分是 TiFlash。 從原型開發起,由於是一個探索型的專案,一開始我們並沒有想好最終形態和架構(TiFlash 在 2018 年也的確經歷了一次徹底翻新重做),為了不引起外界太多討論,我們選擇了讓 TiFlash 暫時閉源,等大體成型了再開源。雖然從一開始我們就計劃開源,但待到真正著手做的時候,我們發現它已經欠下了不少「開源債」,顯得和 TiDB 主幹格格不入:釋出流程沒有完全融合,開源所需的文件缺失,編譯體驗相當糟糕,甚至部分程式碼風格有些醜陋。要還上這些債務,需要投入相當多的時間和人力。與此同時,產品迭代的壓力和有限的資源就成為約束 TiFlash 開源的最大障礙。
作為將開源當成信仰的團隊而言,TiFlash 閉源對我們來說其實是如鯁在喉。因此,雖然仍有諸多缺失,我們選擇投入時間逐步還債。畢竟,單獨就這個引擎而言,我們也從社群有所取, 無論是 ClickHouse 絕佳的 Runtime 基礎,還是諸多社群使用者提供的真實場景和改進建議,這些都讓 TiFlash 獲益無算,可以說沒有這些助力,就不會有 TiFlash。
TiFlash 首先受益於開源社群的其他專案,除開我們所使用的各類基礎庫,最重要的部分是: TiFlash 的框架程式碼是基於 ClickHouse 的。 我們使用 ClickHouse 的方式是將它當做一個單機的 Compute Runtime 和 Server 框架,並複用了 Storage Interface。 針對線上事務資料分析的大目標,我們加入了事務相關邏輯、MPP 能力和可實時更新的列存引擎,引入 Raft 協議和 MySQL 相容以融入整個 TiDB 體系。很感謝 ClickHouse 為社群提供了一套高效能的計算引擎,對我們而言,一個好的基礎大大加速了 TiFlash 的研發進度。 值得一提的是,TiFlash 和 ClickHouse 擁有完全不同的擅長場景:TiFlash 完全偏重於事務性資料的分析,我們也並不希望使用者以為 TiFlash 是更好的 ClickHouse。
作為一個年輕的引擎,在兩年多的時間裡,受到天使使用者們包容和幫助的同時,我們也通過近距離傾聽使用者的聲音高速迭代改進產品。這一切也反過來幫助使用者簡化了分析鏈路的架構,享受實時資料的紅利。彼時 TiFlash 雖未開源,卻已得到了 TiDB 社群的加持。
我們清楚地記得, 在早期版本時,稅務系統的朋友和我們一起測試, 嘗試優化繳稅流程的實時性,雖未成功落地,但讓我們對系統設計在真實場景上的得失有了第一手體感,進而直接導致了一次重大重構:我們完全重新設計了儲存層,引入了 Raft Learner 作為複製協議,且決定使用 TiDB-Server 作為統一入口而非 TiSpark,這也是大家今日所見的架構; 而隨著 TiDB 4.0 一起釋出的正式版本,則可以說是完全仰賴小紅書在釋出前數月就提供場景和我們一起探索 ,而這個嘗試最終成功落地電商實時看板場景,讓交易資料得以實時展現; 待到 5.0,從中通有驚無險卻時有毛刺的 618,到流量倍增卻平平穩穩的雙十一,TiFlash 在高壓實時場景的表現得到了提升和驗證 。而這代表的不僅是全球領先快遞公司的核心業務落地,也不僅是數萬 TPS 和數十億訂單的實時監控,更是使用者的包容,信任和互助。
TiFlash 在中通快遞
至今我們都經常會收到客戶的私信,說自己某個場景由於 TiFlash 的能力而得到實在的業務收益。每次看到這些可愛的訊息,我們都會在團隊內分享喜悅。 能幫助大家,提供獨特的價值,是我們所追求的;與此同時,社群的支援,也是產品發展不可或缺的給養,推動它在更嚴苛更有價值的場景落地。 可以說,沒有社群的力量,我們也無法向更多人提供更好的產品。而時至今日,開源則是一個全新的渠道,讓 TiFlash 能以更深入的方式和社群互助共贏。
最後容我們說一句抱歉。雖然開源,但 TiFlash 仍然缺失必要的面向社群的程式碼解讀。關於 TiFlash 和 TiDB HTAP 的架構解析,可以參考我們在 VLDB 2020 釋出的論文《TiDB: A Raft-based HTAP Database》 ,或者 《TiDB HTAP 深度解讀》 (複製連結至瀏覽器檢視: http://zhuanlan.zhihu.com/p/205663113 )、 《TiDB 的列式儲存引擎是如何實現的?》 文章。(社群同學也整理了一份 TiFlash 相關文章的合輯列表,複製連結至瀏覽器即可檢視: http://asktug.com/t/topic/632816 )可惜的是,這些都是基於 TiDB 4.0 版本,當時 TiFlash 仍不具備重要的 MPP 能力。 除此之外,原始碼解析和閱讀指南,也仍在缺失狀態。這些都將在後續的幾個月內陸續補上,以幫助大家閱讀和理解 TiFlash。 希望關注 TiFlash 的大家在使用以外,藉助開源能有更多手段幫助它變得更好,無論是更多的函式,運算元支援,更直觀的 Tracing 能力,還是更快更穩定的 Delta Tree 列存引擎。
是的,我們期待你的貢獻,因為這份力量將會藉助社群的翅膀飛躍令人驚歎的奇景。
祝大家節日快樂。
:bulb: 點選文末 【閱讀原文】 訪問 GitHub TiFlash 倉庫,開啟你的資料實時分析之旅。
- TiDB 6.5 新特性解析丨過去一年,我們是如何讓 TiFlash 高效又穩定地榨乾 CPU?
- TiDB 在安信證券資產中心與極速交易場景的實踐
- 微眾銀行 TiDB HTAP 和自動化運維實踐
- PingCAP 副總裁劉松 :“ Serverless 化” 即將成為資料庫的下一個變革性技術
- TiCDC 原始碼閱讀(四)TiCDC Scheduler 工作原理解析
- Hackathon 實用指南丨快速給 TiDB 新增一個功能
- Hackathon idea 清單出爐,總有一款適合你
- TiDB Hackathon 2022丨總獎金池超 35 萬!邀你喚醒程式碼世界的更多可能性!
- 劉奇:能否掌控複雜性,決定著分散式資料庫的生死存亡
- TiFlash 原始碼閱讀(九)TiFlash 中常用運算元的設計與實現
- TiFlash 原始碼閱讀(八)TiFlash 表示式的實現與設計
- 如何在 TiDB Cloud 上使用 Databricks 進行資料分析 | TiDB Cloud 使用指南
- TiFlash 原始碼閱讀(五) DeltaTree 儲存引擎設計及實現分析 - Part 2
- 深入解析 TiFlash丨面向編譯器的自動向量化加速
- TiFlash 原始碼閱讀(四)TiFlash DDL 模組設計及實現分析
- TiDB v6.0.0 (DMR) :快取表初試丨TiDB Book Rush
- TiFlash 函式下推必知必會丨十分鐘成為 TiFlash Contributor
- TiDB 6.0 實戰分享丨記憶體悲觀鎖原理淺析與實踐
- TiDB 6.1 發版:LTS 版本來了
- TiDB 6.0 實戰分享丨冷熱儲存分離解決方案