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

スティーブンロイドワトキン 2010年1月7日(木曜日)22:50

約Zend_Navigationポストの継続に私のでは、最後の/アクションコントローラのカスタムへのルート要求sitemap.xmlには、この記事は、実行は約スクリプト/ランタイムZend_Navigationコンテナでdymnamically追加ページに設定してください。

そのすべてが順調およびiniファイル内のページをよく指定してあなたのxmlファイルがサイト内のにページを変更するようにしているつもりでは、いくつかの点証跡ことブレッドクラムメニューの必要に応じて一部、サイトマップのに含まれる、またはがして。 そこで我々は、実行時に我々のZend_Navigationコンテナにページを追加するだけです必要なもの。 この例としては、ニュースアイテムを、ブログの記事、またはページコメントなどの追加になります

»の読書追加のコンテナZend_Navigationページを動的に'は、ランタイム続行

/アクションコントローラのカスタムへのルート要求のsitemap.xmlに

スティーブンロイドワトキン 2010年12時13分、午前水曜日1月6日

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

 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 -表示> ->ナビゲーション() - >サイトマップ();
    	の$ this -表示> ->レイアウト() - > disableLayout();
    	の$ this -> _helper ->はViewRenderer -> setNoRender(真);
     }
 }

サイトマップを使用してすることができます迅速かつ生成される簡単Zend_Navigationを 、偉大な簡単なチュートリアル(および一般的には非常にチュートリアルFrameworkの役に立つためにZend)は、 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();
    
    	     ($ブートストラップ=します$ this -> getActionController()が
    	                        - >のgetInvokeArg('ブートストラップ')){
    
    	        の$ config = $ブートストラップ-> GetOptions()の;
    
    	        場合(かどうかの判断(の$ 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());
    	 }
     ... 

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

スティーブンロイドワトキン 、水曜日2009年12月30日18:30

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

スキーマは、あなたのYAMLのファイルを単純に次の操作を行います:

メッセージ:
   actAs:
    するTimestampable:
      作成者:
        名:created_atの
        タイプ:タイムスタンプ
        フォーマット:Ymd高:私:掲載
      更新日:
        名:last_updated
        タイプ:タイムスタンプ
        フォーマット:Ymd高:私:掲載
  カラム:
    番号:
      型:整数
      プライマリ:trueの場合
      オートインクリメント:trueの場合
    名前:文字列(255)
    電子メール:文字列(300)
    メッセージ:文字列(2000)

あなたは`updated_atの`カラムを必要としない一方場合は、次のコマンドを使用することができます:

メッセージ:
   actAs:
    するTimestampable:
      作成者:
        名:created_atの
        タイプ:タイムスタンプ
        フォーマット:Ymd高:私:掲載
      更新日:
        障害者:真
  カラム:
    番号:
      型:整数
      プライマリ:trueの場合
      オートインクリメント:trueの場合
    名前:文字列(255)
    電子メール:文字列(300)
    メッセージ:文字列(2000)

PHPのデザインパターン-オブザーバーパターン

スティーブンロイドワトキン 2009年12月29日(火曜日)22:02

私が読んでいるヘッドファーストデザインパターン 最近では、自分の利益のためにPHPの例として、パターンのいくつかを記述することを決めた。 ようにコーディング交流第一決めた私は、1つは、 Observerパターン Observerパターンの正式な定義は以下です:

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

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

»'をPHPを- Observerパターン読書デザインパターン[続行

使用して仮想環境を計算オフィスグリッド-第4部

スティーブンロイドワトキン 、金曜日2009年12月4日午後11時59分

はじめに

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

第3部私たちはマシンを作成した我々の仮想処理や労働者の時間アイドルになるように設定ポップアップウィンドウのマシンを。

最新のコードを実行する

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

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

最初のメソッドは、単に(サンバ、FTP、または同様のを介して)私たちの仕事の管理サーバーに接続し、ソースコードの最新バージョンをプルダウンされます。 あまり効率的で、それが仕事をします。 きれいは、多少は、rsyncスクリプトを作成する方法についての使用方法について改善することではなく、それぞれの時間? 代わりに何を(実行我々のコードを上の各更新についてはちょうどその当初からコードを入れてチェックにsubversionのスクリプトを最新の処理のsvn update )?

最終的には次のようにシンプルですbashスクリプト(10分毎にcr​​onで呼ばれる)になりかねない:

  #!/ bin / shに
はgrepはgrep | -場合、ps axを| grepをVのPHPの >は/ dev / null

     "ジョブは、終了現在処理している"エコー

     "今すぐ起動すると、ジョブが実行されていない"エコー
     CDの/パス/ / /作業コピーに
     SVNの更新
     phpのyourJobProcessingScript.php
 Fiの 

今、私たちは、それぞれ実行して我々は確実に最新のコードを実行していることを確認することができます。 我々はコードベースごとに、すべての時間を我々は我々のネットワークを介してファイルの差分を転送することによって実行し、ネットワークトラフィックを低減することを実行する更新することによって、これを確実にしています。

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

最新のデータを使用して

あなたの仕事処理は、これらがあまりにも更新されるとしているいくつかの点で、データソースの使用を行う場合。 あなたはすぐに、労働者が足踏み状態にすべてをもたらすの実行を開始のトラフィックを使用してネットワークをあふれさせるつもりは非常にまれに基づいてデータソースを呼び出す場合を除き。 私の解決策については私は私のVMとのまわりで私のデータソースを移動したいことを決めた。

がホールド馬をしているあなたは!巨大いる場合はどうすれば私のソースは、データ? まあこれは実際に話している私たちは、データである場合の多くはどうやって? これは、サーバーを処理できることを追加購入に各マシンよりもドライブを大容量のハードディスク追加インストールするよりコスト効率に。 これは、予算の質問され、決定するためにビジネス交流です。 それは多分マシンがデータワーカー源はあなたのしているので、大規模なデータのその量を保つために不可能は、そのわずか。 場合にはそのよう何をあなたは? まあ我々は、サーバ、データ、ローカルできるように寄港するが、これはネットワークの問題を可能性がありますが発生します。 場合にはこのように、このグリッドシステムは、環境事務所にに含めることになる現実。 これは、要求があります元のデータもスロットル/または毎晩と6時とすること20:00労働者の間だけでなく、たとえば、呼び出し元のあなたの戦略を実行代替することができますように。

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

レプリケーション データソースへのジョブ制御サーバーの更新に奴隷として労働者のそれぞれを設定することにより、膨大なデータの更新を実行しない限り、すべての労働者はキックされているネットワーク活動の巨大な増加(せずに、労働者に素敵なトリクルダウンされます回)で。 あなたは、データベースを更新のないにつれて、前に、各ジョブの一時停止を長いことでこれがある利点をrsyncでのmysqlの更新される継続的継続データを処理が中に労働者デーモンが上。

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

概要

資料のこのセクションでは、私たちはどのように簡単に見ている痛み、それが仕事をして、ネットワークトラフィックを削減また、説明したのと同じtime.Âでusing rsyncやSubversionでも(SVN)のが最新に処理コードを維持する方法それはあなたの労働者の各々にまで浸透させることにより最新のあなたのデータソース情報を保持する。 したがって、我々は、ビジネスロジックと情報私たちのオフィスグリッドシステム内のについていくことを保証する領域。 明らかに無数の選択肢があるでしょうが、ここでは、これらのタスクを実行するされた2つの簡単な例をソリューションは、手に入れるのがいかに簡単かを表示します。

次回

シリーズの一部のこの最後では、適切な名前第5システムを、この展開私たちがありますについて説明します。 私が学んだされているものと、私が作成し、管理を要約します。

使用して仮想環境を計算オフィスグリッド-第3部

スティーブンロイドワトキン 、金曜日2009年12月4日11時37分

はじめに

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

第2部私たちは、実行されているサーバは、自由に仕事を見て、どのようにジョブが失敗することなく処理される必要がありますジョブは、各確保する間の処理量を最大に設定を達成するために。

またはぐったりサーバを - あなたの労働者の設定

プロセスの次のステップは、仮想の労働者を設定することです。 このために私はVirtualBoxを使用してCentOSのインストールを使用するつもりです。 私がインストールしようとしているのmySQLPHPをとしても知られているサーバーぐったり木の実は、m ySQLは、P HP)はServerAは(私がしたことは名前を開く)。

  • あなたのWindowsマシン(リンクをたどって)にインストールするのVirtualBox
  • ダウンロードして、作成された仮想マシン内で(現在のバージョン5.3)CentOSのインストール

