1. 概要 この記事では、多数のクライアントが同時にデータを書き込む場合に、分散ファイルシステム HDFS のパフォーマンスを最適化する方法について説明します。 2. 背景の紹介 まず少し背景を紹介しましょう。複数のクライアントが Hadoop HDFS 上のファイルに同時に書き込みたい場合、これは可能ですか? これは明らかに受け入れられません。HDFS 上のファイルは、一部のデータを同時に追加するなど、同時に書き込むことができないためです。 そのため、HDFS にはファイル コントラクト メカニズムと呼ばれるメカニズムが存在します。 つまり、NameNode 上のファイルのコントラクトを同時に取得し、データを書き込むことができるのは 1 つのクライアントだけです。 このとき、他のクライアントがファイル契約を取得しようとしても取得できず、待機することしかできません。 このメカニズムにより、同時に 1 つのクライアントだけがファイルを書き込むことが保証されます。 ファイル コントラクトを取得した後、ファイルの書き込みプロセス中に、クライアントはスレッドを開始し、ファイル コントラクトを更新するために 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 のメモリに存在します。数十万のサービスインスタンスの更新情報を数秒ごとに走査する必要がありますか? 最後に、優れたオープンソース プロジェクトには多くの優れた設計アイデアが含まれていることを思い出していただきたいと思います。さまざまな優れたオープンソース プロジェクトのソース コードを読むことは、短期間で技術スキルとレベルを迅速かつ大幅に向上させる方法です。ぜひ試してみるといいでしょう。 |
<<: ガートナー、分散ファイルおよびオブジェクトストレージの 2019 年マジック クアドラントを発表
>>: コンテナ セキュリティの未来を変える 5 つの新しいトレンド!
2012年後半からSEO業界は衰退傾向にあります。ここでは括弧内にBaiduと書いた方が良いかもしれ...
クラウド コンピューティングは IT フレームワークの不可欠な部分になりました。平均して、企業のワー...
Cloudcone をご存知ない方は、以前私が書いた紹介文を読んでみてください。信頼できる会社ですよ...
皆さんご存知のとおり、Baidu Tieba の新バージョンは 3 月にリリースされました。Baid...
最近の Baidu のアップデートにより、多くの人が何らかの影響を受けたと思いますが、私が引き継いだ...
2020 年は、パブリック クラウド ベンダーの収益が増加し、パンデミックによってデジタル変革のペー...
Weituo ASO 最適化プラットフォームは最近完全に刷新され、新しいドメイン名と新しいブランドで...
理由: B2Bコンテンツの目標を明確にする自分の努力がどのような結果をもたらすかを理解することが重要...
感染症流行の影響が3年目に突入する中、中小企業の多くは生き残りをかけた戦いに直面している。結局、これ...
中国で最も広く使われているチャットツールとして、中国のほぼすべてのインターネットユーザーがQQを使用...
デジタル時代では、私たちのあらゆる動きや言葉が膨大な量のデータに変換されています。多くの人がこのよう...
ここでは、BuyVM のルクセンブルク KVM 仮想 VPS を特別価格で紹介します。理由はただ 1...
クラウド ネイティブ、DevOps、プラットフォーム エンジニアリングはいずれも非常に複雑な概念であ...
最近、国際的に権威のある組織であるForresterは、2022年の世界および中国のクラウドコンピュ...
1. マイクロソフトMSN中国は電子商取引への参入を計画しており、Bing検索はテストを終了するマイ...