カテゴリー:グリッドコンピューティング

仮想環境を使用してOfficeのグリッドコンピューティング-パート4

によって 、金曜日2009年12月4日午後11時59分

はじめ

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

第3部私たちは、仮想加工機を作成し、アイドルタイム労働者になるためにWindowsマシンをセットアップする。

最新のコードを実行する

必然的にあなたの労働者のビジネスロジックの作成 ​​後に変更される、バグが発見され、より速く、より効率的なコードは、このようにして労働者が使用してデータ処理の周りに座っ残して生産される古い臭いのコードを どのようにして我々は常に我々の処理のスクリプトの最新かつ最高のバージョンを使用していることを確認する方法はありますか

我々はこれを行うことができるいくつかの非常に簡単な簡単な方法がありますが、トリックは、しかし、これを達成するために処理能力とネットワークトラフィックを削減することです。 ソリューションの最も単純で始まると繰り返しのカップルかけてゆっくりとそれを改善することができます。

最初の方法は、単に私たちの仕事の制御サーバ(Samba、FTP、または類似の経由)に接続し、コードの最新バージョンをプルダウンすることです。 あまり効率的で、それは仕事を行います。 その幾分、どのようにrsyncのスクリプトを作成し、代わりにそのたびに使用してはどうでしょうか?で改善できます 別の方法として最初にコードをチェックアウトしてからちょうど(実行のたびに私たちのコードを更新するSubversionに私たちの最新の処理のスクリプトを置くことについての何svn updateを )?

最後に我々はこのように単純に見えるのbashスクリプト(10分ごとにcronによって呼び出される)で終わる可能性:

  #!/ bin / shを
場合はps ax | grepの- Vはgrep | grepはPHP > / dev / nullに
その後、
    エコー"ジョブは現在、出口を処理している"

    エコー"ジョブが実行されていない、今始める"
     CD / path / to /を作業/コピー
     svn updateを
     PHP yourJobProcessingScript.php
 FI 

今、私たちは、それぞれのランで我々は間違いなく最新のコードを実行していることを確認することができます。 我々は実行を実行するたび、毎回私たちのコードベースを更新し、唯一の私たちのネットワーク全体でファイルの差分を転送することにより、ネットワークトラフィックを減らすことで、これを確保している。

私のデモのセットアップでは、私は上記のように正確でした。 Subversionは、私の仕事の処理のサーバにインストールされており、私は、単に'svn update'を使って'労働者'ブランチから最新コードを引っ張られた。 私はまた、結果のリターンの一部としてデータベースに戻された私の処理スクリプトにバージョン番号のタグを追加する。 このように私は私のコードは、私は間違いなく最新の処理のスクリプトを実行していた労働者の分岐、すなわちに私のトランクをコピーするたびに更新されていたことが見ることができました。

最新のデータを使用する

あなたの仕事の処理はその後のデータソースを利用する場合、いずれかの時点で、これらはあまりにも更新する予定です。 あなたはあなたの労働者が足踏み状態にすべてをもたらす実行を開始するとすぐにトラフィックでネットワークを溢れさせないようにするつもりは非常に低頻度でデータソースを呼び出さない限り。 私の解決策のために私は私のVMの周り私のデータソースを移動したいことを決めた。

あなたがそこに馬ならホールド!私のデータソースが巨大である場合はどうなりますか? まあ、これは本当に我々が話しているどのくらいのデータの場合ですか。 それは、追加の処理のサーバを購入するよりも費用対効果の各マシンに追加の大容量のハードディスクドライブをインストールすることがあります。 これは予算の問題であると決定するビジネスまでです。 それは多分あなたのデータソースは、ワーカーマシン内のデータの量を保つために、そのちょうど不可能ほど大きなものですこと。 その場合、あなたは何をしますか? まあ我々は、ローカルデータサーバを呼び出すことで見ることができるが、これはネットワークで問題が発生する可能性があります。 このケースでは、このようなグリッドシステムは、オフィス環境に含めるのは非現実的になることがあります。 また、のみ午後8時と午前6時毎晩および/ ​​またはスロットリングデータソースのリクエスト間で労働者を呼び出して、例えば、代わりの実行戦略に見ることができる可能性があります。

