建築
以下の図に示すように、DAOS スタックはクライアント/サーバー アーキテクチャ上のストレージ サービスの集合として構造化されています。
DAOS サービスの例としては、プール、コンテナ、オブジェクト、リビルドなどがあります。
DAOS サービスは、コントロール プレーンとデータ プレーン全体に分散され、dRPC 経由で内部通信します。ほとんどのサービスには、gRPC または CART 経由で同期できるクライアント コンポーネントとサーバー コンポーネントがあります。クロスサービス通信は API 呼び出しを通じて直接行われ、これらの関数はクロスサービスのクライアントまたはサーバー コンポーネントから呼び出すことができます。
各 DAOS サービスは自律的かつ分離されるように設計されていますが、一部のサービスは他のサービスよりも密接に結合されています。これは通常、再構築サービスの場合に当てはまります。再構築サービスは、DAOS サーバーの障害後にデータの冗長性を復元するために、プール、コンテナー、およびオブジェクトのサービスと緊密に対話する必要があります。
サービスベースのアーキテクチャは柔軟性とスケーラビリティを提供し、すべての DAOS サービス (通信、永続ストレージ アクセス、依存関係グラフの非同期タスク実行、アクセラレータのサポートなど) にアクセスできる豊富なソフトウェア エコシステムを提供する一連のインフラストラクチャ ライブラリと組み合わされます。 。)。
ソースコードの構造
各インフラストラクチャ ライブラリとサービスには、 src/
その下に。
サービスのクライアント コンポーネントとサーバー コンポーネントは、別個のファイルに保存されます。クライアント側コンポーネントである関数には dc_
(DAOS クライアント用) というプレフィックスが付けられ、サーバー側関数には ds_
(DAOS サーバー用) というプレフィックスが付けられます。クライアントとサーバーのコンポーネント間で使用されるプロトコルと RPC 形式は、通常、 rpc.h
という名前のヘッダー ファイルで定義されます。
コントロール プレーンのコンテキストで実行されるすべての Go コードは、 src/control
ディレクトリの下に存在します。管理サービスとセキュリティ サービスはコントロール プレーン (Go) とデータ プレーン © 全体に分散され、dRPC を介して内部通信します。
エンド ユーザー (つまり、I/O ミドルウェアまたはアプリケーション開発者) に公開される公式 DAOS API のヘッダー ファイルは、ディレクトリの下にあり src/include
、 daos_
プレフィックスを使用します。
各インフラストラクチャ ライブラリは API をエクスポートし、API ヘッダー ファイルは src/include/daos
ディレクトリの下に配置され、どのサービスでも使用できます。特定のサービスによってエクスポートされたクライアント側 API (プレフィックス付き) dc_
もディレクトリの下に保存され src/include/daos
、サーバー側インターフェイス (プレフィックス付き ) は ディレクトリの下にds_
保存されます 。src/include/daos_srv
インフラストラクチャライブラリ
GURT (Gurt の便利なルーチンとタイプの共通ライブラリ) および Common ( libdaos_common
) ライブラリは、DAOS サービスのロギング、デバッグ、および共通データ構造 (ハッシュ テーブル、Btree など) を提供します。
ローカル NVM ストレージは、 Versioning Object Store (VOS) および BLOB I/O (BIO) ライブラリによって管理されます。VOS は SCM に永続インデックスを実装しますが、BIO は割り当てポリシーに従ってアプリケーションのデータを NVMe SSD または SCM に保存します。Versioned Block Allocator (VEA) レイヤーは VOS に統合されており、NVMe SSD 上のブロック割り当ての管理を担当します。
DAOS オブジェクトは、パフォーマンス (シャーディング) と復元力 (レプリケーションまたはイレイジャー コーディング) のために複数のターゲットに分散されます。配置 ライブラリは、ターゲットとオブジェクト識別子のリストからオブジェクトのレイアウトを生成するために、さまざまなアルゴリズム (リングベースの配置、ジャンプ一貫性のあるハッシュなど) を実装します。
Replicated Service Framework ( RSVC ) ライブラリは、フォールト トレランスをサポートするためのいくつかの共通コードを提供します。
プール、コンテナ、および管理サービスは、Raft 上に複製されたキーと値のストアを実装する複製データベース (RDB)ライブラリ と組み合わせて使用されます 。
これらのインフラストラクチャ ライブラリの詳細については、次を参照してください。
- 共通ライブラリ
- バージョニング オブジェクト ストア (VOS)
- BLOB I/O (BIO)
- バージョン付きブロック アロケーター (VEA)
- アルゴリズムによるオブジェクトの配置
- レプリケートされたデータベース (RDB)
- 複製されたサービス フレームワーク (RSVC)
DAOSサービス
以下の図は、DAOS サービスの内部階層化と、上記のさまざまなライブラリとの相互作用を示しています。
垂直のボックスは DAOS サービスを表し、水平のボックスはインフラストラクチャ ライブラリを表します。
各サービスの内部構造の詳細については、以下を参照してください。
関連情報
GitHub: https://github.com/storagezhang
電子メール: [email protected]
DAOS: https://github.com/daos-stack/daos
この記事は https://github.com/daos-stack/daos/blob/master/src/README.mdから翻訳されたものです