一:あるの[OK]をここでは、ある(がないですおそらくこの行くことに私はポイントは1,000秒の偉大なチュートリアルout'を作成し、VirtualBoxの仮想マシンの下CentOSのManaging )。 重要な点は、GridMachineマシンに仮想私と呼ばれるに注意してください、私が仮定されていること。

これまでの仮想化クライアントとオペレーティングシステムの私の選択肢などに行くように、各選択肢には大きな理由がある。 VirtualBoxは私と私の自宅のマシンで使用する3つの主要なオペレーティングシステムでサポートされているものです。 私はその良い安定したOSとしてCentOSの選択と私は自分のWebサーバー上のそれを使用します。 私の代わり効率的に使用することをより多くのコードを速くして、Xは実行営業使用するそうだとすれ )にする'の精神ここに簡単で、最も簡単なシステム適用するための私の素晴らしいツール右側の信者をジョブ(ている私がが:)

重要なのは、VMのは、我々は、労働者のマシンに個別のネットワーク設定を構成する必要はありません私たちは、want.By DHCPを使用していない何かされている個別に構成する必要がありますそれぞれの新しい仮想マシンのそれ以外の場合は、DHCPを使用していることを確認、DHCPが提出されますあなたのIPアドレスから。 したがって、(これはスケーラビリティを向上させ、労働者の管理作業が軽減さ)を、それぞれの設定について心配することなくオフィスの仮想マシンをコピーすることができます。

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