に移動すると、データの100GBのに私たちのデータソースの量を言うことができます。 はいよくその更新時にネットワーク上を移動しかなりの量のデータです。 どのように我々はこの場合のデータの最新コピーを持っていることを確認ですか? rsyncは可能ですが、個人的に私はあなたの仕事の処理サーバーで、最新のデータソースを実行し、レプリケーションのマスター(すてきな長いビンのログを持つ)としてこれを設定することによって移動するための方法かもしれないと思う。

レプリケーション データソースへのジョブ制御サーバのアップデートをスレーブとして労働者のそれぞれを設定することによって、ネットワーク活動の大幅な増加(あなたが巨大なデータの更新を実行し、すべての労働者がでキックしない限り、つまりすることなく、労働者にきちんとトリクルダウンになります一度に)。 これはその内のrsyncの利点を持っていることは、各ジョブの前に長い休止を取得しませんが、データベースの更新として、 mysqlの処理を続行しながら、労働者のデーモンは、継続的にデータを更新します。

これは私が私のデモサーバをセットアップする方法です。 レプリケーションを設定するには、私は、MySQLのサイト(上のガイドに従って、レプリケーションの設定 )と20分以内に私は、ジョブ制御サーバのデータセットを複製する私のinital労働者を持っていた。 各追加のワーカーのためのレプリケーションの設定とプロセスは、VMがコピーされるたびに働いた。

まとめ

記事のこのセクションでは、簡単にかつ無痛、それは仕事をし、同じtime.Âでネットワークトラフィックを減らすためにrsyncをusingÂまたはsubverion(SVN)が現在までに、処理のコードを維持するのがいかに見てきた我々はまた、どのように議論それはあなたの労働者のそれぞれにトリックルダウンできるようにすることで、データソースの情報を最新に維持する。 したがって、我々は、エリア私たちはオフィスのグリッドシステム内のビジネスロジックとの情報に追いつくことを保証。 そこに明らかにこれらのタスクを実行するに無数の選択肢がありますが、ここに解決策がでてくることがいかに簡単であるかを示すために2つの簡単な例があったでしょう。

次の時間

適切な名前このシリーズの最後の部分では第5部 、我々はこのシステムを導入する説明します。 私は私が作成して管理するかを学習したものを要約していきます。

仮想環境を使用してOfficeのグリッドコンピューティング-パート1

によって 、金曜日2009年12月4日23:23

はじめ

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

としてPHPの開発者私は、私はつまり、毎日使用するツールを使用するために、Linux、つもりのmySQL 、PHP、VirtualBoxのとSubversion(SVN)を。 しかし私は、このガイドだけでなく他の言語や技術に適応することを願っています。

私が提供するソリューションは、非常に大まかに我々は、私はシンプルさのために何かを変更できます、またはより興味深い使用方法のシナリオを生成するように、これは全体の記事を通じて、真ではないかもしれないしかし達成するために必要があると思います、処理の種類に基づいて行われます。

これはオフィスの大部分が実行さ何なので、これらの仮想化環境は、Windowsマシン上で実行されます。 オフィスのマシンがそれらのマシンを使用してスタッフと干渉しないかという処理は、マシンで管理する必要はありません、と彼らが利用可能になると、新しいマシンに容易に配置可能なはずです。 これは大幅にグリッドシステムを拡張させることのできる拡張性と使いやすさを減少させるとしても、新しい仮想マシンは、追加の構成を必要としません。

なぜオフィスのコンピューティンググリッドを配備?

