Warning: fopen(/homepages/30/d192847469/htdocs/evilprofessor.co.uk/public_html/wp-content/gt-cache/ja/_ja_page_2) [function.fopen]: failed to open stream: Disk quota exceeded in /homepages/30/d192847469/htdocs/evilprofessor.co.uk/public_html/wp-content/plugins/global-translator/translator.php on line 1183

Warning: flock() expects parameter 1 to be resource, boolean given in /homepages/30/d192847469/htdocs/evilprofessor.co.uk/public_html/wp-content/plugins/global-translator/translator.php on line 1184

Warning: fwrite(): supplied argument is not a valid stream resource in /homepages/30/d192847469/htdocs/evilprofessor.co.uk/public_html/wp-content/plugins/global-translator/translator.php on line 1188

Warning: fclose(): supplied argument is not a valid stream resource in /homepages/30/d192847469/htdocs/evilprofessor.co.uk/public_html/wp-content/plugins/global-translator/translator.php on line 1190
Evilprofessor.co.uk

実行時 ​​に動的にZend_Navigationコンテナにページを追加

によって 、木曜日2010年1月7日22:50

Zend_Navigationについての私の最後のポストで継続では、 カスタムコントローラ/アクションのsitemap.xmlにするためのルートを要求し 、このポストはdymnamicallyランタイム/スクリプト実行時 ​​にZend_Navigationコンテナにページを追加する方法についてです。

そのすべてが順調と良いのINIまたはでページを指定するXMLファイルがいくつかの点であなたは、メニュー、サイトマップ、またはあなたのパンくずリストに含まれるの一環として必要なことをサイト内のページを変更しているつもりです。 したがって、我々は何をする必要があるか、実行時に私たちのZend_Navigationコンテナにページを追加することです。 このための例としては、ニュース、ブログ記事、またはページのコメントなどを追加することであろう

'実行時 ​​に動的にZend_Navigationコンテナにページを追加"読み続け»

カスタムコントローラ/アクションのsitemap.xmlにするためのリクエストをルーティングする

によって 0:13、水曜日2010年1月6日

/のために直接要求するためにはsitemap.xmlにあなたのカスタムコントローラとアクションにZend Frameworkのアプリケーションは、単にあなたにapplication.iniまたは代替の設定ファイル(例えば私の使用navigation.ini)に以下を追加します。

 resources.router.routes.sitemap.route = "sitemap.xmlに"
 resources.router.routes.sitemap.defaults.controller =インデックス
 resources.router.routes.sitemap.defaults.action =サイトマップ

出力のコード例は、適切なコントローラ(例えば私のサイトがインデックスコントローラ、マップのアクションにある)でアクションを作成することによって見ることができます。

 < PHP
クラスIndexController
     Zend_Controller_Actionを拡張
 {
     / **
      * Zend_Navigationの設定に基づいてマップをレンダリングします
      * /
    パブリック関数のsitemapAction()
     {
    	 $をエコーこの - >ビュー - >ナビゲーション() - >サイトマップ();
    	の$ this->ビュー>レイアウト() - > disableLayout();
    	します$ this-> _helper-> ViewRendererの - > setNoRender(TRUE);
     }
 }

サイトマップは、迅速かつ容易に使用して生成することができZend_Navigationは、偉大なクイックチュートリアル(およびZend Frameworkのチュートリアルのために一般的に非常に便利です) Zendのキャスト - 動的メニューサイトマップとパンくずリストを作成する

Zend Frameworkのモジュール単位ベースの設定

によって 、金曜日2010年1月1日22:40

私は以下の設定が必要ですこの記事へのフォローアップを作成して、以下を参照してください。 Zend Frameworkの-モジュールベースのレイアウトを

使用する場合はZend Frameworkをモジュールには、同じアプリケーションから様々な(サブ)サイトを実行中であれば、必ずしも同じたくないのは明白でレイアウトスクリプトの各部分を。 私は次のサイト構造と行くことにしました。

  /アプリケーション
     /コントローラ
         ...
     /モデル
     /モジュール
         /デフォルト
             /コントローラ
             /レイアウト
                 /スクリプト
             /ビュー
                 /スクリプト
         / anotherModule
             ...
     /スクリプト