どのように作業者のジョブを実行するには

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

  • 永遠にスクリプトを実行:スクリプトを、そのシェルスクリプトやPHPスクリプトの労働者に一度だけ実行されると無限ループの一部として実行されます。 私は、スクリプトのいずれかのクラッシュは、このメソッドを割引した可能性のある労働者は、介入のいくつかの並べ替えすることなく実行を中止します。
  • cronベースのスクリプトの実行:cronデーモンは、スクリプトへの呼び出しをキックオフX分ごとに調子は取得します。 いくつかのチェックがなければ、これは実行している労働者のスクリプトの多くの多くのコピーをする可能性があります。

私の決断は私のシェルスクリプトは、次のタスクを実行するごとに10 minutes.Âシェルスクリプトをキックオフcronで行っていました:

  1. プロセスリストを取得し、'php'を、これをgrepする。 次に進みますが見つかった場合はありません。
  2. あなたの仕事のコードを呼び出して、私の場合では、これはPHPが基づくものになるだろう
  3. 労働者のスクリプトが実行を完了
  4. 次の適切な呼び出しで再度行く準備

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

  #!/ bin / shに
はgrepの- v grepの| |はgrep phpの> / dev / nullにps axをする場合

     "ジョブは、終了現在処理している"エコー

     "今すぐ起動すると、ジョブが実行されていない"エコー
     phpのyourJobProcessingScript.php
 Fiの 

ノートでは、:エコーのは完全に無意味な、 ほとんどは、それらを編集しようとするとありますがやって来るに役立つ次の人に。

それは、労働者の仮想マシン、単純な、迅速かつ容易に受信されているハードウェアの各々の新しい作品にコピーするの設定終了します。 グリッドシステムの'賢は本当に可視化OSにされていない場合、そのすべてが、プロセスのジョブ、ジョブ構成に作成したコードとは、ジョブが適切な(つまり、ホストがアイドル状態のときにしたときに実行されることを確認することで)。

Windowsをセットアップする労働者を初期化する

最初のタスクは、Windowsのコマンドラインから仮想マシンを実行するために必要なコマンドを使用することです。 場所がデフォルトにVirtualBoxをあなたがしたインストールされて、あなたは、労働者は、名前、ワーカーした交流をロードするために必要なコマンドGridMachineをして:

  "はC:\ Program Files \日\ VirtualBoxの\ VBoxManage.exe"startvmのGridMachine 

しかし、我々は使用する必要があります。'レス'状態でスクリプトを実行するには:

  "はC:\ Program Files \日\ VirtualBoxの\ VBoxHeadless.exe"- startvmのGridMachine - vrdp =オフ 

これは、GUIなしで仮想マシンを起動し、それが正常の状態を保存することができます。 メッセージを約リスニングポート3389上にあるのでそのようにRDPをオフに引数がオフにする2番目は競合を与えるあなたに、またはRDPでウィンドウを閉じます。 仮想マシン名は小文字が区別される場合!

次に、我々はマシンがアイドル状態になっているかつて我々の労働者のVMをキックオフするには、Windowsをセットアップする必要があります。 >全てのプログラム - - >アクセサリ - [システムツール] - これを行うには(Windows XPの場合)、スタートに行く必要があります>スケジュールされたタスクを以下のように:

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

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