まずあなたが考えることが、どうしてそのようにクラウドコンピューティングリソースを使用することはAmazonのEC2プラットフォーム よく理由は、例えば、いくつかの可能性があります。

  • あなたは、クラウドコンピューティング環境に特定のデータを委託しません。
  • あなたは、法的な理由で潜在的に、法的な理由(国を離れるなどのデータ)のためにクラウドコンピューティング環境に、例えばNHSのレコードを特定のデータを置くことはできません。
  • あなたが近すぎる、処理ユニットを維持し、ハードウェアを完全に制御させたい
  • あなたは雲のインスタンスを実行するプロジェクトの資金を持っていない
  • あなたのオフィスでは、クラウドのリソースを使用するには、インターネットへの接続を持っていないため、その可能性はありません
  • もし雨が好きではない、雲はあなたが十分に離れておくので、雨を示唆している

私はリストが続けることができる確信しているが、私は今のところ十分だと思う。

オフィスコンピューティンググリッドの利点

よく、(と真の物理学のスタイルでいくつかの抜本的な仮定を行うことができます)、いくつかの数学を行うことができます。 あなたが一日あたり100個のジョブを実行している大きながっしりした体格の処理サーバがあるとしましょう​​。 あなたのオフィスでは、1日16時間、これらの各マシンは、がっしりした体格の処理の断絶と同じくらい強力な10%の場合アイドル状態になっている50台を持っている。 (ここにすべての結果は、パフォーマンスの増加を過小評価に丸められます)。

そう、アイドル時間の1機* 10%の電力で2 / 3時間= 0.067すなわち1デスクトップの処理は、1日6完全なジョブを処理できます。

ここでこの設定をスケーリングする場合、それはあなたのメインの処理サーバが行うように一日あたり、多くのジョブを処理するために15アイドルデスクトップを取ります。

ので、50台の私達のふりを事務所に我々は4完全な処理サーバを 1サーバーから私たちの処理能力を高めることができる、または私達は100の代わりに1日400ジョブを処理している可能性があります。

通知は、 新しいハードウェアのない投資のためにあなたの会社はわずか4回のバッチ処理能力を増加している! 潜在的にあなたの電力使用量を増加させるつもりだが、私はマシンにしてきたほとんどのオフィス環境から一般的に一晩とにかく上に残っているので、緑のイニシアチブとしてこれを見ることができた。

他の利点はまたあなたのオフィスのマシンが十分であると、あなたのオフィスのマシンのパワーを向上させるようにあなたのオフィスのグリッドが自動的に、より強力になるという場合、その新しい投資(または更新)処理サーバーを遅らせることができることを意味。

技術

必要なもの? (またはより正確に私が何を使用していない):

  • アイドル事務機(私の場合は予備の古いWindows XPのラップトップ)
  • VirtualBoxの(または別の仮想化クライアントソフトウェア)
  • OSダウンカットを実行しているPHPは、MySQL runningÂと仮想マシン、私はこれらの私のLIMPのサーバーを呼び出している。)
  • 実行するジョブ
  • ジョブサーバ(どこか別の仮想マシンすることができます)

典型的な仕事

このシステムが実行するように設計されているジョブの種類は次のとおりです:

  • システムは、我々は結果に一致して返す必要がある際にデータのリストを受け取り、
  • マッチングは、いくつかの(比較的静的な)データのソースをチェック/検索して、
  • データソースからの結果は、結果に応じて、追加のデータソースのチェックをマージし、さらに検証が必要な場合があります
  • データが完全に検証および処理、一致するレコードが返されます
  • ジョブ内の各レコードには、残りの独立しています

ので、基本的に我々は、データベースのルックアップと、いくつかの大量の演算、ビジネス環境ではかなり典型的なシナリオの混合物を必要とするジョブの実行を見ている。

グリッドソリューションは、このタイプのジョブを処理するためにのみ有利ではありません。 基本的に、独立したユニットに分割可能な任意のプロセスが並列に実行できます。 例および詳細については、このWikipediaを参照してください: グリッドコンピューティングが、有名な例のカップルですSETIアットホームBIONC そこにコンピューティンググリッドを実行するためのフレームワークがあり、これらはに探してみる価値があります。

我々は何を達成するの​​だろうか?