この問題は、モジュール単位でのレイアウトスクリプトを設定していました。 答えは、アクションヘルパーを使用して流れてきた。 モジュールごとにレイアウトを設定するには、次の3つの手順を実行します。

  1. application.iniの(または類似の構成の設定):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/モジュール/管理/レイアウト/スクリプト"
     default.resources.layout.layoutPath = APPLICATION_PATH "/モジュール/デフォルト/レイアウト/スクリプト"
     member.resources.layout.layoutPath = APPLICATION_PATH "/モジュール/メンバー/レイアウト/スクリプト"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/モジュール/アフィリエイト/レイアウト/スクリプト" 
  2. あなたのアクションヘルパーを作成します。
      <?PHP
     / **
      *モジュール単位でレイアウトパスを設定します。
      *
      * @著者·ロイド·ワトキン<lloyd@evilprofessor.co.uk>
      * @ 2010年1月1日から
      * /
    クラスPro_Controller_Action_Helper_SetLayoutPath
         Zend_Controller_Action_Helper_Abstractを拡張
     {
         / **
         モジュールに基づいて*設定のレイアウトパス
          * /
        パブリック関数のpreDispatch()
         {
        	 $モジュール=します$ this-> getRequestメソッド() - > getModuleName();
    
    	    するif($ストラップ=します$ this-> getActionController()
    	                        - > getInvokeArg( 'ブートストラップ')){
    
    	        の$ config = $ストラップ - >はgetOptions();
    
    	         IF(かどうかの判断(の$ config [$モジュール] ['リソース'] ['レイアウト'] ['layoutPath'])){
    	             $ layoutPath =
    	                 の$ config [$モジュール] ['リソース'] ['レイアウト'] ['layoutPath'];
    	            の$ this-> getActionController()
    	                  - > getHelper( 'レイアウト')
    	                  - > setLayoutPath($ layoutPath);
    	         }
        	 }
         }
     } 
  3. そして最後にブートストラップアクションヘルパーを:
      ...
         / **
          *モジュール単位でレイアウトスクリプトを設定します
          * /
        保護された機能_initLayoutHelper()
    	 {
    	    で$ this->ブートストラップ( 'frontController');
    	    ます$ layout = Zend_Controller_Action_HelperBrokerが:: addHelper(
    	        新しいPro_Controller_Action_Helper_SetLayoutPath());
    	 }
     ... 

教義:NOW DATETIMEデフォルト()

によって 、水曜日2009年12月30日18:30

私は、新しいデータベース·スキーマの設定に苦労してきましたZend Frameworkのプロジェクト。 私は私 を使用して 使用しようとするとDoctrineの私のデータベースモデルのためにORMを。 私は現在のタイムスタンプを取得し、新しいメッセージを追加するときに、それは私が例えば、 ``のdatetime列のデフォルトの日付と時刻を設定するには許可されているので、私はスキーマを設定する必要があります。 私はそれを共有しているので、多くの検索と実験の後、私は解決策を見つけた。

自分のスキーマ内にYAMLファイルだけで、次の操作を行います。

メッセージ:
   actAsの:
     4-19:
      作成しました。
        名前:はcreated_at
        タイプ:タイムスタンプ
        形式:YMD H:I:S
      更新日:
        名前:LAST_UPDATED
        タイプ:タイムスタンプ
        形式:YMD H:I:S
  カラム:
     ID:
      タイプ:整数
      主はtrue
      インクリメント:真
    名:文字列(255)
    メールアドレス:文字列(300)
    メッセージ:文字列(2000)

一方、あなたが `updated_at`を列を使用しない場合は、次の手順を使用することができます。

メッセージ:
   actAsの:
     4-19:
      作成しました。
        名前:はcreated_at
        タイプ:タイムスタンプ
        形式:YMD H:I:S
      更新日:
        障害者:真
  カラム:
     ID:
      タイプ:整数
      主はtrue
      インクリメント:真
    名:文字列(255)
    メールアドレス:文字列(300)
    メッセージ:文字列(2000)

PHPのデザインパターン- Observerパターン

によって 、火曜日2009年12月29日22:02

私が読んでいるヘッドファーストデザインパターン 最近とは私自身の利益のためにPHPの例としていくつかのパターンを書くことにしました。 私はコーディングすることにしましたが初めて1つであるObserverパターン Observerパターンの正式な定義は、次のとおりです。

