【MySQL互換】分散 SQLデータベース「TiDB」について【OSS】
目次
技術営業部の大原です。
今回は オープンソース(OSS)の分散SQLデータベース「TiDB(タイデービー)」について記載します。
TiDB の概要
■ TiDB は オープンソースデベロッパーである PingCAP社 によって開発され、現在では PingCAP社 が所属する CNCF(Cloud Native Computing Foundation)のコミュニティによって管理されています。
■ TiDB は HTAP(Hybrid Transactional and Analytical Processing)のワークロードをサポートする、オープンソースの NewSQL データベースです。
■ 「MySQL」と互換性があり、水平方向のスケーラビリティ・強力な一貫性・高可用性を備えています。OLTP(オンライントランザクション処理)・OLAP(オンライン分析処理)を HTAP でカバーし、高可用性と大規模データとの強力な一貫性を必要とする、様々なユースケースに適しています。
■ 日本企業での導入事例として、QR決済サービスを展開する PayPay社 のインフラでも利用されています。
◇ 引用:トランザクションを支える決済プラットフォームエンジニア
TiDB の機能
● 水平分散のスケールアウト / スケールイン
・コンピューティングをストレージから分離する TiDB アーキテクチャ設計により、必要に応じて、コンピューティング / ストレージの容量を、オンラインで個別にスケールアウト / スケールインできます。
● マルチレプリカ と高可用性
・複数のレプリカにデータ保存されたレプリカは、Multi-Raft プロトコルを使用してトランザクションログを取得します。
・トランザクションは、データが大部分のレプリカに正常に書き込まれた場合にのみコミットするため、これにより、少数のレプリカがダウンした場合の強力な一貫性と可用性が保証されます。
・様々な災害耐性レベルの要件を満たすために、必要に応じたリージョンとレプリカの数量を構成できます。
● リアルタイム HTAP
・TiDB は 行ベースのストレージエンジンである TiKV と、列型ストレージエンジンである TiFlash の2つのストレージエンジンを提供します。
・TiFlash は Multi-Raft Learner プロトコルを使用して、TiKVからのデータをリアルタイムで複製し、TiKV 行ベースのストレージエンジンと TiFlash 列型ストレージエンジン間のデータの一貫性を確保します。
・TiKV と TiFlashは HTAPリソース分離の問題を解決するために、必要に応じて異なるマシンに展開できます。
● クラウドネイティブの分散データベース
・TiDB は クラウド向けに設計された分散データベースであり、クラウドプラットフォームに柔軟なスケーラビリティ・信頼性・セキュリティを提供し、ユーザーは ワークロードの要件に合わせてTiDBを柔軟にスケーリングできます。
・TiDBでは 各データに少なくとも3つのレプリカがあり、データセンター全体の停止を許容するために、異なるクラウド可用性ゾーンでスケジュールすることができます。
・TiDB Operator は、Kubernetes での TiDB の管理を支援し、TiDBクラスターの運用に関連するタスクを自動化するため、管理対象の Kubernetes を提供するクラウドに TiDB を簡単にデプロイできます。
・TiDB 自体をフルマネージドで管理される「TiDB Cloud」のサービスでは、クラウド上で数回クリックしていくだけで、TiDB のクラスターをデプロイして実行できます。
※ TiDB Cloud は、AWS や Azure・GCP などのクラウドプラットフォーム内で展開される、マネージドサービス(有料サービス) の一つです。
● MySQL5.7 プロトコル 及び MySQL エコシステムと互換性
・TiDBは MySQL 5.7プロトコル・MySQLの一般的な機能・MySQLエコシステムとの互換性があるので、既存のアプリケーションをTiDBに移行する際に、多くのコードを変更する必要はなく、少量のコードを変更するだけで済みます。
・TiDBは アプリケーションデータをTiDBへ移行するのに役立つ一連のデータ移行ツール もあります。
TiDB のアーキテクチャ
◇ 引用:TiDB Architecture
分散データベースとして、TiDB は複数のコンポーネントで構成されるように設計されています。これらのコンポーネントは相互に通信し、完全な TiDB システムを形成します。
● TiDB サーバー
・TiDBサーバーは MySQLプロトコルの接続エンドポイントを 外部に公開するステートレス SQLレイヤーです。TiDB サーバーはSQL要求を受信し、SQLの解析と最適化を実行し、最終的に分散実行プランを生成します。
・水平方向にスケーラブルであり、Linux Virtual Server(LVS)/ HAProxy / F5などの負荷分散コンポーネントを介して外部への統合インターフェイスを提供します。データは保存されず、コンピューティングとSQL分析専用であり、実際のデータ読み取り要求を TiKV ノード(または TiFlash ノード)に送信します。
● PD(Placement Driver)サーバー
・PDサーバーは少なくとも3つのノードで構成された、クラスター全体のメタデータ管理の役割の担うコンポーネントです。
・すべての単一 TiKVノードのリアルタイムデータ分散のメタデータと、TiDB クラスター全体のトポロジー構造を格納し、TiDB ダッシュボード管理UIを提供し、分散トランザクションにトランザクションIDを割り当てます。
・PDサーバーは クラスターのメタデータを格納するだけでなく、TiKV ノードによってリアルタイムで報告されたデータ分散状態に従って、特定の TiKVノードにデータスケジューリングコマンドを送信します。
● ストレージサーバー
◇ TiKV サーバー
・TiKVは 分散型トランザクションKey-Valueストレージエンジンで、TiKV サーバーはデータ保存の役割を担います。
・各リージョンには、StartKey から EndKey までの左閉と右開の間隔である特定のキー範囲のデータが格納され、各TiKVノードには複数のリージョンが存在します。TiKV API は キーと値のペアレベルで分散トランザクションにネイティブサポートを提供し、デフォルトでスナップショット分離レベルの分離をサポートします。
・SQL ステートメントを処理した後、TiDB サーバーはSQL実行プランを TiKVAPI への実際の呼び出しに変換します。データは TiKV に保存され、TiKVのすべてのデータは、複数のレプリカ(デフォルトでは3つのレプリカ)で自動的に維持されるため、TiKV はネイティブの高可用性を備え、自動フェイルオーバーをサポートします。
◇ TiFlash サーバー
・TiFlash サーバーは特別なタイプのストレージサーバーです。通常の TiKV ノードとは異なり、TiFlash はデータを列ごとに保存し、主に分析処理を高速化するように設計されています。
まとめ
オープンソース(OSS)・水平分散型・MySQL互換 という特徴をもった可用性が高いサービスなので、ソーシャルゲーム・ECサイトなどのWebサービス用途のデータベースとして、選定の一つに加えるのも面白いかもしれません。