これらの記事の終わりまでに私がオフィスのグリッドの展開は非常に高価または時間のかかる必要がないことを示すために願っています。 私は議論するつもりです。

  • ジョブ制御システムを設定、ジョブの設定
  • 適切な処理、仮想マシンを作成する
  • Windowsマシン上でシステムをセットアップする方法
  • あなたが最新のコードとデータを使用していることの確認
  • 展開とベンチマーク
  • 見据え

私は(大丈夫、私はこれを書いたし、構築された)Windows XPと私の"GridMachine"仮想マシンを使用してローカルマシン上の概念をテストするためのサンプルアプリケーションの建物なります。 私のジョブ制御サーバが実行される私のメインマシンとなるFedoraの11を

これは完全に動作する堅牢なシステムを実証するものがないようにされ、そのデモンストレーションの多くを意味し、これらの事は時間の合理的に短いスペースで、少しのコストで達成することができることを示して議論している。 どんなことでもご意見、訂正、または改善を送ること自由に感じなさいと私が一致するように更新されたこの記事を維持するために最善を尽くします。

次の時間

パート2私は、ジョブ制御システムを見ることによって開始され、ジョブは各ジョブが失敗することなく処理されることを保証しながら、処理の最大量を達成するために構成する必要がありますどのように見て。

仮想環境を使用してOfficeのグリッドコンピューティング-パート2

によって 、金曜日2009年12月4日23:23

はじめ

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

パート1私は同様に、オフィスのグリッドを作成する理由の潜在的な理由のいくつかを説明したように私が使用するシステムの概要と技術を与えた。

ジョブコントロール

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

  • 労働者からのご要望に応じてハンドアウトジョブ
  • ジョブの種類は、実行するために労働者に指示
  • トラックの仕事
  • ジョブは一度だけ実行されていることを確認
  • 労働者に仕事のデータを提供する、またはそれを取得する場所を、少なくともそれらを伝える

システムはまた、拡張可能な、企業がグリッドソリューションの価値を見つけるとジョブのいくつかのタイプを実行するために拡張できる単一の場合には今のところ有効な解決である必要があります。 たとえば、ジョブが優先順位を得ることが、複数のジョブタイプは最終的にあなたも、それが離れて"一般的な労働者から移動しませんが、ジョブの種類ごとに(用に最適化されているいくつかの異なるワーカーマシンを実行することが、(すなわちいくつかのコードベース)存在する場合があります"アイデア)。 常にシステムを開発する際に将来を考えてみて、短期的なビジョンは、長期的なフラストレーションと増加、開発期間につながることができます。

ジョブサーバ

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

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

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

基本的なセットアップ

私たちの仕事のサーバの基本的なセットアップは私がLIMPサーバーのいずれかを(つまり Li木の実、M ySql、P HPです)呼び出しているもので構成されます。 テアの労働者で実行されているコードは実際には、ジョブ制御システムのデータベースと相互作用することにより実行できるかをジョブ正常に動作します。 の後、私たちは、Webサービスを作成することができますし、実際に手ジョブアウトではなく、労働者は勤勉そのものを行わせることが、今の我々は使い続けるだろうKISSの原則を (それをシンプルに、愚かな!)。

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

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

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

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

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

いくつかのサンプルジョブを追加することができます。

サンプルジョブ

次の表は、再びこれらは私たちの仕事のレコードである、理解することは非常に簡単です。 それらは列`jobs_id`でメインジョブのテーブルにリンクされています。 この表から構成することは非常にあなたが労働者に供給するために必要なデータに依存し、我々は4つの列を持っている非常に単純な例を行うことができます。

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

番目で最後のテーブルの結果のテーブルで構成され、それがずっと同じことが私たちの記録表として構成している、と一部の列を追加することで、レコードのテーブルの一部である可能性があります。

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

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