untickedは左にするには最後に'の実行テキストボックスを追加当社startvmのログインしたときのみが実行できるように、文字列を'GridMachine。 スケジュールタスクは、次の訪問は、次のタブに移動する前にあなたがアイドル状態であると機械のようにいた時間の長さを選択して'アイドル'は、オプションまでのスケジュールの低下を変更してください。

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

スケジュール

それは、Windowsホストのセットアップのためのそれを見る!

概要

この部分では、労働者として機能するように仮想マシンだけでなく、私たちが電話して私たちの仕事の処理スクリプトを実行する方法(PHPスクリプト自分のために)設定されている。 ここからは、コンピュータがアイドル状態になったときに、ヘッドレスモードで仮想マシンを起動するには、Windowsの私達のコピーをセットアップする方法、ユーザーがマシンの使用を再開したときにその状態を保存を見てください。 うまくいけば、この時点では、それがこのようなシステムを設定するにはいくつかの実験を自分で軌道に乗るてうずうずしているのがいかに簡単か見ている!

次回

第4部私たちはロジックと情報ビジネス最新の日付だろうと、され常に最新の結果は、データソースように取得したコードとすることを探して使用して、最新のバージョンを実行しているツールを確保することにしています。

使用して仮想環境を計算オフィスグリッド-第1部

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

はじめに

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

としてPHPの開発者は、私はLinuxを、すなわち一日だ行くごとに私が使用して使用するツールをMySQLのは、PHPは、VirtualBoxとSubversion(SVN)。 しかし、私は、このガイドでは、同じように、他の言語や技術に適応すると思います。

私が提供するソリューションは非常に緩くI、または、単純化のために物事を変えてやるとより興味深い使用方法のシナリオを生成するために私たちは、これが全体の資料で、真されない場合がありますが達成するために必要があると思います処理のタイプに基づいて行われます。

これはオフィスの大部分が実行さものであるため、これらの仮想化環境では、Windowsマシン上で実行されます。 オフィスのマシンでは、これらのマシンを使用してスタッフを妨害すべきではありませんか、その処理には、マシンのメンテナンスを必要とし、彼らが利用可能になるように簡単にデプロイ可能な新しいマシンにすること。 これは非常に拡張性を減らすのと同様にまた、新しい仮想マシンは、追加の構成を必要としませんし、グリッドシステムを拡張することができるで容易になります。

なぜは、Officeコンピューティンググリッドを配置する?

まず、あなたにそのようなリソースを計算可能性があります雲が理由だけではなく、使用を考えて、 AmazonのEC2プラットフォーム まあ理由としては、例えば、いくつかのことができます:

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

私はリストには、続けることができたんだけど、私は今のところ十分だと思う。

Officeのコンピューティンググリッドの利点

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

だから、10%の電力* 2 / 3回= 0.067すなわち、1デスクトップの処理のアイドル時間* 1マシンは、1日6フルジョブを処理することができる。

は、メインサーバの処理としての場合は一日に何のジョブごとに処理するためにアイドル状態のデスクトップ15を受け取り、それはあなたが今スケールこれをバックアップします。

50台ふり事務所の私たちのために私たちは、 サーバーの処理4フル最大1サーバの電源を可能性が大きく我々の処理、あるいは、我々は100の代わりに、 日あたりのジョブ400を処理することができます。

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

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

テクノロジー

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

  • アイドルオフィスのマシン(スペア古いWindows XPのラップトップ私の場合)
  • VirtualBoxの(または別の仮想化クライアントソフトウェア)
  • マシンを指定してPHPを仮想的なダウンOSのカットを実行しているrunningÂは、MySQL、私がサーバーをリンプだ呼び出すこれらの私:)
  • ジョブを実行するには
  • Job Serverは(どこか別の仮想マシンすることができます)

典型的なジョブ

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

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

だから、基本的に我々はデータベースの検索、いくつかの数字の計算は、ビジネス環境ではかなり一般的なシナリオの混合物を必要とするジョブを実行して見ている。

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

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

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

  • ジョブ構成は、ジョブ制御システムを設定する
  • 適切な処理の仮想マシンを作成する
  • どのように設定するには、Windowsマシン上のシステム
  • の確保は、最新のコードとデータを使用している
  • 展開とベンチマーク
  • 今後

私は([OK]を私が構築し、これを書いている)Windows XPおよび私の'GridMachine'仮想マシンを使用して、ローカルマシン上の概念をテストするためにサンプルアプリケーションを構築することがあります。 私の仕事の管理サーバーが実行される私のメインマシンがするFedora 11の

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

次回

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

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

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

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

ジョブの送信結果

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

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

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

概要

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

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

