シンプルなアルゴリズムで分散システムのパフォーマンスが瞬時に10倍以上向上

シンプルなアルゴリズムで分散システムのパフォーマンスが瞬時に10倍以上向上

1. 概要

この記事では、多数のクライアントが同時にデータを書き込む場合に、分散ファイルシステム HDFS のパフォーマンスを最適化する方法について説明します。

2. 背景の紹介

まず、少し背景を説明しましょう。複数のクライアントが Hadoop HDFS 上のファイルに同時に書き込みたい場合、これは可能でしょうか?

これは明らかに受け入れられません。HDFS 上のファイルは、一部のデータを同時に追加するなど、同時に書き込むことができないためです。

そのため、HDFS にはファイル コントラクト メカニズムと呼ばれるメカニズムが存在します。

つまり、NameNode 上のファイルのコントラクトを同時に取得し、データを書き込むことができるのは 1 つのクライアントだけです。

このとき、他のクライアントがファイル契約を取得しようとしても取得できず、待機することしかできません。

このメカニズムにより、同時に 1 つのクライアントだけがファイルを書き込むことが保証されます。

ファイル コントラクトを取得した後、ファイルの書き込みプロセス中に、クライアントはスレッドを開始し、ファイル コントラクトを更新するために NameNode に要求を継続的に送信して、NameNode に次のことを通知する必要があります。

  • NameNode、まだファイルを書き込んでいます。契約を維持していただけますか?

NameNode 内には、各契約の更新時間を監視する専用のバックグラウンド スレッドがあります。

契約が長期間更新されていない場合は、自動的に期限切れとなり、他のクライアントが契約できるようになります。

ここまで述べてきましたが、いつものように、プロセス全体を直感的に理解できるように写真をお見せします。

3. 問題の発生

さて、ここでの疑問は、大規模に導入された Hadoop クラスターがある場合、同時に何万ものクライアントが存在する可能性があるということです。

この時点で、NameNode によって維持されるファイル コントラクト リストは非常に大きくなり、コントラクトを監視するバックグラウンド スレッドは、すべてのコントラクトの有効期限が切れているかどうかを定期的に頻繁に確認する必要があります。

たとえば、数秒ごとに多数のコントラクトを走査すると、必然的にパフォーマンスが低下するため、このコントラクト監視メカニズムは、大規模に展開された Hadoop クラスターには明らかに適していません。

4. 最適化計画

では、ファイル契約監視アルゴリズムを最適化するにはどうすればよいでしょうか?

彼の実装ロジックを段階的に見てみましょう。まず、次の手描きの絵を見てみましょう。

実は、その秘密はとてもシンプルです。クライアントが更新リクエストを送信するたびに、契約の最新の更新時刻が設定されます。

そして、TreeSet データ構造に基づいて、最新の更新時間に従って契約がソートされ、更新時間が最も古い契約が常に先頭に配置されます。このソートされた契約データ構造は非常に重要です。

TreeSet はソート可能なデータ構造であり、下部の TreeMap に基づいて実装されています。

TreeMap の基底レイヤーは赤黒木に基づいており、要素の重複がないことが保証されます。同時に、要素を挿入するたびに、独自の並べ替えルールに従ってカスタマイズされた並べ替えを実行することもできます。

したがって、ここでの並べ替えルールは、契約の最新の更新時間で並べ替えることです。

実際、この最適化は非常に単純で、ソートされたデータ構造を維持するだけです。

それでは、Hadoop での契約監視のソース コード実装を見てみましょう。

契約の有効期限が切れているかどうかを確認するたびに何千もの契約を調べるのは非効率的であるため、避けたいものです。

TreeSet から最も古い更新時間を持つ契約を取得するだけです。最も古い最新の更新時間を持つ契約でさえ期限が切れていない場合は、チェックを続ける必要はありません。つまり、より新しい更新時間を持つ契約は決して期限切れにならないということです。

例えば、更新時刻が最も古い契約は10分前に最終更新されたが、15分以内に更新されない場合は契約が満了すると判断する。

現時点では、10分前に更新された契約も期限切れになっていませんので、8分前と5分前に更新された契約も絶対に期限切れになりません!