仕事の選択

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

  1. 完全としてではなく、私たちの労働者からマークし(識別子と__ME__を置き換える、最も簡単にはIPアドレスになる)にリセットされていないすべてのジョブを実行してください。
      UPDATE`ジョブが`、SETは`status`= 0 WHERE`ステータス`= 1と`started_by`= __ME__; 
  2. 私たちの仕事の選択基準を使用して、ジョブを選択し、このワーカーはそれを扱っているコントロールシステムに指示します。
      UPDATE`ジョブが`は`status`= 1、`started_by`= __ME__、`started_at`= NOW()WHERE`ステータス`= 0 ORをセット
     (`ステータス`= 1と`started_at`> DATE_SUB(NOW()、INTERVAL X HOUR))の`id`ASC ORDER BYの。 

    我々はすべてのジョブがAWOLをクラッシュさせたり、行く労働者のイベントで実行されるように時間のX量の結果を返されていないジョブをつかんで。

  3. 次のレコード自体が続くジョブの詳細を取得できます。
      `仕事`WHERE`started_by`= __ME__ LIMIT 1 * FROMを選択します。
     ;`job_records`の`id`= __JOBID__します。SELECT * FROM 

ジョブの完了時に我々の結果のレコードを挿入し、完全なようにジョブをマークします。 ジョブは、スクリプト内の一部の堅牢性を可能にする任意の時点で一時停止/再開ができるように覚えている。 それは、タスクがそのジョブ内のレコード数をチェックし、ジョブ制御のシステムをアッ​​プデートする途中で中断し、ジョブ制御システムに戻って保存された結果の数は賢明な動きになることかもしれません。

さらに、これはジョブがあなたが本当にすべきSQL問合せのフレームから選択し、管理できる方法を示すwhilst 抽象化は、Webサービスを使用するように切 ​​り替えることにした場合ように、ジョブ制御を、ファイルベースのシステム、 XML 、またはその他のシステムの数は、それは上記のコードには影響しません。

ジョブの構成

次に考慮すべき側面は、ジョブのサイズと構成です。 ジョブの設定で再生することにより、我々はスピード、プロセスの複製、および信頼性の間で優れたバランスを取ることができる。 カップルのOFAのシナリオを取る。

  1. ジョブが実行するそれぞれの1日取る:これは、労働者が(時間の3分の2の電力の10%を覚えている)各ジョブを処理するために15日間必要があることを意味します。 これは明らかに賢明な設定ではない、あなたの仕事のサイズがあまりにも大きいです! 初期の労働者はAWOLを(それが結果に加えて再処理の時間を返していないことをピックアップする時間)行くべきそれは、処理の仕事を得るために少なくとも2倍の時間がかかります。 理想では、最初が欠落して行く必要がプロセスに2日かかるとすると、ジョブを介して、最悪ケースでの刻々と仕事を続けるそのように、 簡単にそれぞれの長いアイドル期間の終了によってクリア少なくとも一つの完全な仕事があるんだけど。
  2. ジョブの実行に1分かかる:これは労働者がそれぞれのジョブを実行するために約15分かかることを意味します。 これは最初に理想的に見えるかもしれないが、あなたが昼食時に追加の作業の処理を得るため、コーヒーブレイク、ミーティング、など、このシナリオでは、システムの他の部分に負担がかかり、独自の問題を紹介します。 例えば、まず、セットアップ/処理時間の比率は、したがって、システムの効率性を失って、右下に行くつもりさ。 お使いのネット​​ワークには、常に一日の仕事に一日洞である様々な労働者の不満スタッフへの求人情報をストリーミングされる予定です。 また、それは多くのと定期的に仕事の小片をたくさん皿に持っているとして、あなたの仕事の処理サーバーでより多くの負担をかけるつもりだ。 あなたの仕事のサーバがダウンした場合最後に、このような状況であなたはより大きなジョブに対し、未完了の作業の膨大なバックログを作成するつもりです可能性の継続的な処理のジョブサーバーが問題が発生したことを穏やかに気づいていない。

