メインコンテンツまでスキップ
に最終更新

システムアーキテクチャ

このドキュメントでは、Apache Doris のシステムアーキテクチャについて、次の二つのデプロイメント方式の主要コンポーネントと、それらがどのように連携するかを説明します。

  • ストレージ・コンピュート統合型アーキテクチャ:データの保存と計算を統合した従来の FE + BE アーキテクチャです。
  • ストレージ・コンピュート分離型アーキテクチャ:メタデータ、コンピュート、ストレージを三つのレイヤーに分離します。

用途: アーキテクチャの選択、アーキテクチャの学習、運用面の理解。

ストレージ・コンピュート統合型アーキテクチャ​

ストレージ・コンピュート統合型アーキテクチャは、Apache Doris の従来のデプロイメント方式です。**Frontend(FE)とBackend(BE)**の二種類のプロセスで構成されます。

ストレージ・コンピュート統合型アーキテクチャ

主要コンポーネント​

Frontend(FE)ノード​

FE は Apache Doris のエントリーノードであり、調整と制御を担当します。

役割説明
ユーザーリクエストの処理MySQL プロトコルと互換性があり、標準 SQL をサポートします
クエリの解析と計画字句解析 -> 意味解析 -> 論理プランの生成 -> CBO による最適化 -> 実行の指示
メタデータ管理データベースとテーブルのスキーマ、レプリカの分布、ユーザー権限、クラスターの構成、ロードの状態を管理します
ノード管理ハートビートの検出、負荷分散、レプリカの修復、スケールアウトとスケールインを管理します

FE はメタデータのストレージエンジンとして BDB JE を使用し、トランザクション機能をサポートします。ZooKeeper などの外部コンポーネントに依存しないため、デプロイと保守が簡単です。

Backend(BE)ノード​

BE は計算とストレージを担当するノードです。

機能説明
カラム型ストレージデータを列ごとに編成し、エンコーディングと圧縮を組み合わせて I/O 効率を高めます
データのシャーディング(Tablet)データを水平方向に分割します。Tablet はレプリカのスケジューリングにおける最小単位です
複数のレプリカ各 Tablet にはデフォルトで3つのレプリカがあり、異なる BE ノードに分散されます
ベクトル化実行列指向のメモリレイアウトと SIMD による高速化を組み合わせ、幅の広いテーブルの集計で5~10倍の性能を実現します
パイプラインエンジンスレッド数を制限しながら複数の CPU コアで並列処理を行い、スレッドの過剰な増加を防ぎます

FE の高可用性​

本番環境では複数の FE ノードをデプロイします。ロールの種類は次のとおりです。

ロール役割選出への参加
Masterメタデータを読み書きし、Follower と Observer に同期します参加する
Followerメタデータを読み取り、Master に障害が発生した場合は選出に参加します参加する
Observerメタデータを読み取り、クエリの同時実行能力のみを拡張します参加しない

メタデータの変更には、整合性を確保するためにノードの過半数による確認が必要です。

アーキテクチャの特徴​

  • シンプルで保守しやすい:プロセスは FE と BE の二種類だけです。
  • 高性能:コンピュートノードがローカルストレージに直接アクセスするため、ネットワークのオーバーヘッドが小さくなります。
  • 高可用性:複数のレプリカと自動的な障害分離を組み合わせています。
  • 水平スケーリング:FE と BE の両方がオンラインでのスケールアウトをサポートします。

ストレージ・コンピュート分離型アーキテクチャ​

バージョン 3.0 で導入されたこのアーキテクチャでは、コンピュートレイヤーとストレージレイヤーを完全に分離し、それぞれを独立して柔軟にスケーリングできます。

ストレージ・コンピュート分離型アーキテクチャ

主要コンポーネント​

ストレージ・コンピュート分離型アーキテクチャでも FE ノードは維持され、引き続きユーザーリクエストの受け付けとクエリの解析を担当します。データレイヤーのメタデータを管理するために、新たに Meta Service が追加されます。

FE Frontend ノード​

ストレージ・コンピュート分離型アーキテクチャでも、FE の役割は変わりません。

役割説明
ユーザーリクエストの処理MySQL プロトコルと互換性があり、標準 SQL をサポートし、認証と権限の検証を行います
クエリの解析と計画字句解析 -> 意味解析 -> 論理プラン -> CBO による最適化 -> 実行の指示
SQL レイヤーのメタデータデータベースとテーブルのスキーマ、ユーザー権限、クラスターの構成を管理します

メタデータレイヤー(Meta Service)​

水平方向にスケーリングできるステートレスなサービスです。

役割説明
データ取り込みのトランザクションバージョン管理と競合検出を行います
Tablet のメタデータデータのバージョンとファイル一覧を管理します
Rowset のメタデータ復旧とガベージコレクションに使用する差分データの情報を管理します
クラスターのリソースコンピュートグループのリソース割り当てとスケジューリングを行います

