TiFlashがオープンソース化

TiDBはHTAP分散型のデータベースであり、HTAP機能を提供するための重要な構成要素がTiFlashです。プロトタイプの開発以降、試験的なプロジェクトという性質のため、最終形態およびフレームワークを最初から十分に想定することができませんでした (実際、TiFlashは2018年に再構築されています)。そこで、外界の議論が白熱しすぎることのないよう、TiFlashを一時的にクローズドソース化し、大枠の完成を待ってから再度オープンソース化することを選択しました。オープンソース化は当初から計画されてはいたのですが、本格的に着手する段階になって、「オープンソース化のための懸念事項」が少なからずあり、TiDBのバックボーンに全く適用できない状態であることが分かりました。すなわち、リリースフローが完全に適用できる状態ではありませんでした。オープンソース化に必要なファイルが欠けており、コンパイル結果も惨憺たるものでした。さらにはコードスタイルの一部がいささか不格好でさえありました。これらの解決には、多くの時間と手間をかける必要がありました。それと同時に、製品の世代交代の圧力や、限られたリソースが、TiFlashのオープンソース化を制約する最大の障壁となりました。
オープンソース化を信念に持っている我々にとって、TiFlashのクローズドソース化という行為は、実際、魚の骨が喉に刺さったようなものでした。そのため、数多くの不備がある状態ではありましたが、時間をかけて少しずつ問題を解決することを選択しました。結局、このエンジン単体についても、弊社がコミュニティから得るものは多く、ClickHouseの素晴らしいRuntimeベースであれ、多くのコミュニティユーザーから提供される実際のシナリオや改善意見であれ、いずれもTiFlashに大きく役立つこととなりました。その助けがなければ、TiFlashも存在しなかったといえます。
TiFlashは、まず、オープンソースコミュニティにおける他のプロジェクトから恩恵を受けました。PingCAPが使用する各種のデータベースを除けば、最も重要な点は、TiFlashのフレームワークコードがClickHouseをベースとしているということです。ClickHouseを使用するにあたって、それをスタンドアローンのCompute Runtime、およびServerフレームワークとし、かつStorage Interfaceを再利用しました。また、オンラインでのトランザクションデータ分析という大きな目標を見据え、トランザクション関連ロジック、MPP機能およびリアルタイムアップデート可能な列指向ストレージエンジンを追加するとともに、RaftプロトコルとMySQL互換性を導入してTiDBシステム全体に組み込みました。ClickHouseからコミュニティに提供された高性能な計算エンジンのおかげで、良質なベースを得て、TiFlashの開発を大きく加速させることができました。ここで伝えたいのは、TiFlashが得意とするシナリオは、ClickHouseとは全く異なっているということです。すなわち、TiFlashはトランザクション的データの分析に完全に特化しています。弊社としては、ClickHouseをより良くしたものがTiFlashである、という認識をユーザーが持つことは望んでいません。
2年あまりという開発年数の浅いプロジェクトですが、開発を応援してくださるユーザーの方々から暖かいサポートを受けました。それとともに、PingCAPもユーザーの声を間近で聞くことによって、迅速に製品の世代交代・改善を行ってきました。それらはすべて、ユーザーが分析リンクのフレームワークを簡略化し、リアルタイムデータの恩恵を受けることにも役立ちました。その時点で、TiFlashはまだオープンソース化されてはいなかったものの、TiDBコミュニティの支持を得ることになったのです。
初期バージョンの段階で、税務システム担当の友人が、我々とともにテストを行った時のことを鮮明に覚えています。納税フローのリアルタイム性の最適化を試みた際、成功には至りませんでしたが、実際のシナリオにおけるシステム設計の得失を直接的に体感することができ、それがそのまま製品の重大な再構築につながりました。すなわち、ストレージ階層を一から再設計し、複製プロトコルとしてRaft Learnerを導入するとともに、統一ポータルではTiSparkではなくTiDB Serverを使用することを決定しました。それは、今日ユーザーの皆様がご覧になっているフレームワークでもあります。また、TiDB 4.0とともにリリースされた正式バージョンは、リリースの数か月前に中国のEC機能付きSNSサービス「小紅書 (RED)」から提供されたシナリオで模索を行った成果であるということが言えます。この試みによって、最終的にリアルタイム電子商取引サービスのモデルシナリオが実現し、取引データのリアルタイム表示が可能となりました。TiDB 5.0では、中国の物流大手である中通快逓 (ZTOエクスプレス) 社がトラブルに見舞われつつも、間一髪で乗り切った「618 (京東集団 [JD.com] が創立記念日の6月18日に合わせて展開するセール)」から、トラフィックが倍増しながらも、安定的な運営を行うことができた「双十一 (独身の日セール)」まで、TiFlashは高い負荷のかかるリアルタイムシナリオのパフォーマンスにおいて、向上および検証の機会を得ることができました。これは、世界トップレベルの宅配業者のコアビジネスがうまく機能したこと、数万のTPSおよび数十億の注文のリアルタイムモニタリングが実現したことのみならず、ユーザーからサポートと熱い信頼を得られたことを意味しています。

中通快逓におけるTiFlashの役割
現在では、「TiFlashの機能のおかげで、こんな場面で大きな業務収益を上げることができた」といった報告をお客様からいただくことも多く、このような大変ありがたいメッセージを見る度に、我々はチーム内で喜びを分かち合っています。皆様の助けとなり、唯一無二の価値を提供すること、それがPingCAPの追い求めるものです。それと同時に、コミュニティからの支援も、製品開発には不可欠な要素です。それによって、製品開発はより過酷になりがちではあるものの、いっそうミッションクリティカルな場面で必要とされる機能実現のために前進していくことができます。つまり、コミュニティの力なくして、より多くの人々に、より良い製品を提供することはできません。今日では、オープンソース化は、TiFlashがコミュニティと相互扶助、ウィン・ウィンの関係をいっそう深く築くための全く新しい経路となっているのです。
最後に一つ、お詫びしなければいけないことがあります。TiFlashのオープンソース化はしましたが、依然として、コミュニティ向けに必要なコード解読が行われておりません。TiFlash、およびTiDB HTAPのフレームワーク解析については、PingCAPがVLDB 2020で発表した論文「TiDB: A Raft-based HTAP Database」、または「TiDB HTAP詳細解読」、「TiDBの列指向ストレージエンジンは如何にして実現したか?」の文章を参照できます (コミュニティの方がTiFlash関連の文章をリストに整理していますので参考にしてください) が、残念なことに、これらはいずれもTiDBバージョン4.0に基づくものであり、当時のTiFlashには重要なMPP機能が備わっておりませんでした。このほか、ソースコードの解析、およびソースコードリーディングのガイドラインも不十分な状態にあります。これらは、皆様がTiFlashを解読および理解する際に役立てるよう、今後、順次補足していく予定です。TiFlashのオープンソース化の利点を活かして、いっそう多くの有効な関数、演算子、直観的なTracing機能、更には、高速で安定的なDelta Tree列指向ストレージエンジンなど、より良い改善のため日本のユーザーの皆様からのフィードバックもお待ちしています。今すぐ、PingCAPのコミュニティに参加しましょう!