現実には多くの使用可能なリソース、ジョブの種類、ジョブのターンアラウンドタイムの​​要件、ネットワーク機能などによって変化するため、グリッドの設定のための1つの理想的な設定は存在しません。 しかし、いくつかのガイドラインは次のようになります。

  • サイズジョブので、各労働者が15時間の期間に少なくとも3-4ジョブ(最長可能性がアイドル時間の期間)を介して得ることができること
  • そのセットアップの時間が処理時間(心に上記の点を有する)に比べてごくわずかになるように、ジョブのサイズで再生します。
  • ジョブがあなたはそれが完了する予定時間の2倍(多分少ない)に完了しない場合、そのなくなってAWOLとは別の労働者とそれを処理を開始することを前提としています。 これは、(おそらく長く、後続のジョブが失敗した場合に)三回にそれが完了するまで、ジョブの正常な長さを待たなければならないかもしれないことを意味します。 この時間を短縮するが、あまりにも多く、定期的に処理タスクを複製し始める可能性があるので、それを削減しないように注意することができます。
  • ジョブズCEOは、可能な限り外部の要件から独立している必要があります。 ジョブサーバーは、例えば、唯一のすべてのジョブの開始時と終了時に連絡する必要があります。
  • あなたのネットワークを飽和させないでください、この二つ負の効果を持って、あなたの昼間のスタッフはイライラするネットワークを使用して、問題は、あなたのグリッドをスケールとしてだけ悪くなる問題がタイムアウトに接続で発生する可能性があるでしょう。
  • 確実に仕事もあなたの作業者で実行することができます。 仕事があまりにもなっている場合、メモリを集中的またはディスクスペースを集中的ジョブが中止開始され、あなたが気づくだけではない本当の理由理由で処理されたジョブの数の減少です。

ジョブのサブミットの結果

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

結果が送信されると、結果の数は、ジョブ内のレコード数と一致していることを確認してください。

先に述べたように、およびジョブの検索と結果の提出にフォールトトレランスを構築し、強調を超えることはできません。 労働者は(そしておそらく意志)回数の最も不便な時にサスペンドモードに入ることができますし、これがために仕出し料理する必要があります。 また、もう一度、結果の提出を抽象化することに対処する方がはるかに簡単にジョブ制御システムへの将来の変化に応えるのに役立ちます。

まとめ

このsectionÂでは、ジョブ制御サーバが実行するとセットアップは非常に基本的なシステムを取得する方法必要なものを見てきました。 我々は、制御システムからジョブを最適な方法をほとんどの私たちのオフィスのグリッドシステムのを得るためにジョブを設定するにはを取得する方法について説明しました。 終了するには、ジョブ制御の結果をサーバーに提出する上で段落または2つが発表された。

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

次の時間

第3部私たちは、仮想加工機を作成し、アイドルタイム労働者になるために私たちのWindowsマシンをセットアップします。

仮想環境を使用してOfficeのグリッドコンピューティング-パート5

によって 、金曜日2009年12月4日23:03

はじめ

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

In 第4部我々は、得られた結果は、最新のビジネス情報とロジックで常に最新になるように、我々はコードとデータソースの最新バージョンを実行していることを確認するためのツールを使用して見た。

配置前

あなたが一つと、一つのことだけではないなら、グリッドシステムを導入する前に、それはあなた現在のシステムのベンチマークだ! あなたがあなたの保証を、これをバックアップするために数字が何もない持っていない限り、システムが行おうとしてどれだけ余分な仕事について同僚の言うことは関係ありません。 そう、

  • あなたは現在どのように多くのレコードを処理することができますか? 日あたり? 時間当たり?
  • 仕事を好転させるには、どのくらいの時間が、通常はかかりますか?
  • あなたはどのくらい多くの容量がありますか?

追加質問もあります。

  • あなたの処理サーバ(または、処理サーバのいずれかが)どのようにこれはあなたの能力に影響するダウンした場合には、不自由されるのですか?
  • どのような利点は、あなたが望んで/グリッドシステムから取得できると期待できますか?
  • あなたのオフィスのマシンは、ジョブを実行できるですか?
  • あなた(またはあなたの仕事が変換可能)を実行しているのこのスタイルで動作するようにしていますか?

