分散ストレージシステムのデータ分散アルゴリズムを簡単に見てみましょう。

分散ストレージシステムのデータ分散アルゴリズムを簡単に見てみましょう。

序文

分散ストレージ システムが直面する主な問題は、大量のデータを異なるストレージ ノードに分散する方法です。上位層インターフェースが KV ストレージ、オブジェクト ストレージ、ブロック ストレージ、または列ストレージのいずれであっても、問題は概ね一貫しています。この記事では、分散ストレージ システムでデータ分散の目標とオプションのソリューションを達成する方法を紹介し、それらの関係をまとめ、比較検討します。

[[283891]]

文章

1. 指標

ここでは、ターゲット データはキーによって識別されるデータ ブロックまたはオブジェクトであると想定します。複数のストレージ ノードを含むクラスターでは、データ分散アルゴリズムは、指定されたキーごとに 1 つ以上の対応するストレージ ノードを指定する必要があります。データ分散アルゴリズムには、次の 2 つの基本的な目標があります。

  • 均一性: 異なるストレージ ノードの負荷は均等に分散される必要があります。
  • 一貫性: データ分散アルゴリズムを通じてキーによって取得された分散結果は、ストレージ ノードが変更された場合でも、基本的に毎回安定したままである必要があります。

これら 2 つの目標はある程度矛盾していることがわかります。ストレージ ノードが追加または削除される場合、安定性を維持するためにデータの移動と再配布を最小限に抑える必要がありますが、これは必然的に負荷の不均衡につながります。同様に、極端な均一性の追求も、より多くのデータ移行につながります。

したがって、私たちは、適切な均一性と安定性を実現するために、これら 2 つの極端な点の間の点を見つけたいと考えています。上記の 2 つの基本目標に加えて、データ分散アルゴリズムの長所と短所を判断するために、プロジェクトでは次の側面を考慮する必要があります。

  • パフォーマンスのスケーラビリティ: これは主に、ストレージ ノードの規模に対するアルゴリズムの時間的複雑さを考慮します。システム全体のスケーラビリティを確保するため、データ分散アルゴリズムでは、クラスター サイズの増加後に実行時間が大幅に増加しないようにする必要があります。
  • ノードの異質性を考慮する: 実際のプロジェクトでは、異なるストレージ ノード間でパフォーマンスや容量に大きな差が生じる可能性があります。優れたデータ分散アルゴリズムは、この異質性に対処し、重み付けされたデータの均一性を提供できる必要があります。
  • 障害ドメインを分離する: データの可用性を高めるには、データ分散アルゴリズムで各キーのストレージ ノードのセットを見つける必要があります。これらのノードは、データのミラー コピーや、消去コードに似たコピー方法を提供します。データ分散アルゴリズムは、異なるコンピュータ ルーム、異なるラック、異なるスイッチ、異なるマシンなど、これらのレプリカの障害ドメインを分離するように努める必要があります。

(II)進化

アルゴリズムの評価指標を確認した後、いくつかの可能なソリューションの進化を紹介し、その長所と短所を分析します。ここではキー値が十分に分散されていると仮定します。

1. ハッシュ

シンプルで直感的なアイデアは、ハッシュを使用して直接計算し、キーをハッシュしてからノード数の係数を取得することです。キーが十分に分散されている場合は均一性が達成されますが、ノードが参加または退出すると、元のノードすべてが影響を受けることがわかります。安定性と呼べるものはありません。

2. 一貫性のあるハッシュ


一貫性のあるハッシュ法は、安定性の問題を非常にうまく解決できます。すべてのストレージ ノードは、最後に接続したハッシュ リング上に配置できます。ハッシュを計算した後、各キーは時計回りで最初に遭遇したストレージ ノードを検索して保存します。ノードが参加または離脱すると、ハッシュ リング上でそのノードに時計回りに隣接する後続のノードにのみ影響します。しかし、これでは均一性の問題が生じます。ストレージノードを等間隔に配置できたとしても、ストレージノードの数が変わるとデータの不均一性が生じてしまいます。しかし、このような不均一性は、複数存在する可能性があり、実際のエンジニアリングでは許容されません。

3. 負荷制限付き一貫性ハッシュ

