使用して仮想環境を計算オフィスグリッド-パート2

スティーブンロイドワトキン 、金曜日2009年12月4日23:23

はじめに

私は一日ごとのデータ機能のレコードの処理数百万のジョブをバッチ多くのランたちは、会社と私はそれぞれの周りしたマシンに座って、すべてのことを考え、最近数時間何もしない毎日。 システム我々の処理の能力をか強化するため、これらのマシンを使用することが良い場合は私たちがすることは、それは? 記事セットの、この、私はオフィスの採用の利点の電位を見ているつもりグリッド環境を使用して仮想化された。

第1部私はグリッドをオフィス作成した概要を望んで、もしあなたが、なぜシステムが理由の可能性についていくつかの技術だけでなく、使用して私がすること。

ジョブ制御

あなたが行くなら、それらを管理するためのいくつかの方法が必要になるだろうし、ジョブを実行されている。 あなたの仕事の制御システムは、(あなたの仕事のサーバー上で)本当によくてもオフィスのグリッドを実行する前に考える必要があります。 そこでまず、どのようなジョブ制御システムのタスクは次のとおりです:

  • 労働者からの要求に応じて、ジョブの手
  • 労働者は何のジョブの種類を実行するに教える
  • トラックジョブ
  • ジョブは一度実行のみされていることを確認してください
  • または、労働者に仕事のデータを提供し、少なくともここでそれを得るためにそれらを教えて

システムはまた、企業がグリッドソリューションの価値を見るようにジョブのいくつかの種類を実行するために延長することができる、拡張できるようになりました単一のケースでの動作のソリューションを必要とします。 たとえば、ジョブは優先度を得ることが、複数のジョブの種類は最終的にも、それは一般的な労働から離れていません(ただし、ジョブの種類ごとに最適化されているいくつかの異なる労働者のマシンを実行することができます(つまり、いくつかのコードベース)が存在する可能性がありますのアイデア)。 システム開発は、短期的なビジョンは、長期的フラストレーションと増加、開発時間をもたらすことができる場合は、常に未来を考えてみてください。

Job Serverを

私たちは、これは固定リソースロケータを持ってあなたのグリッドで唯一のシステムである必要がありますから、IPアドレス、ホスト名、URL(内部DNSを使用して)、などこれは、されていることが、私たちの仕事を制御するための場所が必要としている労働者はここで仕事を探すために知っておく必要があります、労働者は、ジョブ管理システム(ないジョブ制御システムの労働者を見つけること)を見つける必要があります。

ジョブサーバー自体は本当に複雑なタスクを(基本的なシステムとにかくに)持っていない場合、それは、仕事から手をジョブのリストを格納するために結果が表示され、その後後で取得するためにそれらを格納する必要があります。 これらの部品は('など、ジョブの手')非常に基本的なことができる定義されている方法。 我々は、追加、編集、削除、ジョブを一時停止の管理インターフェイスを含むようにシステムを拡張することができますその後、これがこの演習を超えています。

理由はあなたの仕事のサーバーは、メイン処理サーバー内で実行中の仮想マシンであることができなかったし、全くありませんが、それからあまりにも多くのリソースを消費しない提供。 それは潜在的にあなたに数週間の処理時間相当のカップル(だけでは、メイン処理サーバと比較して)原価計算すると、処理の週末を失うとしている金曜の夜にダウンした場合には、ジョブサーバーは、しかし、必要と高可用性をしない。 あなたは、高可用性、負荷分散環境でのお仕事サーバーを置いて検討する必要があります。

基本的なセットアップ