最後の主要な点は、このような大規模な変更に時間を取ることです。 再び新たな方法論、ベンチマークを使用して動作するように処理コードを更新します。 おそらく、仮想マシンを実行するように処理サーバをセットアップするすべて処理サーバ直後(比較的だけで非常に強力なもの)別のワーカーになります。 新しいプロセスが安定することができます。

展開

私の提案は、オフィス週末に思い浮かんだすべてのインストールとセットアップを実行することです。 ちょうど二週間の休暇前に行うので、他の貧しい人々は結果に対処するためのやつ...多分ない... 残す

このようなシステムの展開が遅くなることがあります。 それはこのシステムをセットアップするのが比較的簡単であるにもかかわらずあなたの全体のオフィスのインフラを(よくデジタルつ)に影響します。 まず、、一度にマシンのカップルにどのように労働者のホストが日常的に行うモニターのネットワークトラフィックを、ロールアウト。 あなたの調査結果に応答してジョブの設定を変更する必要があります。

いったんシステムが数台のマシンのネットワークトラフィックとホストマシンを再度performance.Â次のベンチマークを監視し続ける(すべての事務用機器の10%、つまり5が言うことができます)と和解している、あなたは今あなたの最初のベ​​ンチマークよりも33%以上のジョブを処理する必要があります。 これがそうかどうかを確認して、または、少なくともこの球場にいること。 されていない場合は、先に進む前に何が起こっているかを調べる。 あなたが幸福にすべてのオフィスのマシンが個々のマシンのパフォーマンスを殺すことなく、実行または停止するには、ネットワークを研削するまで、このサイクルを繰り返します。

すべての回ですべての展開が行われた後でも、ベンチマーキングをしてください。 新しいコードのアップデートは、システムの速度にどのように影響するかをチェック、すべての労働者がで報告し、ジョブを処理している確認してください。 ゆっくりと(非常にゆっくりと)あなたの労働者とのネットワークからベストを得るために、ジョブの設定をインクリメント。

ストップ!

あなたは、いくつかの時点で実行されているから労働者を停止する場合は? 彼らはすべてそこには、再生成を実行する、および空腹昆虫のようなデータを処理するために最善をしようとしています。 答えは明白に思えるかもしれませんが、その価値は見過ごされがちな場合にだけ追加。 単に出口(0)を使用して処理のスクリプトを編集したり、ダイ()または他のいくつかの文、処理のジョブをkillする。 我々は常に、任意の実行前に最新の処理スクリプトに更​​新しようとする重要な理由!

デモシステム

短い記事のこのセットを書くために私は技術や方法論を実証するために非常に小さなグリッドを作成。 私はたくさんの記事を読む、チュートリアル、およびセットアップとで何が起こっていたかを監視するためのさまざまなツールを使用していました。 決して私が出ていると、トラフィックと全​​体のオフィスを飽和し、また私は、ホストのパフォーマンスが影響を受けたかどうかを定期的にスタッフのメンバーのPCへのアクセスがあった。

私のデモンストレーションシステムは確かに非常に謙虚だった。 私は、ジョブ制御サーバーとしてセットアップ私の通常のデスクトップを使用していました。 これで私はインストールされていたmySQLのサーバーに複製のマスターとして設定インストールPHPを介してリンク、AとSVN のApache (労働者のVMを介してアクセス用)。

私が6歳のWindows XPのノートパソコンにVirtualBoxでCentOSのワーカーマシンを作成した。 私はマシンにVMをコピーした後に指定されているようスケジュールされたタスクをセットアップし、行ってみよう。

仮想マシンは、PHP、転覆、とMySQLで設立された。 私は自分のジョブ制御サーバのリポジトリから"労働者"という名前のブランチをチェックアウトし、それは'svn update'を使用して更新することができることを確認しました。 次のスレーブとして私の設定mySQLとデータがダウンして労働者のVMへのジョブ制御サーバ上でMySQLから複製されたことを確認しました。 すべてこの後、私はbashスクリプトとcronジョブをセットアップします。