一貫性ハッシュには、ノードの変更が不均一になるという問題があります。 2017 年に、Google はこの不均一性の程度を制御するために Consistent Hashing with Bounded Loads を提案しました。簡単に言うと、このアルゴリズムはハッシュ リング上の各ノードに平均負荷の 1 + e 倍の負荷制限を与え、この e はカスタマイズ可能です。キーがハッシュリング上で時計回りに適切なノードを見つけると、このノードの負荷が上限に達したかどうかを判断します。上限に達した場合は、割り当てのために次のノードを探し続ける必要があります。


上図のように、各バケツの現在の上限が 2 であると仮定して、赤いボールを順番に訪れます。6 番の赤いボールが到着すると、時計回りで最初に遭遇した B(3, 4) と C(1, 5) が上限に達したことがわかり、最終的にバケツ A に配置されます。

このアルゴリズムの最も魅力的な点は、ノードの変更があった場合に、移行する必要があるデータの量が 1/e^2 に関連し、ノードの数やデータの量とは関係がないことです。

つまり、クラスターのサイズが大きくなっても、データ移行の量は大幅に増加しません。さらに、ユーザーは、時間と空間を交換するアルゴリズムである e の値を調整することで、均一性と安定性のトレードオフを制御できます。一般に、コンシステント ハッシュ法も負荷制限付きコンシステント ハッシュ法も、ノードの異質性の問題を解決することはできません。

4. 仮想ノードによる一貫性のあるハッシュ

不均一な負荷と異質性の問題を解決するために、一貫性のあるハッシュに基づいて仮想ノードを導入することができます。つまり、ハッシュ リング上の各ノードは実際のストレージ ノードではなく、仮想ノードです。実際のストレージ ノードは、その異なる重みに応じて 1 つ以上の仮想ノードに対応し、対応する仮想ノードに含まれるすべてのキーはストレージ ノードの責任となります。

次の図に示すように、ストレージ ノード A は (1,3]、(4,8]、(10、14] を担当し、ストレージ ノード B は (14,1]、(8,10] を担当します。


このアルゴリズムの問​​題点は、実際のストレージ ノードの追加または終了が複数の仮想ノードの再割り当てに影響し、その結果、多くのノードがデータ移行に参加することになる点です。

さらに、実際には、仮想ノードが新しい実際のノードに再割り当てされる場合、この部分のデータを走査して新しいノードに送信する必要があります。仮想ノードを分割して割り当てるには、より適切な方法、つまりシャーディングが必要です。

5. シャーディング

シャーディングはハッシュ リングを同じサイズのシャードに分割し、これらのシャードを異なるノードに割り当てます。

これは、前述の仮想ノードとは根本的に異なることに注意してください。シャードの分割と割り当ては分離されています。

ノードが終了すると、そのノードが管理するシャードを時計回りに次のノードにマージする必要はなく、シャード全体を任意のノードにまとめてより柔軟に引き渡すことができます。実際には、シャードはデータの移行とバックアップの最小単位としてよく使用されます。


そして、まさに上記の分離のせいで、元のキーとノードのマッピングは 2 つのレイヤーに分割されます。シャードをストレージ ノードにマッピングするには、新しいメカニズムが必要です。シャードの数はキー空間に対して少なく、その数は固定されているため、最初により正確に設定することができ、ノードの生存に基づいてシャードのマッピング関係を変更する中央ディレクトリ サービスを導入することができます。同時に、このマッピング情報はすべてのストレージ ノードとクライアントに通知されます。


上図は、分散 KV ストレージ Zeppelin におけるシャーディング方式を示しています。キー スペースはシャードにハッシュされ、シャードとそのレプリカはレイヤーを介して最終ストレージ ノード Node Server にマッピングされます。

6. CRUSHアルゴリズム

CRUSH アルゴリズムは、本質的には、次の側面を最適化しようとするシャードベースのデータ分散方法です。

  • シャード マッピング情報量: 中央ディレクトリ サービスとストレージ ノードおよびクライアントの間で大量のシャード マッピング情報を交換しないようにします。代わりに、ストレージ ノードまたはクライアントは、小規模で安定したクラスター ノード トポロジと特定のルールに基づいて、シャード マッピングを独自に計算します。
  • 完全な障害ドメイン分割: 階層的な障害ドメイン制御をサポートし、構成に応じて同じシャードの異なるコピーを異なるレベルの障害ドメインに分割します。