私たちの仕事のサーバの基本的なセットアップ)は、HP PがしますySql メートル 、木の実である Li 構成サーバーリンプの私が私の呼び出しを私の(。 して、Thea労働者で実行されているコードは、実際にはジョブ制御システムデータベースとのとの相互作用によって実行することができますか仕事がうまくいく。 それ以降のサービスをWebできる作成我々は、自分自身を作品に出ハードジョブをいうよりも有する労働者が手、実際に今使用して続行されます私たちがKISSの原則を (愚かな保管、それをシンプルで、!)

だから、三作成することができますmySQLのジョブに対処するためのテーブルです。 これらは、`ジョブされる`、`jobRecords`と`jobResults`。

ジョブ表 ここに私が使用しているSQLのバディに偉大な小さな代替をphpMyAdminにだけ理由:参照してください他のために(CentOSのそのインストールが簡単に10大の選択肢をphpMyAdminにする

このテーブルには、5つの簡単なフィールドで構成されています

  • イド:ジョブを一意に識別する
  • 名前は:識別子他である可能性がありますクライアント参照番号のいずれか、または
  • ステータス:あなた 、例えばで知っている場所の仕事を行う必要があります
    • 0は:開始していません
    • 1:拾った
    • 2:完成品
  • started_by:仕事を始めた誰ですか? これは完全に必須ではありませんが、あると便利です。 私はあなたのネットワーク上のIPアドレスで労働者を追跡することをお勧めしたい
  • started_at:仕事をするかを開始労働者は? 我々は再び仕事をピックアップして、別の労働者が処理を開始する必要があります知っている時間のX時間内に完了していないジョブを追跡することにより。 労働者が処理を停止することが/いくつかの理由で、停電、クラッシュ、ネットワークの損失などのオフライン

この表は、ジョブの多くの労働者が(明らかにこれは傾向にある必要がある仕事をピックアップする方法を参照してくださいするには、カウンタをかかった時間を参照してくださいするには、終了時間の列を追跡する統計を可能にするためにいくつかの追加フィールドが拡張することができるかそれは簡単です。 1)は、ジョブの優先順位は、リストは行くことができるとします。 より複雑なジョブのシナリオでは、労働者が、(そのためにのみ適して労働者を使用する)にアクセスする必要がどのくらいのメモリ、あるいは労働者のタイプが必要となるかを指定することが可能になります。

きれいは、いくつかの例ジョブを追加:

例えばジョブ

次の表は、再び非常に理解することは簡単ですが、これらは私たちの仕事の記録がされます。 彼らは列で主な仕事のテーブルにリンクされている`jobs_id。 我々は4つの列を持っている非常に簡単な例を加えることができます、非常にあなたが労働者に供給するために必要なデータに依存してこの表の構成:

  • イド:レコードのID
  • 名:人の名前
  • アドレス:人のアドレス
  • jobs_id:ジョブIDには、このリンクされているレコードが

3番目と最後の表は、結果表で構成されて、それがあるとほとんど同じレコード表の一部である可能性がいくつかの列を追加する当社の記録テーブルとして、および構成する:

  • job_record_id:ジョブのテーブルへのリンクの結果を
  • 結果:結果データ

...とは、ジョブ制御するために必要なすべてを見ること! (非常に基本的なレベルではあるが)私の場合は、プロセスに自分のデータが位置していた別のテーブルに指摘したんだけど、これは同じように簡単に、シミュレーションコードを実行するためのパラメータファイルをされてことが、あなたはそれを名前を付けます。

ジョブを選択

前述したように、労働者は、我々が実際に必要なすべての処理を必要とし、情報を取得する仕事を見つけることです、今の私たちのために私たちの仕事の管理を行います。 どのように我々がこれを行うには希望ですか? さて私たちの仕事の選択基準を選択して、ジョブを探して、SQLで私は次のようでした:

  1. 完全としてではなく、我々の労働者からマークされていないと(最も簡単な方法は、IPアドレスになる識別子を持つ代替__ME__)それらをリセットするすべてのジョブしてください:
     のUPDATE`ジョブ`のSETは`status`= 0のWHEREは`status`= 1と`started_by`= __ME__; 
  2. ジョブを選択し、この労働者はそれに対処されていることを制御システムを教えて、私たちの仕事の選択基準を使用する:
     のUPDATE`ジョブ`のSETは`status`= 1、`started_by`= __ME__、`started_at`= NOW()ののWHEREは`status`= 0の場合、または
     (これは`status`= 1と`started_at`> DATE_SUB(NOW()の、区間X時間))ORDER BYは`ASCのの`id; 

    我々はすべてのジョブは、労働者のクラッシュや欠勤に行くのイベントで実行されていることを確認時のX量の結果が返されていないジョブを掴んで。

  3. 次に、自分の記録が続くのジョブの詳細をつかむ:
     します。SELECT * FROM`ジョブの`WHERE`started_by`= __ME__のLIMIT 1;
    します。SELECT * FROM`job_recordsはの`WHERE`= __JOBID__の`id; 

ジョブの完了時に私たちを挿入我々の結果の記録が完了し、ジョブをマークします。 ジョブが停止することができるように/あなたのスクリプトのいくつかの堅牢性のためにできるように、いつでも再開に注意してください。 これは、タスクがそのジョブのレコード数と賢明されるジョブ制御システムに保存される結果の数をチェックして、ジョブ制御システムを更新する途中で中断する可能性があります。

加えて、ことながら本当にすることができますこのジョブが方法を示していますが選択するSQL -クエリのフレームには、マネージから抽象化ベースのシステム、ファイル、サービスをWeb使用してジョブ制御をするようにかどうかを判断して切り替えるのXML 、またはその他のシステムの数は、それが上記のコードには影響しません。

ジョブの設定

次に考慮すべき側面は、ジョブのサイズおよび構成されます。 ジョブの設定と一緒に遊んで、私たちは、速度、プロセスの複製、および信頼性の間に優れたバランスを取ることができます。 カップルにOFAのシナリオしてください:

  1. ジョブが実行さとる1日に、各:これは)時間が意味する3分の2のための電力を10(覚えているジョブを処理する各日15労働者が必要%である。 これは明らかに賢明構成されていない場合、ジョブのサイズが大きすぎる方法です! それは(それが結果を加えて再処理時間が返されていないことをピックアップして時間)初期労働者が無断外出する必要があります処理の仕事を得るために時間を2倍以上かかるだろう。 理想的では、以上のようにジョブが刻々と過ぎている方法のアイドル期間が長い方の端の各々 、少なくともいずれかによって完全な仕事をクリアeasilyしたい二希望かかる日に行方不明に最初にすべきプロセスジョブがで最悪のケース。
  2. ジョブの実行分を1番:これは、ジョブをそれぞれ意味する実行15分ほどかかる労働者が。 ながら、これは最初に理想的に見えるかもしれませんが、あなたが等、このシナリオでは、お使いのシステムの他の部分への負担を置いて、独自の問題を紹介昼食時、コーヒーブレイク、会議中に追加の作業の処理を得ることができます。 たとえば、まずセットアップ/処理時間比したがって、システムの効率を失って、右下に行くつもりです。 あなたのネットワークは常に一日の仕事にその日を洞ているイライラスタッフが様々な労働者に求人情報を配信する予定です。 また、それは多く、定期的に仕事の小さな断片の多くを配る必要があるとして、ジョブの処理サーバーでより多くの負担をかけないようになるだろう。 最後に、このような状況であなたの仕事のサーバーが処理を穏やかにジョブサーバーは困難を経験していたことに気付かない続けたことの大きな仕事に対し、未完成の作品の巨大なバックログを作成するつもりがダウンした場合。

現実には多くの利用可能なリソース、ジョブのターンアラウンド時間の要件は、ネットワーク機能などのジョブの種類に依存して、グリッドの設定を行うための1つの理想的構成があるでしょう。 しかし、いくつかのガイドラインは次のようになります:

  • サイズのジョブは、各労働者が15時間(最長可能性が高いアイドル時間)の期間で少なくとも3-4ジョブを介して得ることができる
  • そのセットアップ時間は非常に意味のない処理時間(心、上記の点で軸受)と比較してなるようにジョブのサイズで再生します。
  • ジョブは、それは、その行った欠勤を仮定して、別の労働者とそれを処理を開始完了する予定(多分それ以下)二重の時間を完了しない場合。 これは、あなたはそれが(おそらく長い後続のジョブが失敗した場合)を完成させるために3回、ジョブの通常の長さを待たなければならないことを意味します。 あなたは、時間を、この削減したいかもしれませんが、基礎を定期的にタスクを処理ように注意する必要が重複しない起動することがありますが同じくらいすぎて減らすことを。
  • ジョブズCEOは、可能な限り外の要件とは無関係にする必要があります。 ジョブサーバーは、例えば、唯一の開始と終了のすべてのジョブので連絡する必要があります。
  • ネットワークを飽和しないでください、これは2つの負の影響を持っているが、あなたの昼間のスタッフは、ネットワークがイライラする問題は、接続にのみ、あなたのグリッドを拡張として悪くなる問題がタイムアウトして発生する可能性がある使用しております。
  • 確認ジョブは、労働者に実行することができます。 ジョブは、あまりにも思い出になる場合は集中的に、またはディスク容量集中ジョブが中止開始されますあなたが気づくだけが理由は本当の理由で処理ジョブの数の減少です。

ジョブの送信結果

ジョブの結果を提出するとき、それは結果が現在のワーカーは、しばらくの間休止されている場合は特に、他の労働者が提出されていないことを確認することが重要です。

ときの結果は、結果の数は、ジョブ内のレコードの数と一致することを確認でございます。

は、前述のように仕事の検索結果の提出にフォールトトレランスを構築すると強調した上ですることはできません。 労働することができますほとんどの時間の都合でサスペンドモードに入ると、これは用の仕出し料理する必要があります(最も可能性が高い)。 また、再びはるかに簡単に対処するためのジョブ制御システムへの将来の変化に応えるため、あなたの結果提出を抽象化する。

概要

このsectionÂでは、ジョブ制御サーバが実行する必要が何をどのように設定し、非常に基本的なシステムを得るために見てきました。 我々は、制御システムからジョブを取得する方法と、最高のジョブを構成を取得する説明最も我々のオフィスのグリッドシステムの。 、ジョブ制御サーバに戻って結果を提出の段落または2位に発表された。

  • ジョブ制御サーバーは、ジョブを管理し、すべての作業単位が完了していることを保証
  • あなたの仕事/結果の提出を我々は多くの問題もなく管理サーバーの技術を変更することができます選択して抽象化することにより、
  • 設定あなたの仕事は、彼らは、ネットワークインフラストラクチャ上で過剰な圧力をかけることなく、定期的に処理タスクを複製することなく、迅速かつ効率的に実行されていることを確認してください。
  • を確認して、あなたのルーチンにフォールトトレランスとエラーcheckingÂを構築すること、労働者が一時停止することができます再開、最も時間の不便。 結果は、すでに別の労働者が提出されているかどうかを確認してください。

次回

第3部私たちはマシンを処理します作成我々の仮想と労働時間になるアイドルにマシンを設定し、当社のWindows。

1つの応答を"仮想環境を使用してOfficeグリッドコンピューティング - 第2部"

  1. 加水分解は 言う:

    おう! 素晴らしいコンセプトが、これは実際に仕事をするのでしょうか?

返信コメントを残す













パノラマテーマ別 Themocracy

10人オンライン中
5名様、5ボット、0メンバー
今日の最大の訪問者は:13 7時33分でUTC午前
今月:26 2011年7月5日12時35分は、UTC午前
今年:130 28-03-2011 22:40 UTCに
すべての時間:130 28-03-2011 22:40 UTCに