TiFlash 開源了

PingCAP發表於2022-04-01

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 和 TiDB HTAP 的架構解析,可以參考我們在 VLDB 2020 釋出的論文《TiDB: A Raft-based HTAP Database》,或者《TiDB HTAP 深度解讀》、《TiDB 的列式儲存引擎是如何實現的?》文章。(社群同學也整理了一份 TiFlash 相關文章的合輯列表 可惜的是,這些都是基於 TiDB 4.0 版本,當時 TiFlash 仍不具備重要的 MPP 能力。除此之外,原始碼解析和閱讀指南,也仍在缺失狀態。這些都將在後續的幾個月內陸續補上,以幫助大家閱讀和理解 TiFlash。希望關注 TiFlash 的大家在使用以外,藉助開源能有更多手段幫助它變得更好,無論是更多的函式,運算元支援,更直觀的 Tracing 能力,還是更快更穩定的 Delta Tree 列存引擎。

是的,我們期待你的貢獻,因為這份力量將會藉助社群的翅膀飛躍令人驚歎的奇景。

祝大家節日快樂。

相關文章