オブザーバーパターン (非同期のサブセットがパターンをパブリッシュ/サブスクライブ )で、ソフトウェアの デザインパターンではオブジェクトと呼ばれる主題は、オブザーバーと呼ばれる、その扶養家族のリストを保持し、通常呼び出すことによって、任意の状態の変更を自動的に通知しますそれらのいずれかの方法 これは主に、分散イベント処理システムを実装するために使用されています。

システムとしてより緩やかにイベントが発生したときにこれらの更新プログラムの知識を必要とするすべてのシステムが通知されることを確認して結合するようになる。 たとえば、ブログのポスト、ポストを保存した後、我々は、我々のサイトマップを更新、検索エンジン(例えば、Luceneを)を更新するためのタグが必要になることがあり、電子メールサブスクライブするユーザーなど、オブザーバーパターンは、開発者は被監視オブジェクトを編集せずにリスナーを追加することができます。 サブジェクト(つまりブログの記事編集システム)にオブザーバー(つまり、検索エンジンのアップデートオブザーバ、サイトマップ生成ツールなど)を注入することにより、我々はそれを変更することなく、必要なすべてのアップデートを実行できるようにすることができます。

読書'PHPのデザインパターン- Observerパターン"を続ける»

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

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

はじめに

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

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

最新のコードを実行する

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

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

最初の方法は、単に私たちのジョブ制御サーバ(サンバ、FTP、または類似の経由)に接続し、コードの最新バージョンをプルダウンすることである。 非常に効率的な、それは仕事をするわけではありません。 そのやや上に向上させ、ど​​のようにrsyncのスクリプトを作成し、代わりにそれぞれの時間を使用してはどうですか?することができます あるいは、最初にコードをチェックアウトした後だけ(実行のたびに我々のコードを更新してSubversionに私たちの最新の処理スクリプトを置くことについての何svn updateを )?

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

  #!/ bin / shを
場合はps ax | grepの-vをgrepの|はgrep のphp > / dev / nullに
その後
    エコー "ジョブは、現在は、exitコマンドを処理している"

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

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

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

最新のデータを使用して、

あなたの仕事の処理がどこかの時点で、データソースの使用を行う場合、これらはあまりにも更新しようとしている。 あなたはできるだけ早くあなたの労働者が停止にすべてを持って実行を開始し、トラフィックでネットワークをフラッディングするつもりは非常にまれに基づいてデータソースを呼び出す場合を除きます。 私の解決策のために私がVMで周りに私のデータソースを移動したいことを決めた。

あなたがそこに馬よ待って!私のデータソースが巨大である場合はどうなりますか? まあこれは本当に我々が話しているどのくらいのデータの場合ですか? それは追加の処理サーバーを購入するよりも、各マシンに追加の大容量のハードディスクドライブをインストールするために有効なより多くのコストかもしれません。 これは予算の問題であると決定するビジネスまでです。 それは多分あなたのデータソースが非常に大きいであることを、同社のワーカーマシンにそのデータ量を維持するだけで不可能。 その場合、あなたは何をしますか? まあ我々は、ローカルのデータ·サーバーを呼び出すことで見ることができるが、これはネットワークの問題を引き起こす可能性があります。 このケースでは、このようなグリッドシステムは、オフィス環境に含めることは非現実的になる可能性があります。 また、例では、唯一の20時と午前6時毎晩、および/ ​​またはスロットのデータ·ソースの要求の間に労働者を呼び出すために、別の実行戦略に見ることができるかもしれません。

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

複製 データソースへのジョブ·コントロール·サーバーの更新にスレーブがネットワーク活動の大幅な増加せずに、労働者にうまくトリクルダウンされますように労働者のそれぞれを設定することによって、(あなたが膨大なデータの更新を実行し、すべての労働者がでキックしない限り、つまり一度に)。 これは、各ジョブの前に長い休止を得ないだろうという点で、rsyncの利点を持っています。データベースの更新として、 MySQLの処理を続行しながら、労働者のデーモンは、継続的にデータを更新します。

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

要約

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

次回