コンピュートレイヤー​

コンピュートレイヤーは複数のコンピュートクラスターで構成され、各クラスターには複数のステートレスな BE ノードが含まれます。コンピュートクラスターは同じデータを共有しますが、計算リソースはそれぞれ独立しています。

機能説明
独立したリソース各コンピュートクラスターが異なる業務ワークロードを独立して処理します
ステートレスな BEデータを永続的に保存せず、アクセス頻度の高いデータだけをキャッシュします
柔軟なスケーリングノードを追加または削除しても、ほかのコンピュートクラスターには影響しません
ローカルキャッシュアクセス頻度の高いデータを LRU ポリシーに従ってキャッシュし、アクセス遅延を減らします

共有ストレージレイヤー​

ストレージレイヤーは、セグメントファイルや転置インデックスファイルを含むすべてのデータファイルを永続的に保存します。

サポートする種類例
オブジェクトストレージS3、OSS、COS、OBS、MinIO
分散ファイルシステムHDFS
CephRGW、CephFS

アーキテクチャの特徴​

  • コンピュートの柔軟なスケーリング:需要に応じてリソースを増減でき、負荷のピークと谷があるワークロードに適しています。
  • ワークロードの分離:異なる業務チームがデータを共有しながら、計算リソースを独立させられます。
  • 低いストレージコスト:オブジェクトストレージなど、低コストの選択肢を利用できます。
  • 分単位のスケーリング:計算リソースをすばやく調整できます。

比較と選択​

コンポーネントの機能比較​

二つのアーキテクチャでは、コンポーネントの役割が次のように異なります。

比較項目ストレージ・コンピュート統合型ストレージ・コンピュート分離型
FE ノードすべてのメタデータを保存しますSQL レイヤーのメタデータのみを保存します
BE ノードステートフル(データを保存します)ステートレス(アクセス頻度の高いデータのみをキャッシュします)
データの保存場所BE のローカルディスク共有ストレージレイヤー。BE のローカルディスクはキャッシュとして使用します
スケーリングの対象ストレージとコンピュートを一緒にスケーリングしますコンピュートとストレージを独立してスケーリングできます
ストレージコスト高い(SSD)低い(オブジェクトストレージ)
運用の複雑さ低い高い(外部ストレージに依存します)
クエリのレイテンシー低い(ローカル I/O)キャッシュミス時はやや高くなります。キャッシュヒット時は統合型アーキテクチャと同じです

選択の指針​

利用シナリオに応じて適切なアーキテクチャを選択します。

シナリオストレージ・コンピュート統合型ストレージ・コンピュート分離型
開発・テスト環境、簡単な試行✓
共有ストレージ(HDFS / Ceph / オブジェクトストレージ)が利用できない✓
専任の DBA がおらず、複数のチームがそれぞれ保守する✓
柔軟なスケーリングや Kubernetes によるコンテナ化が不要✓
すでにパブリッククラウドにデプロイしている✓
信頼性の高い共有ストレージシステムが利用できる✓
Kubernetes によるコンテナ化やプライベートクラウドでの柔軟なスケーリングが必要✓
複数のコンピュートクラスターでデータを共有する✓
保守を担当する専任のプラットフォームチームがある✓

主要な技術モジュール​

ストレージエンジン​

カラム型ストレージと圧縮

データを列ごとに編成するため、クエリで使用する列だけを読み取り、I/O を削減します。辞書エンコーディング、ビットマップ圧縮、RLE などのアルゴリズムを組み合わせることで、高い圧縮率を実現します。

インデックス構造

インデックスの種類用途
ソート済み複合キー(最大3列)同時実行数の多いレポート処理でのプルーニング
Min/Max数値型に対する等価条件と範囲条件での絞り込み
BloomFilterカーディナリティの高い列に対する等価条件での絞り込み
転置インデックス任意のフィールドに対する高速検索と全文検索

データモデル

モデル特徴用途
Duplicate モデル明細データを保持しますファクトテーブルの明細の保存
Primary Key モデル一意の主キーを持ち、同じ主キーの行は上書きされます行単位の更新
Aggregate モデル同じ主キーの行が自動的に集約されます事前集約による高速化

クエリエンジン​

MPP 分散クエリ

複雑なクエリを複数のステージに分解し、複数の BE ノードで並列処理します。分散シャッフル結合をサポートし、大規模なテーブル同士の結合を効率的に処理します。

ベクトル化実行

列指向のメモリレイアウトと SIMD 命令を組み合わせ、幅の広いテーブルの集計で5~10倍の性能を実現します。

パイプライン実行エンジン

スレッド数を制限しながら複数の CPU コアで並列処理を行うことで、スレッドの過剰な増加を防ぎます。また、オペレーター間のデータコピーとメモリ割り当てのオーバーヘッドを削減します。

クエリオプティマイザー