クライアントまたはストレージ ノードは、キー、ストレージ ノードのトポロジ、および割り当てアルゴリズムを使用して、シャードの場所を個別に計算し、対応するシャードとレプリカを担当するストレージの場所のセットを取得します。

図は位置決めプロセスを示しており、最終的に 1 行下の 3 つのキャビネット (cab21、cab23、cab24) の下の 3 つのストレージ ノードが選択されます。


ノードが変更されると、ノード トポロジの変更により、少量のシャード データの移行に影響が出ます。次の図は、新しいノードの追加によって発生するデータ移行を示しています。適切な割り当てアルゴリズムにより、適切な負荷分散と安定性を実現できます。CRUSH は、Uniform、List、Tree、および Straw の 4 つの割り当てアルゴリズムを提供します。

(III)応用事例

最も一般的な分散ストレージ システムでは、シャーディングに似たデータ分散および配置方法が使用されます。

  • Cassandra/Dynamo: シャーディングとゴシップ プロトコルを使用してピア ノード間の通信を行います。
  • Redis クラスター: キー空間をスロットに分割し、通信には Gossip プロトコルも使用します。
  • Zeppelin: データをパーティションに分割し、Meta クラスターを通じて中央ディレクトリ サービスを提供します。
  • Bigtable: データをタブレットに分割します。これは可変シャードに似ています。Tablet Server はシャードを分割することができ、最終的なシャード情報は Chubby に記録されます。
  • Ceph: CRUSH メソッドを使用して、中央クラスター モニターがクラスター トポロジの変更を提供および維持します。

<<:  検査業界は大きな変革期を迎えており、人工知能が次世代の検査をリードしている。

>>:  兵器化されたロボットはやってくるのか?米警察、ボストン・ダイナミクスのロボット犬をパトロールに活用

ブログ    
ブログ    

推薦する

人工知能がホテル業界にもたらす変化

人工知能はかつてはSFの世界のものと考えられていましたが、今ではどこにでもあります。私たちが行う、ま...

DeepMind の新しい研究: ReST は大規模なモデルを人間の好みに合わせて調整し、オンライン RLHF よりも効果的です

過去数か月間、私たちは大規模言語モデル (LLM) が高品質のテキストを生成し、幅広い言語タスクを解...

...

構造化データのためのテキスト生成技術の研究

1. テキスト生成入門まず、現段階で人気のテキスト生成について紹介します。 1.人工知能の発展段階人...

ディープラーニングを使用してフロントエンドデザインモデルをコードに自動的に変換する方法は?

[[223504]]現在、フロントエンド開発の自動化に対する最大の障壁はコンピューティング能力です...

機械学習とディープラーニングの5つの主な違い

前回のシリーズの記事「機械学習とディープラーニングの違いは何でしょうか?」に続き、簡単に説明した後、...

基数ソートのヒント 1 つ、ソート方法 2 つ、ソートアルゴリズム 3 つ

[[421174]]基数ソートコンセプト基数ソートは、整数をビットごとにソートする非比較整数ソート ...

ディープラーニングにおける正規化の概要(Python コード付き)

編集者注: 日々の仕事や研究において、データ サイエンティストが遭遇する最も一般的な問題の 1 つは...

国内外のオープンソースモデルを競うLlama-2の初の総合評価

2023年7月を迎え、大規模言語モデル(LLM)の開発は新たな段階に入り、オープンソースが話題になっ...

たった1ミリ低くなれば時間が遅くなります!科学者が初めてミリメートルスケールで一般相対性理論を検証

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

スタンフォード大学の教授が、専門家以外の人向けにAIの核となる概念を1ページで定義

スタンフォード大学のクリストファー・マニング教授は、AI 分野の中核となる概念を 1 ページを使って...

...

NLP: 車輪の再発明はしない

導入自然言語処理 (NLP) は困難な分野です。構造化されていないテキストから有用な結論を生成するこ...

市場を席巻するアメリカの5大テクノロジー企業はAI時代にさらに勢力を拡大するのでしょうか?

アメリカのデジタルテクノロジー大手は、流行病の打撃を受けた後、軌道に戻った。数日前、Alphabet...