このシリーズの最後の部分で、適切な名前パート5 、我々はこのシステムを導入説明します。 私が学んだされたものを要約し、私が作成し管理します。

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

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

はじめに

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

パート2我々は、サーバが実行されるジョブを見て、ジョブは各ジョブが失敗することなく処理されていることを確認しながら処理の最大量を達成するためにどのように設定する必要があります。

またはLIMPサーバ - あなたの労働者を設定する

プロセスの次のステップは、仮想の労働者を設定することです。 このために私はVirtualBoxを使用してCentOSのインストールを使用するつもりです。 私はインストールするつもりのmySQLPHPをLIMP(李ホミカ、M ySQL、P HP)ServerAに(私はその名前が成り立っている可能性があります )として知られている、サーバー上の。

  • (リンクに従ってください)​​WindowsマシンにVirtualBoxをインストールします。
  • 作成した仮想マシン内でCentOSの(現在バージョン5.3)をダウンロードしてインストール

私はこの偉大なチュートリアルの1,000 'sはそこにおそらくそこ(:[OK]を、ここで一つだに行っても意味はありませんVirtualBoxの下で作成およびManagingÂCentOSの仮想マシン )。 私が思う注意すべき重要な点は、私は仮想マシンがGridMachineと呼ばれることがあります。

