パフォーマンス瞬間単純なアルゴリズムは、分散システムでは10倍以上にプルアップされています!

I.概要

 

クライアントの同時書き込みデータの多くは、どのようにパフォーマンスを最適化するときに、この記事では、我々はHDFS分散ファイルシステムに話しますか?

 

 

第二に、背景の導入

 

 

複数のクライアントが同時に並行するHadoopのHDFS上のファイルを書き込む場合はまず、少し背景を紹介し、このことは、それをになることができますか?

 

HDFS上のファイルは、同時書き込みを許可されていないため、明らかに容認できない、ああ、このようなものを同時実行など、いくつかのデータを追加。

 

HDFSは、いわゆる、メカニズムがあり、ファイルの契約メカニズム

 

それはデータを書き込むことができます前に、それは、同時に1つのクライアントだけがファイルの上、契約名前ノードを取得しています。

 

別のクライアントが文書契約を取得しようとする場合は、この時点で、あなたはあまりを取得し、だけ待つことができます。

 

このメカニズムを通じて、あなたは書面で唯一のクライアントと同じ時間を保証することができます。

 

ファイルに契約を取得した後、書き込み処理中にファイルは、クライアントがする必要がある、スレッドを開き、名前ノードを伝える、名前ノードのファイルを更新するために、要求の送信を停止します:

 

名前ノードブラザー、私はまだああ論文を書いて、あなたは契約は大丈夫残ってくれましたか?

 

内部名前ノードは、専用の持っている各契約更新時間を監視する責任バックグラウンドスレッドを、。

 

長い時間が契約を更新しない場合は、他のクライアントを書くためになるように、この契約のうち、この時は自動的に、期限切れになります。

 

あなたのマップ、全体のプロセスのための直感的な感じを与えるために、古いルール、と述べました。

 

 

  

第三に、問題のハイライト

 

 

私たちは、Hadoopクラスタの大規模な展開を持っている場合はわかりましたので、今の質問は、クライアントが何千人もできるだけ多く存在してもよいれます。

 

この時点で、内部文書の名前ノード契約メンテナンスのリストは非常に非常に大きく、そして、彼らは頻繁に契約のすべてにチェックする必要があり、随時契約のバックグラウンドスレッドを監視するには、有効期限が切れています。

 

この契約監視機構は明らかにHadoopクラスタの大規模な展開に適していないように、例えば、数秒ごとに多数の契約を横断するために、それは必然的に、パフォーマンスが低下します。



第四に、最適化プログラム

 

 

だから、ファイルの契約、それをどのように監視するアルゴリズムを最適化するには?

 

のは、彼のロジックを達成するためのステップバイステップを見てみましょう。まず、下図この手を見てみましょう:

 

  

実際には、謎は、非常に単純であるクライアントはあなたが最後の時間にこの契約の更新を設定し、更新する要求を送信した後、一度に一つ。

 

その後、に基づいて、TreeSetののたび最古の契約更新時にソートするために、最近の契約更新時に係るデータ構造は、フロントに来て、この種の契約データ構造は非常に重要です。

 

TreeSetのは、彼が達成根底にあるのTreeMapに基づいて順序付けデータ構造です。

 

照合の私たち自身の定義に従ってカスタムあなたは赤黒木に時間の要素を挿入するたびにソートする一方で根本のTreeMapを達成するために、我々は、要素のない重複がないことを確認することができます。

 

そこでここでは、照合:という最近の契約更新時に応じてソートします。

 

実際には、この最適化はとてもシンプルなので、メンテナンスは、データ構造の一種であること。

 

私たちは今、Hadoopのソースコードの実装では、契約のモニタリングを見て

 

  

あなたは契約の有効期限が切れているかどうかを確認することができ、もちろん効率が非常に低いの下にある横断するように、それぞれの時間は、あなたは、契約の数千人を横断していません。

 

私達はちょうど契約を更新するために、その最後の時間は、期限が切れていない場合でも最古のは、その後、ああをチェックし続けていない、最も古いTreeSetのからその契約を更新する時間を得ることができます!これは、より最近の契約更新時間が期限切れになりませんことを示唆しています!

 

たとえば:最古その契約を更新するための時間は、最新の更新時間は10分前ですが、我々は契約が限界に期限切れ判断期限が切れる契約を更新しないように15分以上です。

 

今回は、契約の更新の期限が切れていなくても10分前に、それらの8分前、5分の契約の更新前に、確かにああを期限切れになりません!

 

パフォーマンスを向上するには、このメカニズムの最適化は非常に便利です、通常、期限切れの契約または確かに少数派では、そのたびに単に期限が切れているかどうかを確認するために、すべての契約を通過しなかったので、。

 

我々は唯一の契約が満了した場合、その上でそれらのいくつかの契約の最も古いを更新する時間を確認し、契約書を削除し、同様の契約の二番目に古いチェックする必要があります。などなど。

 

これによりTreeSetのソート+優先チェック古い契約の仕組みの中で最も大規模なクラスタの下で契約の監視のための効果的なメカニズム、パフォーマンス、少なくとも10倍、このアイデアは、私たちの研究と参照の非常に価値があります。

 

Hadoopのは似ていると私たちに拡張少しを付け、春クラウドマイクロサービスアーキテクチャでは、実際には登録センターなどユーレカは、契約をチェックする仕組みを持っています。

 

しかし、ユーレカに同様のメカニズムを実現するために最適化されたいかなる更新もありませんが、暴力の各ラウンドは、すべてのサービスインスタンスの更新を通過する時間を持っているでしょう。

 

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

 

数千台のマシンの大規模システムの何百もの展開、何千もの更新情報サービスインスタンスの何百もあるが、数秒ごとに更新され、ユーレカのメモリに常駐し、情報は、サービスインスタンスの数十万人を横断しなければなりませんそれは?

おすすめ

転載: www.cnblogs.com/jackyu888/p/11512322.html