Weaviateの内部構造 ― ノード/シャーディング/レプリケーション

1. ノード(Node)の役割と構成

  • プロセス単位のデータベースサーバ
    Weaviate クラスターは複数のノード(コンテナまたは VM 上の Weaviate プロセス)で構成されます。各ノードは データ平面(実データの保持・検索)と メタデータ平面(スキーマやクラスタ状態)の双方を担当します。メタデータは Raft により厳密に複製され、データは後述のリーダーレス方式で複製されます。weaviate.io

  • ノード間通信
    ノード検出・存活監視には Hashicorp Memberlist を使った ゴシップ・プロトコルを採用し、Kubernetes では StatefulSet+Headless Service で自動的に名前解決が行われます。weaviate.io

  • 1 ノード内のストレージ階層
    ノードが保持する シャード (Shard) は下記 3 コンポーネントで構成されます。

    1. オブジェクトストア ― LSM-Tree ベースの KV ストア

    2. インバーテッドインデックス ― 構造化検索・フィルタ用

    3. ベクトルインデックス ― HNSW など ANN 検索用(プラガブル)weaviate.ioweaviate.io

2. シャーディング(Sharding)

  • クラス単位で分割可能
    スキーマ上の 1 クラス ≒ 1 インデックス であり、その内部を任意個数のシャードに分割できます。シャードは自己完結型のストレージ単位で、ノード間に自動分散されます。weaviate.ioweaviate.io

  • スケールアウトの主目的

    • 最大データセット容量の拡大:HNSW グラフのメモリフットプリントを複数ノードに分散。

    • マルチテナンシー:各テナントを専用シャードに隔離。

    • 柔軟な負荷分散:大規模データでもインポート・クエリを並列化。weaviate.io

  • 実装メモ

    • シャーディング機能は v1.8.0 で正式追加。

    • シャードマッピングはオブジェクト挿入時にハッシュで決定し、クエリ時はブロードキャスト or ルーティングで統合。

3. レプリケーション(Replication)

  • 二層構造の複製モデル

    レイヤ 方式 一貫性 用途
    クラスタメタデータ Raft 強い スキーマ, テナント状態
    オブジェクト/ベクトルデータ リーダーレス (Dynamo 型) チューナブル (ONE/QUORUM/ALL 等) 検索・保存データ
  • レプリケーション・ファクタ (RF)
    RF > 1 を設定すると、同一シャードのレプリカが複数ノードに作成されます。これにより:

    1. 高可用性 (HA) ― ノード障害時もサービス継続

    2. リードスループット向上 ― 読み取り負荷の水平分散

    3. ローリングアップグレード ― 無停止でバージョン更新

    4. リージョン分散 ― マルチデータセンタ配置で待ち時間短縮 weaviate.io

  • 書き込み/読み取りフロー

    • 書き込み:クライアントは任意のノードへ送信 → ノードがすべてのレプリカに非同期ファンアウト → RF に応じて確認応答。

    • 読み取り:要求された整合性レベルに達するまで複数レプリカからデータを取得。

4. シャーディングとレプリケーションの組み合わせ

  • 例: 3 シャード × RF=2 × 6 ノードの場合

    • 各シャードは 2 レプリカを持ち、計 6 インスタンスが 6 ノードにバランスよく配置。

    • 失われたノードがあれば残存レプリカから自動リペア。

    • シャード増加でデータ容量を、RF 調整で可用性・読み取り性能を独立にチューニング可能。

5. フォルトトレランスと運用ポイント

  1. メタデータの強整合性:Raft がリーダ選出・ログ複製を行うため、スキーマ不整合は起こりにくい。

  2. データ層は可用性優先:CAP 定理上、Weaviate は A/P 寄りに設計。必要に応じて整合性レベルを引き上げて運用する。weaviate.io

  3. オートリバランス:ノード追加・削除時、シャード移動とレプリカ再配置が自動実行される。

  4. Kubernetes 連携:StatefulSet がノード ID を固定し、ディスクを再利用して素早く復旧可能。weaviate.io


これらの仕組みにより Weaviate は スケールアウト性能高可用性 を両立しつつ、検索性能を犠牲にしないアーキテクチャを実現しています。

ChatGPT4o 生成日:2025/06/20