daos の高性能分散ストレージについて語る

導入

  • 現在、ほとんどのアプリケーションの IO モデルでは、メタデータとアライメントされていないデータの断片化の割合が増加しますが、同時に、従来のストレージ ソフトウェアによって導入されたアライメント制約と大量の遅延により、この種の IO アプリケーションのパフォーマンスはますます低下します。大容量永続メモリ (SCM) と高速ハードウェア構造の組み合わせは、ストレージ仕様を再定義し、今日の IO 集中型アプリケーションを効率的にサポートする最良の機会を提供します。

  • SCM に基づいて、ストレージ スタック全体の設計を再検討する必要があり、これらの新しいハードウェアのパフォーマンスを解放するために、新しいソフトウェア スタックはバイト粒度のシェアード ナッシング インターフェイスを採用し、大規模な分散ストレージをサポートできます。 。これは、オブジェクトのアドレス空間へのグローバル アクセスを通じてパフォーマンスを確保することを前提とした分散ストレージ サービスをベースにしたまったくDAOS新しいIO アーキテクチャでありSCM、分散ストレージ サービスを提供します。NVMefabric一致性、可用性、弹性

従来の並列ファイル システムの制限事項

  • 従来の並列ファイル システムはブロック デバイス上に構築されており、IO の送信はカーネルのブロック インターフェイスを通じて行われ、IO スケジューラを通じてディスクの動作を最適化し、特性に適応するために書き込みのマージやその他の最適化手段を実行します。帯域幅を高めるために、大量のデータ ストリームをseekディスクworkloadドライブに送信します。3D-XPointしかし、従来のストレージよりも数桁低い低遅延を実現する新しいハードウェアが登場すると、メカニカル ディスク用に設計されたソフトウェア スタックは、これらの新しいストレージにとって大きなオーバーヘッドになるでしょう。

  • RDMAほとんどの並列ファイル システムは、クライアントからサーバーにpage cacheデータを直接転送しbuffer cache、サーバー上でブロック ストレージを永続化するなどの機能を提供します。ブロック デバイス IO およびネットワーク イベント用の統合ポーリング処理モデルが欠如しているため、IO 処理は中断マルチRPCスレッドの同時処理に大きく依存しているため、IO 処理中のコンテキスト切り替えではネットワークの低遅延を利用できません。従来の並列ファイル システムのソフトウェア スタックは引き続きストレージ デバイス上で使用cache/distribute lockでき、より高いパフォーマンスを実現できます。3D NAND/3D-XPoint

Daos ソフトウェア アーキテクチャ

  • Daos(Distribute Asynchronous Object Storage)これは、不揮発性メモリ (NVM) に基づくオープン ソースのカスタム オブジェクト ストレージであり、ストレージ インターフェイスとなどの機能daosを提供します。key-valuenon-bloking I/O数据的多版本快照

  • DaosNVMストレージ システムは、 や などのSCM(Storage Class Memory)次世代テクノロジーを最大限に活用しNVMe(NVM express)kernel bypassエンドツーエンドでユーザー モードで実行され、IO 操作中にシステム コールを必要としません。