オプティマイザー戦略
RBO定数畳み込み、サブクエリの書き換え、述語のプッシュダウン
CBOコスト推定と結合順序の変更
HBO過去のクエリを利用して繰り返し実行されるクエリを高速化します

Runtime Filter

実行時にフィルターを動的に生成し、スキャンノードにプッシュダウンして処理するデータ量を減らします。サポートする種類には In、Min/Max、BloomFilter があります。

高可用性の仕組み​

複数のレプリカとクォーラムプロトコル

  • デフォルトで3つのレプリカを保存します。
  • 書き込みが成功するには、過半数のレプリカ(たとえば2つ)による確認が必要です。
  • 一部のノードに障害が発生してもデータは失われず、クラスターは利用可能な状態を維持します。

障害の自動分離

  1. ノードのハートビートのタイムアウトやレプリカの破損を検出します。
  2. ノードを利用不可としてマークし、そのノードへのタスクの割り当てを停止します。
  3. 正常なレプリカから不足しているレプリカを自動的に再作成します。
  4. 復旧後、差分データを自動的に同期します。

FE の高可用性

Paxos に似たコンセンサスプロトコルにより、メタデータの整合性を確保します。Master に障害が発生すると、Follower が自動的に新しい Master を選出します。この切り替えをユーザーが意識する必要はありません。


FAQ​

Q: ストレージ・コンピュート統合型と分離型のアーキテクチャの主な違いは何ですか?​

統合型アーキテクチャでは、BE ノードがデータの保存と計算の両方を担当し、データはローカルディスクに保存されます。分離型アーキテクチャでは、データは共有ストレージレイヤー(S3 や HDFS など)に保存され、BE ノードはローカルキャッシュを使用してクエリを高速化するステートレスなコンピュートノードとして動作します。分離型アーキテクチャでは、コンピュートとストレージのリソースを独立して柔軟にスケーリングできます。

Q: ストレージ・コンピュート分離型アーキテクチャは、どのような場合に選択すべきですか?​

分離型アーキテクチャは、すでにパブリッククラウドにデプロイしている場合、Kubernetes によるコンテナ化が必要な場合、信頼性の高い共有ストレージシステム(HDFS、Ceph、オブジェクトストレージ)を利用できる場合、複数のコンピュートクラスターでデータを共有する必要がある場合、保守を担当する専任のプラットフォームチームがある場合に適しています。シンプルな用途や開発・テスト環境には、統合型アーキテクチャのほうが適しています。

Q: ストレージ・コンピュート分離型アーキテクチャでは、BE ノードはデータを保存しますか?​

分離型アーキテクチャの BE ノードはステートレスで、データ自体を永続的には保存しません。ただし、オブジェクトストレージのランダム読み取り性能が比較的低いことや、ネットワーク転送によるオーバーヘッドが引き起こす遅延を抑えるため、BE ノードはローカル SSD にアクセス頻度の高いデータをキャッシュします。このキャッシュには LRU 方式の退避ポリシーが適用されます。

Q: ストレージ・コンピュート分離型アーキテクチャでの FE の役割は何ですか?​

分離型アーキテクチャでも FE は維持され、主にユーザーリクエストの受け付け、SQL の解析と計画、SQL レイヤーのメタデータ管理(データベースとテーブルのスキーマ、ユーザー権限、クラスターの構成)を担当します。Tablet や Rowset のメタデータなど、データレイヤーのメタデータは、新たに追加された Meta Service が管理します。

Q: Doris はどのように高可用性を実現しますか?​

Doris は複数のレプリカとクォーラムプロトコルによって高可用性を実現します。各 Tablet にはデフォルトで3つのレプリカがあり、書き込みには過半数による確認が必要です。一部のノードに障害が発生した場合は、そのノードを自動的に分離し、正常なレプリカからレプリカを再作成します。FE は Paxos に似たコンセンサスプロトコルでメタデータの整合性を確保し、現在の Master に障害が発生すると、新しい Master を自動的に選出します。

Q: ストレージ・コンピュート分離型アーキテクチャでの Meta Service の役割は何ですか?​

Meta Service は、分離型アーキテクチャでデータレイヤーのメタデータ管理を専門に行うステートレスなサービスです。データ取り込みのトランザクション処理(バージョン管理と競合検出)、Tablet と Rowset のメタデータ管理、コンピュートクラスターのリソース割り当てとスケジューリングを担当します。ステートレスであるため、水平方向にスケーリングしてメタデータの処理能力を高められます。


まとめ​

Apache Doris は、異なるニーズに対応する二つのアーキテクチャを提供します。

アーキテクチャ用途
ストレージ・コンピュート統合型性能を優先し、運用リソースが限られ、規模を管理しやすい場合
ストレージ・コンピュート分離型クラウドネイティブ、柔軟なスケーリング、複数のチームによるデータ共有が必要な場合

どちらのアーキテクチャも、データの信頼性とサービスの安定性を確保するための包括的な高可用性の仕組みを備えています。