このメカニズムの最適化は、パフォーマンスの向上に非常に役立ちます。通常、期限切れの契約はまだ少数であるため、毎回すべての契約を調べて期限切れかどうかを確認する必要がないためです。

更新日時が最も古い契約のみを確認する必要があります。契約の有効期限が切れている場合は、その契約を削除し、2 番目に古い契約を確認します。等々。

この TreeSet ソート + 最も古い契約メカニズムの優先順位チェックにより、大規模クラスターにおける契約監視メカニズムのパフォーマンスを少なくとも 10 倍効果的に向上させることができます。このアイデアは、研究と参照に非常に価値があります。

簡単に説明しましょう。Spring Cloud マイクロサービス アーキテクチャでは、登録センターとしての Eureka にも、Hadoop に似た更新チェック メカニズムが実際に備わっています。

ただし、Eureka には同様の更新最適化メカニズムは実装されていません。代わりに、各ラウンドですべてのサービス インスタンスの更新時間が調べられます。

マイクロサービス システムの大規模な導入に直面している場合、状況は良くありません。

数十万台のマシンが配備された大規模システムでは、数十万のサービス インスタンスの更新情報が Eureka のメモリに存在します。数十万のサービス インスタンスの更新情報を数秒ごとに走査する必要があるのでしょうか?

最後に、優れたオープンソース プロジェクトには多くの優れた設計アイデアが含まれていることを思い出していただきたいと思います。さまざまな優れたオープンソースプロジェクトのソースコードを読むことは、短期間で技術力とレベルを迅速かつ大幅に向上させる方法です。ぜひ試してみてください。

<<:  顔を変える技術の悪用に対抗するため、Googleはディープフェイクと戦うための大規模なデータセットを公開

>>:  宝くじに当たるのは雷に打たれるより難しいですか?確率を向上させるためにアルゴリズムを使ってみる

ブログ    

推薦する

ついに誰かがユーザー分析の方法論を徹底的に説明しました

1. ユーザー操作とは何ですか?ユーザーオペレーションとは、ユーザーのライフサイクル全体を踏まえた管...

中国で自動運転元年となるのは何年でしょうか? 2021年かも

インテリジェント化は将来の自動車発展の基本的な方向であり、自動運転技術は将来の自動車発展の重要な最先...

Nature: 機械視覚による行動理解と脳神経の間には本質的なつながりがあるのでしょうか?上海交通大学のLu Cewu氏のチームはマッピングモデルを構築した

被験者が特定の行動をとったとき、その脳はそれに対応する安定した脳神経パターンのマッピングを生成するで...

データのクリーニングと前処理の完全ガイド

データの前処理は、機械学習モデルを構築する際の最初の (そしておそらく最も重要な) ステップであり、...

RWKV の紹介: リニア トランスフォーマーの台頭と代替案の検討

RWKV ポッドキャストからの私の考えの一部を要約すると次のようになります: https://www...

自然言語処理 (NLP) 開発で注目に値するオープン ソース ツールにはどのようなものがありますか?

インテリジェント音声アシスタントとチャットボットは、現在人工知能のホットスポットであり、画期的な進歩...

2019年のAI業界の再編:疑似AI企業は淘汰される

起業プロジェクトの数、資金調達額、資金調達のスピードなど、AIは近年間違いなく注目の産業です。しかし...

ついに! SM2 国家暗号アルゴリズムが Linux カーネル コミュニティに承認されました

背景Guomi は国家商用暗号化の略称です。アルゴリズム標準は国家暗号管理局によって策定され、多数の...

人間は形を見るが、AIは質感を見る:コンピュータービジョン分類の失敗についての議論

[[270985]]研究者たちは、ディープラーニングの視覚アルゴリズムが、主に形状ではなくテクスチャ...

...

大規模言語モデル評価における信頼性の低いデータに注意: Flan-T5 に基づくプロンプト選択のケーススタディ

翻訳者|朱 仙中レビュー | Chonglou導入信頼性の高いモデル評価はMLOP と LLMop ...

...

多くの場所でAI顔認識の使用が制限されており、監視は技術開発のペースに追いついています

最近、南京、江蘇省、天津などではAI顔認識技術の使用を禁止し始めている。 11月末、南京市のある男性...

...

...