写真

  • 上の図に示すように、Daosコアは 、 、 の 3 つの部分に分かれていますSCM和PMDKNVMe和SPDK最初の部分は、すべてのメタデータ、アプリケーションインデックス、および遅延に敏感な小さな をlibfabric格納するために使用されます起動時にシステム コールを呼び出して永続メモリを初期化します。たとえば、ファイル システム機能を有効にした後、永続メモリ ファイルを仮想メモリ アドレス空間にマッピングします。システムが起動して実行されると、ユーザー モードのメモリ命令を通じて永続メモリ デバイスにアクセスできます。永続メモリ デバイスは非常に高速ですが、容量が少なくコストが高いため、メタデータの保存に非常に適しています。分散ストレージ内のデータの場合、デバイスはテクノロジを通じて目標を達成するために使用され、IO 送信は非同期で送信されますユーザーモードキュー完了後これらのデータのインデックスが永続メモリに作成されます。はい、最後の部分です。ネットワーク アーキテクチャのサポートなど、主に高性能ネットワークを担当します。ユーザーモードで定義されたライブラリであると同時に、それを使用するアプリケーションに通信サービスをエクスポートし、データ送信やネットワークポーリングなどのメッセージベースの非同期機能を提供します。SCM和PMDKdaosSCMkeyIOdaosDAXdaosdaosNVMeSPDKkernel bypassSPDKSPDK IOlibfabricdaosOmni-Path/IBlibfabricfabricAPI

  • daos新しいハードウェアとネットワーク テクノロジ、ユーザー モードで実行されるkernel bypass分散ストレージに基づいて、現在メカニカル ディスクをサポートしている場合SCMNVMeサポートしていない場合があります。

  • daosC/Sに基づくモデルであり、アプリケーションに統合でき、アプリケーションと同じアドレス空間で実行されますdaos clientこれはマルチフォールトトレラントなプロセスであり、すべてのメタデータと小規模な IO に直接アクセスして保存し、大きな IO はそのプロセスに保存されます。同時 IO リクエストの処理に依存せず、ユーザーレベルのスレッドを使用してそれらを処理します。linrarydaos serverdaemonSCMNVMeSCMNVMedaos serverpthreadUser Level Thead(ULT)

写真

Daos データストレージ戦略

  • daos保存されたエクスポート オブジェクトの形式key0-value、またはkey-arrayユーザー アクセス用の API の形式で提供されます。スケーラビリティの問題とメタデータ (オブジェクト データの場所を記述するために使用されるオブジェクトのレイアウトなど) を維持するオーバーヘッドを回避するために、オブジェクトの一意性を識別するために のdaosオブジェクトが使用され、コードも使用されます。データの配布とデータ、保護ポリシー (コピーか EC か) およびその他の情報を説明します。ストレージプールの構成に応じて乱数生成オブジェクトのレイアウトが生成される点はcephのアルゴリズムと同様の利点があります。128bit128bitdaoscrush

写真

  • daos serverメタデータ ストレージ用のメモリ バスへの直接接続SCMとデータ ストレージ用のメモリ バスNVMeへの直接接続PCIeメモリ load/store命令を使用してメモリ マップにアクセスしSCM、次にSPDK APIユーザー モード アクセスを使用しますNVMe 。SCMハードウェア障害が発生するNVMe、データまたはメタデータが失われますが、データ損失を確実にするために、データを保護し、データを復元するための方法がdaos提供されていますデータ保護機能が有効になっている場合、データは複数のデータ シャードおよびデータ検証シャードに複製またはチャンク化され、別のストレージ ノードに保存されます。ハードウェア障害またはノード障害が発生しても、縮退モードでアクセスできます。リカバリとは、他のコピーや検証データからリカバリすることです。replicationerasure codingdaos objectdaos object