次回

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

使用して仮想環境を計算オフィスグリッド-第5部

スティーブンロイドワトキン 、金曜日2009年12月4日11時03分

はじめに

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

第4部私たちはロジックと情報ビジネス最新の見て、日付のアップ、常にように得られた結果はデータソースで使用して、ツールをバージョンのコードが最新のように、私たちがしている実行している。

デプロイ前

システムをグリッドの前に展開するお使いのシステムの現在のOne場合があることかと、1つのベンチマークのことだけで、それは! あなたの保証は何もないし、これをバックアップする数字を持っている限り、あなたのシステムが何をするつもりはどのくらい余分な作業についての同僚を伝えるかに関係なく。 だから、

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

また、追加の質問があります:

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

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

展開

私の提案は、セットアップとインストールのすべてのオフィスは週末を実行するように開くに。 休日の二週間か、これを直前ではなく、 結果は...多分CHAPを貧しい人々 、他の残しように対処すると ...

このようなシステムの展開が遅くする必要があります。 それは比較的全体オフィスのインフラストラクチャを(よくデジタル一)に影響するこのシステムを設定するにはシンプルであるにもかかわらず。 まず、どのように労働者のホストが日常的に実行するネットワークトラフィックを監視し、同時にマシンのカップルにロールアウト。 あなたの結果に応じてあなたの仕事の設定を変更する必要があります。

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

すべての時間は、ベンチマークの維持ではすべての展開が行われた後でも。 新しいコードのアップデートは、すべての労働者はジョブの処理および報告しているチェックは、システムの速度をどのように影響するか確認してください。 ゆっくりと(非常にゆっくりと)増加あなたの仕事の構成は、あなたの労働者とネットワークを最大限に活用する。

ストップ!

どのようないくつかの時間で動作しているから労働者を停止したい場合は? 彼らはすべてのアウトが、再生、実行していると空腹昆虫のようにデータを処理するために最善をしようとしている。 答えは明らかにその価値が見過ごされ、念のために追加するかもしれません。 単に出口(0)または死ぬ()または処理ジョブを殺すためにいくつかの他のステートメントを使用して処理スクリプトを編集します。 重要な理由は、なぜ我々は常に実行する前に、最新の処理スクリプトを更新してみて!

デモンストレーションシステム

ために私は技術や方法論を示すために、非常に小さなグリッドを作成短い記事のセットを作成する。 私は、記事、チュートリアルの多くを読んで、セットアップに様々なツールを使用し、何が起こっているか監視します。 手段は私が行っていることで、トラフィックとオフィス全体を飽和も私は、ホストのパフォーマンスが影響を受けた方法を参照してください定期的に職員のPCへのアクセスがあった。

私のデモシステムは確かに非常に謙虚だった。 私は通常のデスクトップは、ジ​​ョブ制御サーバとして設定され使用されます。 これについて私がインストールされていたMySQLのレプリケーションでマスタとして設定されてインストールされているサーバーを、 PHPの 、Âと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は、この)場所を取る彼らは朝のコーヒーをつかむには、この(便利な時間の認識していた提供更新!)。

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

結論/評価

次の明白な手順では、実際に現実世界での例を取得することです、オフィス環境の中でこのようなシステムを展開して、何が起こるか見て起動します。 技術を証明する証跡燃える会社と有効性をせずに、このことを約束し、事業をお願い少し難しいかもしれません。 グリッド/分散コンピューティングは、非常に普及しているいくつかの円であり、(BIONCは、SETI @ Homeは、折り畳みアットホームなど)いくつかの大規模なアプリケーションを持っています。 しかし私は、小規模、そのオフィス環境の中で展開されることができず、私の検索でこのような単純なシステムを見つけるには、しませんでした。

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

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

私は、あなたがこのシリーズの記事を読んで楽しんできた願っ事務所グリッドシステムを実行しているのあなたに思考の糧を与えられます。 解決策は、必ずしもすべての状況では動作しませんが、独自のソリューションを使用して行う処理データを取得できるように適応する必要がありますここで紹介する。

私には一切コメント、修正、または改善を送信すること自由に感じなさい、私が一致するように更新この記事を維持するために最善を尽くします。













パノラマテーマ別 Themocracy

6人オンライン中
3名様、3ボット、0人のメンバー
今日の最大の訪問者は:12 06:16 UTCに午前
今月:22 2011年8月6日12時半は、UTCの午前
今年:130 28-03-2011 22:40 UTCに
すべての時間:130 28-03-2011 22:40 UTCに