限り仮想クライアントとオペレーティングシステムの私の選択肢が行くように各選択肢の大きな説得力のある理由が全​​くありません。 VirtualBoxは私の自宅のマシンで使用するものであり、3つの主要なオペレーティングシステムでサポートされています。 私は、その優れた安定したOSとしてCentOSを選んだと私は自分のWebサーバー上でそれを使用します。 私は、 オペレーティングシステムXは、コードを迅速に実行し、より効率的にその代わりに :)を使用するので、 もし 、(私は適用していますが、ここでの考え方"あなたのための最も迅速かつ簡単な使用')を仕事に適したツールに大きな信者午前

重要なのはあなたのVMは、それぞれの新しい仮想マシンに対して、それ以外の場合、DHCPを使用していることを確認すると、我々は、ワーカーマシンごとに個別のネットワーク設定を構成する必要はありません我々はwant.By DHCPを使用していないものである個別に構成する必要があり、DHCPを渡しますあなたのためのIPアドレスより。 したがって、(これは、スケーラビリティを向上させ、労働者の管理を軽減)を各1の設定を気にせずにオフィスについてのあなたの仮想マシンをコピーすることができます。

あなたが達成を目指すべきプロセスは、新しい物理マシンは、インストールVirtualBoxを取得し、その後他の多くなく、ほとんどの仮想イメージを展開するであろう。 それはあなたが少なくとも実行されているどのように多くのマシンで確認できるように別のサブネット上のすべての労働者を設定するのが賢明かもしれません。 また、長期リースまたは無制限のリースDHCPにマシンを設定する必要があります。

労働者でジョブを実行する方法

これは興味深い分野であり、労働者のジョブを処理するためのいくつかの有効な方法があります。 ここで私はちょうど2つの最も明白なことを説明します。

  • 永続的に実行するスクリプト:スクリプトは、シェルスクリプトであるか、またはPHPスクリプトは、worker上で一度だけ実行され、無限ループの一部として実行されます。 私は、スクリプトのいずれかのクラッシュとしてこのメ​​ソッドを割り引い​​たし、潜在的に労働者が介入のいくつかの並べ替えずに実行しなくなります。
  • cronベースのスクリプトの実行:すべてのX分には、cronデーモンは、物事が軌道に乗るために、スクリプトへの呼び出しをキックオフ。 いくつかのチェックがなければ、これは、ワーカー·スクリプトの実行の多くの多くのコピーにつながる可能性があります。

私の決定は、シェルスクリプトをキックオフは10minutes.Â私のシェルスクリプトは、次のタスクを実行するcronと一緒に行きました:

  1. プロセスリストを取得し、 'PHP'のためにこれをgrepする。 見つからない場合は次に進みます。
  2. あなたの仕事のコードを呼び出すと、私の場合では、これは何かPHPベースのだろう
  3. ワーカースクリプトは、その実行を完了
  4. 次の適切な呼び出しで再び行く準備

私のbashスクリプトには、次のようになります。

  #!/ bin / shを
場合はps ax | grepの-vをgrepの|はgrepのphp> / dev / nullに
その後
    エコー "ジョブは、現在は、exitコマンドを処理している"

    エコー "ジョブが実行されていない、今すぐ始める"
     PHP yourJobProcessingScript.php
 FI 

注:エコーのはほぼ完全に無意味ですが、それをしようとすると編集することがやって来る次の人を助けるかもしれない。

つまり、労働者の仮想マシンの受信されるハードウェアのそれぞれの新しい部分にコピーするには、迅速、シンプルかつ簡単にセットアップ終了します。 ホストがアイドル状態のときにグリッドシステムの "賢さ"は実際にそのジョブを処理するために作成したコードで実行するすべてのジョブ構成、および適切な場合にジョブが実行されることを確認すること(すなわち、可視化OSではありません。)

労働者を初期化するには、Windowsのセットアップ

最初のタスクは、Windowsのコマンドラインから仮想マシンを実行するために必要なコマンドを動作するようです。 デフォルトの場所にVirtualBoxをインストールして、あなたの労働者がGridMachine名前を付けた場合、ワーカーをロードするために必要なコマンドは次のとおりです。

  "はC:\ Program Files \ Sun \にVirtualBoxを\ VBoxManage.exe" startvm GridMachine 

しかし、 "ヘッドレス"状態でスクリプトを実行するために我々は使用する必要があります。

  "はC:\ Program Files \ Sun \にVirtualBoxを\ VBoxHeadless.exe"-startvm GridMachine - VRDP =オフ 

これは、GUIを持たない仮想マシンを起動し、正常状態を保存することができます。 第二引数は、Windows RDPと競合しないようにRDPをオフにするか、あなたのポート3389でリッスンに関するメッセージを提供します。 仮想マシン名は大文字と小文字が区別されます!

次に、我々はマシンがアイドルになっていると私たちの労働者のVMを開始するためにウィンドウを設定する必要があります。 - > [すべてのプログラム] - >アクセサリ - >システムツール - これは(Windows XP上で)を実行するには、スタートに行く必要があります以下のように>スケジュールされたタスクを:

スケジュールされたタスク

上で[次へ]をクリックし、カスタムプログラムを追加するために参照し、続いて 'は、スケジュールされたタスクの追加 "。 あなたのVBoxManageのスクリプトに移動し、[OK]をクリックします。 のオプションのいずれか(我々は1分でこれを変更します)のためにタスクをスケジュールして続行します。 次の画面をスキップした後に、Windowsは、このタスクを実行したい人を聞いてきます、私は、 '管理者'または新しい特権ユーザを作成することをお勧めしたい。 我々は任意の時点でマシンの標準のスタッフアカウントに干渉したくない覚えています。 [次へ]をクリックし、このタスクのための高度なオプションを示していますチェックしてください。

実行テキストボックスの最後に私たちの'startvm GridMachine'という文字列を追加して、ログインしている場合にのみ実行がunticked残っていることを確認してください。 次のスケジュールタスクを訪問して、スケジュールオプション "アイドル時"にドロップダウンを変更すると、マシンが次のタブに移動する前にアイドルになりたい時間を選択します。

最後に、それは時間のX量を稼働している場合の状態は、タスクを停止するオプションのチェックを外すが、マシンはもはやアイドルではない場合にタスクを停止するオプションにチェックを入れないでください。

スケジュール

これは、Windowsホストのセットアップのために、それだ!

要約

この部分では、労働者として動作する仮想マシンと同様に、我々は、ジョブの処理スクリプト(自分自身のためのPHPスクリプト)を呼び出し、実行する方法を設定している。 ここから我々は、コンピュータがアイドル状態になるとヘッドレスモードで仮想マシンを起動するWindowsの私たちのコピーを設定し、ユーザーがマシンの使用を再開したときに、その状態を保存する方法を見てみましょう。 うまくいけば、この時点では、そのようなシステムを設定することでどのように単純な見ているといくつかの実験を自分で軌道に乗るにうずうずしています!

次回

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

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

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

はじめに

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

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

私が提供するソリューションは、非常に大まかに我々は、私は簡単にするために物事を変えましょう、またはより興味深い使用方法のシナリオを生成するように、これは全体の記事を通して本当でないかもしれませんしかし、達成するために必要があるだろう処理のタイプに基づいて行われます。

これは事務​​所の大部分は実行ですので、これらの仮想化環境は、Windowsマシン上で実行されます。 オフィスのマシンが実行する処理は、これらのマシンを使用しているスタッフを妨げるべきではありません、マシンで管理する必要はありません、彼らが利用可能になると、新しいマシンに簡単にデプロイする必要があります。 これは非常にグリッドシステムを拡張することができるで、スケーラビリティと使いやすさを減少させるとしても、新しい仮想マシンは、追加設定を必要としません。

なぜ、オフィスコンピューティング·グリッドを展開する?

まず、あなたが考えることができ、理由だけのようなクラウド·コンピューティング·リソースは使用しないで、AmazonのEC2プラットフォームを よく理由は、例えば、いくつか考えられます。

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

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

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

さて、いくつかの数学を(真の物理学のスタイルでいくつかの抜本的な仮定を行うことができます)を行うことができます。 あなたは一日あたり100個のジョブを実行している大きながっしりした体格の処理サーバーを使用している想像してみてください。 あなたのオフィスであなたは1日16時間アイドル状態になっている50マシンを持って、これらのマシンのそれぞれは、がっしりした体格の処理断つような強力な10%である。 (ここではすべての結果は、パフォーマンスの向上を過小評価して四捨五入されています)。

だから、アイドル時間中に1台の ​​マシン* 10%の消費電力* 2/3時間= 0.067すなわち、1デスクトップの処理は、1日6完全なジョブを処理できます。

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

したがって、50台の我々のふりをオフィスで我々は4つ完全な処理サーバを 1台の ​​サーバから我々の処理能力を高めることができるか、我々は100の代わりに1日400ジョブを処理することができます。

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

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

技術

あなたは何が必要ですか? (あるいはより正確に私は何を使用しました):

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

典型的なジョブ

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

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

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

グリッド·ソリューションだけではなく、このタイプのジョブを処理するために有利である。 基本的には、独立した単位に分割することができ、任意のプロセスを並列に実行することができます。 例と詳細については、このウィキペディアを参照してください。 グリッドコンピューティングが、有名な例のカップルですSETIアットホームBIONC そこにコンピューティング·グリッドを実行するためのフレームワークがあり、これらは検討しても価値があります。

私たちは何を達成するの​​だろうか?

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

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

私は(OK、私はこれを書いた後、内蔵)、Windows XPと私の 'GridMachine "仮想マシンを使用して、ローカルマシン上でコンセプトをテストするためのサンプルアプリケーションの建物でしょう。 私のジョブ制御サーバが実行されます私のメインマシンとなるFedoraの11

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

次回

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

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

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

はじめに

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

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

ジョブ制御

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

  • 労働者からの要求に応じてジョブを配る
  • どのような種類のジョブを実行するために労働者を言う
  • トラックの仕事
  • ジョブが一度だけ実行されていることを確認
  • 労働者に仕事のデータを提供するか、少なくともどこにそれを取得するように指示

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

Job Serverは

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

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

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

基本的なセットアップ

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

だから、3作成することができます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. 完全としてではなく、私たちの労働者からマークされていないすべてのジョブを取ると(最も簡単な、IPアドレスになる、識別子を使用しての_ ME__に置き換えてください)​​、それらをリセットします。
      UPDATE ``ジョブのSETは `status` = 0 WHERE `ステータス` = 1と `started_by` = __ ME__。 
  2. 私たちの仕事の選択基準を使用して、ジョブを選択し、この労働者はそれに対処されている制御システムを教えて:
      UPDATE ``ジョブのSETは `status` = 1、 `started_by` = __ ME__、 `started_at` = NOW()は `status` = 0 OR
     ( `ステータス` = 1と `started_at`> DATE_SUB(NOW()、INTERVAL Xアワー))の `id` ASC ORDER BYを。 

    我々はすべてのジョブがAWOLをクラッシュまたは予定労働者のイベントで実行されていることを確認する時間のX量の結果を返していないグラブのジョブで。

  3. 次のレコードそのものに続いてジョブの詳細を取得できます。
      `仕事` WHERE `started_by` = __ ME__ LIMIT 1 * FROMを選択します。
     `job_recordsます。SELECT * FROM` WHERE `idを` = __ JOBID__。 

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

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

ジョブ構成

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

  1. ジョブが実行するために、それぞれ1日かかる:これは、あなたの労働者が(時間の3分の2の電力の10%を覚えている)は、各ジョブを処理するために15日間必要があることを意味します。 これは明らかに賢明な構成ではありません、あなたの仕事の大きさはあまりにも大きい! 最初のワーカーがAWOL(それは結果に加え、再処理の時間を返していないことをピックアップする時間)行く必要がありますが、少なくとも二重処理の仕事を得るために時間がかかるだろう。 理想的にあなたが最初に行方不明にするジョブの処理に2日かかる場合上の最悪の刻々と過ぎて仕事を続けるそのように、 簡単にそれぞれの長いアイドル期間の終了によってクリアされ少なくとも1つの完全な仕事をしていると思います。
  2. ジョブが実行する1分をとります。これは労働者が、各ジョブを実行するには、約15分かかることを意味します。 これは最初に理想的に思えるかもしれません、あなたはランチタイム、コーヒーブレイク、会議中に追加の作業の処理を得る一方で、等このシナリオでは、お使いのシステムの他の部分に負担を置き、独自の問題を紹介しています。 たとえば、まず、セットアップ/処理時間の比率は、したがって、システムの効率性を失って、右ダウンしようとしている。 ネットワークは常に日の仕事にその日洞様々な労働者イライラするスタッフにジョブ情報をストリーミングしようとしている。 また、それが多く、定期的に作業の小さな断片の多くを配る必要がありますようにあなたの仕事の処理サーバーでより多くの負担をかけるつもりです。 あなたの仕事のサーバがダウンした場合最後に、このような状況であなたはより大きなジョブは、ジョブサーバーは、問題が発生したことをこの上なく幸せに気づいていない継続的な処理の可能性に対し、未完成の作品の巨大なバックログを作成しましょう​​。

現実には多くの使用可能なリソース、ジョブの種類、ジョブのターンアラウンド時間の要件、ネットワーク機能などに依存して、グリッドのセットアップには1つの理想的な構成はありません。 しかし、いくつかのガイドラインは次のようになります。

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

ジョブの送信結果

ジョブの結果を提出する際に、その結​​果を確認することが重要である現在の労働者はしばらくの間休眠している場合は特に、別の労働者から提出されていません。

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

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

要約

このsectionÂでは、ジョブ制御サーバは何を行う必要があるかを見て、どのように設定する非常に基本的なシステムを取得する必要があります。 私達はあなたのオフィスのグリッドシステムの私たちのほとんどを得るためにジョブを構成する制御システムからのジョブと最善の方法を取得する方法について説明しました。 終了するには、ジョブ制御の結果をサーバーに戻って提出上の段落または2つ発表されました。

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

次回

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

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

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

はじめに

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

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

配置前

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

  • あなたは現在どのように多くのレコードを処理することができますか? 日あたり? 時間当たり?
  • それは典型的に仕事を変えるためにどのくらいかかりますか?
  • あなたはどのくらい多くの容量を持っていますか?

追加の質問もあります:

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

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

展開

私の提案は、すべてのインストールとセットアップを行うオフィス週末にポップアップするでしょう。 ちょうど二週間の休暇の前にこれを行うと...結果に対処するために荒れそうでないかもしれないので、他の貧しいままに ...

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

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

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

ストップ!

何がある時点で実行して労働者を停止したい場合は? 彼らはすべてそこ、再生を実行し、空腹の虫のようなデータを処理するために最善をしようとしています。 答えは明白に思えるかもしれませんが、その価値は念のために、その見落としを追加します。 単に出口(0)を使用して処理スクリプトを編集したり、死ぬ()または他のいくつかのステートメントは、処理ジョブを殺すために。 An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













Panorama Theme by Themocracy

2 visitors online now
1 guests, 1 bots, 0 members
1時15分午前UTCで11:最大の訪問者今日
今月:23-05-2012 3時33分40は、UTC午前
今年:27-02-2012 09:56 69 UTC午前
すべての時刻:28-03-2011 22:40(UTC)に130