写真

  • replication比較的高いデータ冗長性を提供し、書き込み操作用のプロトコルdaosを採用し、書き込みリクエストの受け入れを担当し、分散トランザクションを処理するためにリクエストを転送します従来のレプリカモデルとは異なります。rpc を に転送するだけです。すべてのレプリカ ノード要求は、メソッドを通じてピア クライアントから直接取得されます。2 フェーズ コミット プロトコルのバリアントが使用され、1 つのレプリカが変更を適用できない場合は、すべてのレプリカに更新するように通知されます。サーバーがコピー書き込みの処理に失敗した場合、このノードをトランザクションから除外し、アルゴリズムを通じて別の通常のノードを代替ノードとして選択し、以前のトランザクションのステータスをこの通常のノードに割り当てます。この時点で障害が発生したノードが正常に戻った場合、ローカル トランザクション ステータスを無視して、データ回復プロトコルに従ってトランザクション ステータスをキャプチャします。ヘルスチェック中にノードが失敗すると、マルチノードベースのプロトコルサービスに報告され、サーバーの raft サービスはオブジェクト ID をスキャンし、各オブジェクトのレイアウトを計算し、影響を受けるすべてのオブジェクトを見つけます。アルゴリズムのオブジェクト ID がアルゴリズムの緊急サーバーに送信され、緊急ノードは他のレプリカをプルして影響を受けたデータを再構築します。primary-slaveprimary replicaprimary replicaslave replicaprimary-slaveprimary replicaslave serverRDMAbufferdaosdaosdaosdaos-serverraft

  • Erasure Codingより多くのスペースを節約し、スペースの使用率を向上させるデータ保護戦略を提供します。daos clientこれはプロセスに統合された軽量ライブラリであるため、データの EC エンコードはクライアント上で実行され、クライアント プロセスが配置されているノードはより多くの CPU リソースを消費します。daos clientデータのチェック コードを計算し、データ フラグメントとデータ チェック ブロックを作成しRDMA DestriptorRPCチェック グループのリーダー サーバーにリクエストを送信して書き込み操作を調整します。この書き込み操作はコピー書き込み操作と似ています。 ec 書き込み操作はクライアントから直接実行されます。クライアントbufferでデータを取得するために、 daos ec2 フェーズ コミット プロトコルも採用され、さまざまなノードでのデータのアトミック書き込みが保証されます。書き込まれたデータが stripe_size と等しくない場合、ほとんどのストレージ システムは、read/encode/write処理を通じてデータの断片化とデータ検証の一貫性を確保します。このオペレーション コードは非常に大きく (増幅の問題が原因で)、読み取りと書き込みを保証するには分散ロックが必要です。一貫性。しかしdaos、このオーバーヘッドを回避するために、書き込まれたデータの一部をパリティサーバにコピーする方式を採用しておりMulti-version data module、パリティサーバはコピーデータからパリティデータを簡単に計算することができます。読み取りプロセス中にノードに障害が発生した場合、daos縮退読み取りが行われ、daos clientまずすべてのデータのストライプ情報を取得して失われたデータを再構築し、2 フェーズ コミット プロトコルを採用して通常のサーバー ノードにトランザクションを渡します。その後、失われたデータを処理し、データを再構築します。

  • daos障害には 3 つの種類があり、1 つはdaosゴシップのようなプロトコル SWIM によって処理されるサービス クラッシュ、2 つ目はポーリング装置の状態によって判断される障害、3 つ目は検出され、記録媒体の障害となりNVMeます。保存し、チェックサムを確認して確認します。サーバーは書き込みリクエストを受信すると、チェックサムを検証するか、チェックサムとデータを保存します。検証機能は、パフォーマンス要件に応じてサーバー側で有効または無効にすることができます。アプリケーションが再びデータの読み取りに戻ったとき、読み取られたデータが以前に書き込まれたデータと一致している場合、サーバーはデータとチェック コードを直接返します。そうでない場合、daos サーバーは読み取り操作に含まれるデータ ブロックのチェック コードを検証します。を実行し、読み取ったデータチェックコードの値を計算し、データとチェックコードをクライアントに返します。daos クライアントが読み取りプロセス中に検証コード エラーを検出した場合、劣化読み取りが有効になるか、クライアント上のデータの読み取りまたは再構築のために他のレプリカに切り替えられます (ec モード)。クライアントはまた、検証コードのエラーをサーバーに報告します。サーバーは、検出と検証を通じてすべての検証コード エラーを収集し、合計を実行してクライアントに報告します。daosSPDKdaosvefifyscrubbing

Daos データモデル

写真

写真

  • daosデータ モデルには 2 つの異なるオブジェクト形式が含まれており、1 つはarray objectsアプリケーションが多次元配列形式を提示できるようにするもので、もう 1 つはkey/valueオブジェクト データを保存するもので、このメソッドは kv インターフェイスとmulti-levelkv インターフェイスを提供します。どちらの形式でも、データ オブジェクトはバージョン管理されているため、アプリケーションはデータの以前のバージョンに簡単にロールバックできます。各オブジェクトはドメイン ( daos container) に属し、各コンテナにはプライベート オブジェクト アドレス空間があり、トランザクション処理もポーリング内の他のコンテナから独立しています。

写真

  • daosposix セマンティクスへのアクセスをサポートします。Posix はdaosストレージ モデルの機能ではなく、daosバックエンド API 上に構築されたライブラリです。posix ファイル システムの名前空間が含まれています。posix daos containerAPI は、 fusedaos エンジン API (libdaos) を使用して駆動されます) および daos ファイル システム API (libdfs) を使用してデータにアクセスします。

おすすめ

転載: blog.csdn.net/iamonlyme/article/details/132306008