私の処理スクリプトは、基本的にこの(非常に単純なもの)の線に沿って行った。

  • 名前の欄にお読みください
  • VM上のデータソースからテーブルに類似した名前の数をカウント
  • 上記が分割スペースで名前(すなわちforename、ミドル、姓)のように名前の数をカウント
  • このプロセスは1,000回を繰り返す

各ジョブの実行には約20分かかりました。 ある時点で私は窓のラップトップ上でワーカーVMの複数のコピーをオープンし、ジョブが労働者のIPアドレスのそれぞれでオフにチェックされる見た。 この時点で私はまた、複製が自動的に再起動することを確認した。

ジョブ制御サーバからジョブを処理するために開始する労働者をもたらしたアイドルにラップトップを残して。 ノートパソコンの使用を再開する場合約30〜60秒の遅れがあった、これは彼らのマシンは、しばらくの間休止がマシンに戻る可能性がある場合ということを意識する必要のある時間とスタッフのかなりの量です。 新しいマシンは、この長いのポーズを持っていない可能性があります。 アイドル期間中にこれらのマシンで実行される処理量の利点は、より多くの朝の自分のマシンに到着し、短い期間(1分と言う)待つことのスタッフが上回ると(私は頻繁に長く待つことにWindows Defenderのこの)場所を取るに更新することは、それらが(朝のコーヒーをつかむために便利な時間!)これを意識して作られた提供。

全体的な私はそのようなシステムを作成するために使用できる技術を実証していると確信しています。 私はそのようなシステムは、(非常に)小さな規模で、一部はより多くのオフィスのマシンのリソースを利用するスケールアップすることができます試してみると作業を行うことが示されている。 私はこれを行うのポイントを取得しない場合、私は知ることは非常に興味がある/誰か他の人が行うときに参照してください。

結論/評価

次の明確なステップは、実際に現実世界の例を取得し、オフィス環境内でこのようなシステムを導入し、何が起こるか見て開始することです。 技術と有効性を証明するために道燃える会社なしでこれにコミットする事業を求めることは少し難しいかもしれません。 /分散コンピューティングは非常に普及しているグリッドは、いくつかのサークルで、いくつかの大規模なアプリケーションを(BIONC、SETI @ホーム、@ホーム、などを折る)があります。 私は、しかし、オフィス環境内でロールアウトすることが私の検索でこのような小さな規模とシンプルなシステムを見つけることができませんでした。

私は、ほぼすべてのオフィスで利用可能な主にオープンソースソフトウェアとツールを使用して基本的に自由なシステムを作成しました。 技術は基本的には証明され、期待どおりに実行して動作するように示していた。 うまくいけば、私はあまり仕事をし、非常に簡単なセットアップで使用すると、強力な、安く、Aとすべて同時にスケーラブルなオフィスのグリッドコンピューティングシステムを展開できることを示している。

システムが起動して実行したら、カスタマイズしてあなたが作るこ​​とができる改善点の量に終わりはほとんどありません。 例えば、統計/ベンチマークは、簡単に毎日このようなシステムの価値を示す追加することができます。 新しいマシンは、迅速かつ容易にし、ときに彼らはあなたの処理能力を強化、既存のハードウェアへのアップグレードに到着する追加することができます。

私は、このシリーズの記事を読んで楽しんだし、そのオフィスのグリッドシステムを実行するにあなたの思考の糧を与えてくれたと思います。 ここで紹介するソリューションは、必ずしもすべての状況で動作しませんが、独自のソリューションを使用して、データの処理を完了するために許可するように適応する必要があります。

どんなことでもご意見、訂正、または改善を送ること自由に感じなさいと私が一致するように更新されたこの記事を維持するために最善を尽くします。













パノラマのテーマ別 Themocracy

オンラインで現在2つの訪問者
1ゲスト、1ボット、0メンバー
最大の訪問者今日:06:09午前UTC少なくとも19
今月:19-08-2011 06:09 19 UTC午前
今年:28-03-2011 22:40 UTCで130
すべての時間:28-03-2011 22:40 UTCで130