ストレージ/コンピューティングの分離
データプレーンとコントロールプレーンの分離の原則に従い、Milvusはスケーラビリティとディザスタリカバリの点で相互に独立した4つのレイヤーで構成されている。
アクセス層
ステートレスプロキシで構成されるアクセスレイヤーは、システムのフロントレイヤーであり、ユーザーへのエンドポイントである。クライアントのリクエストを検証し、返された結果を削減する:
- プロキシはそれ自体ステートレスである。Nginx、Kubernetes Ingress、NodePort、LVSなどのロードバランシングコンポーネントを使用して、統一されたサービスアドレスを提供する。
- Milvusは超並列処理(MPP)アーキテクチャを採用しているため、プロキシは最終結果をクライアントに返す前に中間結果を集約し、後処理を行う。
コーディネータ
CoordinatorはMilvusの頭脳の役割を果たします。クラスタトポロジーの維持、すべてのタスクタイプのスケジューリング、クラスタレベルの一貫性の確保を担当します。
以下はCoordinatorが処理するタスクの一部です:
- DDL/DCL/TSO 管理:コレクション、パーティション、インデックスの作成または削除などのデータ定義言語(DDL)およびデータ制御言語(DCL)リクエストの処理、タイムスタンプオラクル(TSO)の管理、タイムティッカーの発行。
- ストリーミング・サービス管理:ライト・アヘッド・ログ(WAL)をストリーミング・ノードにバインドし、ストリーミング・サービスのサービス・ディスカバリーを提供する。
- クエリー管理:クエリ・ノードのトポロジーと負荷分散を管理し、クエリ・ルーティングをガイドするサービング・クエリ・ビューを提供・管理します。
- 履歴データ管理:コンパクションやインデックス構築などのオフラインタスクをデータノードに分散し、セグメントとデータビューのトポロジーを管理します。
ワーカーノード
手足。ワーカーノードはコーディネーターの指示に従うダムエグゼキューターです。ワーカーノードはストレージと計算を分離しているためステートレスであり、Kubernetesにデプロイすることでシステムのスケールアウトやディザスタリカバリを容易にすることができる。ワーカーノードには3つのタイプがある:
ストリーミングノード
Streaming Nodeは、シャードレベルの「ミニ頭脳」として機能し、基礎となるWAL Storageに基づいてシャードレベルの一貫性保証と障害回復を提供する。一方、ストリーミング・ノードは、データ・クエリの増大とクエリ・プランの生成も担当する。さらに、成長データの密封(履歴)データへの変換も行う。
クエリーノード
クエリーノードはオブジェクトストレージからヒストリカルデータをロードし、ヒストリカルデータクエリーを提供します。
データノード
データノードは、コンパクションやインデックス構築など、履歴データのオフライン処理を担当します。
ストレージ
ストレージはシステムの骨格であり、データの永続性を担う。メタ・ストレージ、ログ・ブローカー、オブジェクト・ストレージで構成される。
メタ・ストレージ
メタ・ストレージは、コレクション・スキーマやメッセージ消費チェックポイントなどのメタデータのスナップショットを格納する。メタデータの保存には、極めて高い可用性、強力な一貫性、トランザクションサポートが要求されるため、Milvusはメタ・ストレージにetcdを選択した。Milvusはサービスの登録とヘルスチェックにもetcdを使用している。
オブジェクトストレージ
オブジェクトストレージには、ログのスナップショットファイル、スカラーデータおよびベクトルデータのインデックスファイル、クエリの中間結果が格納される。MilvusはオブジェクトストレージとしてMinIOを使用しており、AWS S3やAzure Blobといった世界で最も利用されているコスト効率の高いストレージサービスに容易に導入することができる。しかし、オブジェクトストレージはアクセスレイテンシーが高く、クエリー数によって課金される。パフォーマンスを向上させ、コストを下げるために、milvusはメモリまたはSSDベースのキャッシュプール上にコールド・ホット・データ分離を実装する予定である。
WALストレージ
WAL(Write-Ahead Log)ストレージは、分散システムにおけるデータの耐久性と一貫性の基盤である。変更がコミットされる前に、まずログに記録され、障害が発生した場合でも、中断したところから正確にリカバリできることを保証する。
一般的なWALの実装には、Kafka、Pulsar、Woodpeckerなどがある。従来のディスクベースのソリューションとは異なり、Woodpeckerはオブジェクトストレージに直接書き込むクラウドネイティブなゼロディスク設計を採用しています。このアプローチは、お客様のニーズに合わせて容易に拡張でき、ローカルディスクを管理するオーバーヘッドを取り除くことで運用を簡素化します。
WALレイヤーは、すべての書き込み操作を事前にログに記録することで、分散環境がどんなに複雑になっても、信頼性の高いシステム全体のリカバリーと一貫性のメカニズムを保証します。
次のページ
- Milvusアーキテクチャの詳細については、メインコンポーネントをお読みください。