カテゴリ:Webプログラミング

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

によって 、2010 0:13午前水曜日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(真の);
     }
 }

サイトマップを迅速かつ容易に使用して生成することができます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();
    
    	    場合($ブートストラップ=の$ this -> getActionController()
    	                        - > getInvokeArg("ブートストラップ")){
    
    	         configの$ = $ストラップ - >はgetOptions();
    
    	        場合(どうかの判断(の$ config [$モジュール] ['リソース'] ['レイアウト'] ['layoutPath'])){
    	             $ layoutPath =
    	                  configの$ [$モジュール] ['リソース'] ['レイアウト'] ['layoutPath'];
    	            の$ this -> getActionController()
    	                  - >にgetHelper('レイアウト')
    	                  - > setLayoutPath($ layoutPath);
    	         }
        	 }
         }
     } 
  3. そして最後にブートストラップアクションヘルパーを:
      ...
         / **
          *モジュール単位でのレイアウトのスクリプトを設定します
          * /
        保護機能_initLayoutHelper()
    	 {
    	    の$ this ->ブートストラップ('frontController');
    	     $レイアウト= Zend_Controller_Action_HelperBroker::addHelper(
    	        新しいPro_Controller_Action_Helper_SetLayoutPath());
    	 }
     ... 

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

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

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

自分のスキーマにYAMLファイルだけで次の手順を実行します。

メッセージ:
   actAsの:
     Timestampable:
      作成:
        名前:はcreated_at
        タイプ:タイムスタンプ
        形式:YMD H:I:S
      更新日:
        名前:LAST_UPDATED
        タイプ:タイムスタンプ
        形式:YMD H:I:S
  カラム:
     ID:
      タイプ:整数
      一次:真
      自動インクリメント:真
    名前:文字列(255)
    メールアドレス:文字列(300)
    メッセージ:文字列(2000)

一方、あなたが`updated_at`カラムをしたくない場合は、次を使用することができます。

メッセージ:
   actAsの:
     Timestampable:
      作成:
        名前:はcreated_at
        タイプ:タイムスタンプ
        形式:YMD H:I:S
      更新日:
        障害者:真
  カラム:
     ID:
      タイプ:整数
      一次:真
      自動インクリメント:真
    名前:文字列(255)
    メールアドレス:文字列(300)
    メッセージ:文字列(2000)

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

によって日(火)2009年12月29日22:02

私が読んできたHead Firstデザインパターンを 最近、私自身の利益のためにPHPの例としていくつかのパターンを書き込むことにしました。 私がコードすることを決定したので最初のものは、 Observerパターン Observerパターンの正式な定義は次のとおりです。

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

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

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

仮想環境を使用して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のグリッドコンピューティング-パート3

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

はじめ

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

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

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

プロセスの次のステップは、仮想の労働者を設定することです。 このために私はVirtualBoxを使用してCentOSのインストールを使用するつもりだ。 私はインストールするつもりのmySQLPHPを (私はその名前が作られていることがあります )また、LIMP(リチウム木の実、M ySQL、P HP)として知られている、サーバー上ServerAを。

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

ない点はそこに偉大なチュートリアルの1,000のはおそらくあると私はこれに行くがない(:OK、ここで一つだVirtualBoxの下で作成およびManaging CentOSの仮想マシン )。 私が思う注意すべき重要な点は、私は私の仮想マシンがGridMachineということです。

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

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

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

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

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

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

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

  1. プロセスのリストを取得し、'PHP'のためにこれをgrepする。 見つからない場合は、続行。
  2. あなたの仕事のコードを呼び出す、私のケースでは、これはベースに何かのPHPのようになります
  3. 労働者のスクリプトは、その実行を完了
  4. 次の適切な呼び出しに再び移動する準備

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

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

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

注:エコーのはほぼ完全に無意味ですが、それらを試してみて、編集するためにやってきて次の人を助けるかもしれない。

それは、労働者の仮想マシンから、素早くシンプルな、と受け取られているハードウェアのそれぞれの新しい部分にコピーする簡単な設定は終わりです。 グリッドシステムの"賢さ"は実際に可視化OS、ジョブを処理するために作成したコードでは何をするそのすべて、ジョブの設定で、とするとき、すなわち(適切なホストがアイドル状態のときにジョブが実行されることを確認することではない)。

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

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

  "C:\プログラムファイル\日\ VirtualBoxの\ VBoxManage.exe"startvm GridMachine 

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

  "C:\プログラムファイル\日\ VirtualBoxの\ VBoxHeadless.exe"- startvm GridMachine - VRDP =オフ 

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

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

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

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

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

最終的にそれは時間のX量を実行されている場合の状態は、タスクを停止するオプションがチェックを外すが、マシンがアイドル状態になっていた場合は、タスクを停止するオプションにチェックを入れてください。

のスケジュール

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

まとめ

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

次の時間

第4部私たちは、あなたが得た結果は常に最新のビジネス情報とロジックとのup - to - dateであるように、コードとデータソースの最新バージョンを実行していることを確認するためのツールを使って見ることになります。

仮想環境を使用して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サーバから当社の処理能力を高めることができる、または、400日あたりのジョブの代わりに100を処理している可能性があります。

通知は、 新しいハードウェアのない投資のためにあなたの会社はわずか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

はじめ

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

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

配置前

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

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

追加質問もあります。

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

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

展開

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

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

いったんシステムが数台のマシンのネットワークトラフィックとホストマシンを再度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とすべて同時にスケーラブルなオフィスのグリッドコンピューティングシステムを展開できることを示している。

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

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

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

Zend Frameworkの:基礎-レビュー

によって 、土曜日2009年11月28日22:42

私の雇用主が最近利用する私たちの開発者のグループのために支払われたZend Frameworkを:基礎コースを、ここで私は他人のためのコースで私の考えや意見を要約しておきます。 時間を節約するために探している人には、ここでは私の要約です:

を見て時間を持っていなかった開発者のためのZend Frameworkの重要な領域にあなたを紹介し、続くために十分な情報を与えるフレームワークの全体像を提供しています:このコース(基礎編Zend Frameworkを)。 フレームワークを見て時間を費やしているし、1つまたは2つのチュートリアルに従っている人のためにこのコースは非常に越えて提供されていません。

背景

私がしてきたPHP 5から6歳くらいの開発者、および過去6ヶ月の間にコンポーネントベースでのZend Frameworkで作業を開始して。 私が開発して/または小Zend Frameworkのカップルで開発してきたMVC正直なsites.Â、私はビューのコーディングのポイントから他のフレームワークへの曝露の膨大な量を持っていないが、いくつかの費やしている時間プロジェクトのウェブサイトを調査し、them.ÂのZend Frameworkを取り巻くフレームワークとコミュニティを評価するには、それは非常にエキサイティングであり、その行く場所に巨大な可能性があるように思われる。

コー​​スについて

コー​​スは(途中で10分休憩)9二時間のWebExセッションを介して配信されます。 時間はいつでも議論でのZendが提供するスライドのセットを通過費やされている。 あなたは、インストラクターと話をするマイクを使用することができますが、私は誰かがチャットウィンドウよりも多くのものを使用して見ていない正直に言うと。 さらに、VMWareのUbuntuマシンには、サンプルコードとプロジェクトは、Zend Studioの体験版をセットアップしたことを提供されています。 どちらかの統合されたVoIPソリューション人以上の参加者へのコースのリーダーは交渉するか、数字で多くの世界的なダイヤルのいずれかを使用してダイヤルすることができます。

コー​​スの中に材料がサンプルゲストブックアプリケーションに向かう前に、フレームワークの概要と、MVCパターンで構成されています。 議論は、ブートストラップ、Zend_Application、DBテーブル、データベースアクセス、フォーム、フィルタ、ACLは、基本的にあなたがするツールを与えることで実行されているすべての時間までの基本的なサイトを得るために必要と思うすべてのトピックをカバーするなど、など、検証実証行くと(これは時間の多くのウェブサイトを参照してください"をする金額をしなかったが)フレームワークで、より高度な取得。

時間は、いくつかの例をコーディングする、そして"ゲストブック"と、単純な"ウィキ"アプリケーションを開発するために与えられます。 個人的に私は、コードまたは各アプリケーションを提供し、本質的には本当に良い学習体験を提供しなかったと一緒にコピーしたものを開発するために私達に求めないと感じた。 私は同じようなアプリケーションを開発することが好ましいが、同一ではないであろう。 を参照するためにガイドを配置できるという利点を使用したサンプルアプリケーションへ。 またデモンストレーターでスクラッチからアプリケーションを構築することの可能性があるため、フレームワークのよりよい理解を与え、 その理由方法についてのより多くの質問につながったという、すべての後にはコースの後に詳細を調べることができます。

最後の講義は、講師からの助け/指針でウィキのアプリケーションで作業してから成っていた。 もちろんフィードバックが取られた後、それはZendが明らかにもちろん私たちのバージョンはかなり新しいいた実際には、非常に真剣にフィードバックがかかることにコースを数回強調した。 それはこれが起こっているかどうかを確認するために興味深いものになるので、会社で他の開発者の一部は、すぐにコースを取っされます。

もちろんスタイルは、参加者と講師の間にフィードバックとコラボレーションのために許可され、非公式いた。 コー​​スの指導者が友好的だった、親しみやすい(メールアドレスは質問のために共有された)、およびスライドから彼のプレゼンテーションをしながらする不安定なビットがフレームワークに完全に有能なようだった。 彼ははっきりとではなく、コースを教えるように教えている人より定期的にフレームワークを使用する人だった、私はその点で"現実世界"の経験が好き。

全体的なフィーリング

ある意味では私は、もちろん時間の無駄を発見した他のもので、それは非常に便利でした。 うまくいけば、私ははっきりと全体に渡って自分の理由を得るでしょう、そして多分(このような環境はほとんどない私を知っている!)思想または有益なフィードバックのためにいくつかの食品を提供しています。

自分のためにこのコースは低すぎるレベルを狙っていた。 クイックスタートガイドを経たこと、アクションのロブアレンのZend Frameworkを読んで、少し私は本当にあまり何も取得していないフレームワークで働いていた。 私は、クイックスタートの終わりからピックアップし、追加のスキルを開発するためのコースが好きだ。

とはいえ、コースのタイトルは明らかに状態が"Zend Framework: 基本 " 行い、その面でのコースはそれが何を定めたものを実現しています。 フレームワークに探すことに時間をかけることのない開発チームの他のメンバーは、熱意をもって各セッションを終えて、本当に見て良かったと質問をしていました。

すべてが失われていなかった、それはフレームワークの基本的な詳細を確認する時間を過ごすと、私は100%ではない分野でいくつか質問を聞いて取得するには良かった。 ):また、私は毎日座って、枠組みと将来のプロジェクト、私は(?あなたの会社がそのことに同意想像できる)の場合に実行することができていないのと何かを使ってコーディングを考えるようになったという時間でした。 最後になりましたがまた、あなたがコースを(電子メールではあるが)出席と言うことはZendのから素敵な証明書を取得します。

Zend Frameworkの認証

これはコースの中に心に来る保つ一つの疑問だった、それは認証のために私を準備ですか? 素早く、簡単には響きなしです。 コー​​スのインストラクターは、認定のためにあなたが本当に日常生活をフレームワークを使用して、非常に快適であり、その使い方や方法論に自信を持ってする必要があることを追加のアドバイスでその上で非常にはっきりしていた。

まとめ

私が上記の書いたことすべてを考えると、私は2つの簡単な箇条書きのすべてを要約しておきます。

  • Zend Frameworkの新機能:このコースは、あなたが期待するとおりのこと、それはあなたのフレームワークと、構築することができるから、基本的には良い接地についての素晴らしい紹介を与えます。 コー​​スは、開発者の間でフレームワークのための関心と熱意を生成するように思われる。
  • Zend Frameworkを使用:それはもちろん違うものを費やされて可能性を取るために私は時間、労力を感じた非常に基本のいくつか、そして資金を支えるためにいいものでしたが。 それは次のレベルに開発者を取るために新たな高いレベルのコースを作成SEEA Zendのに良いでしょう- 。少なくとも認証とそれ以降の標準にそのために私はすぐにサインアップするだろう。












パノラマのテーマ別 Themocracy

7訪問者今オンライン
4名様、3ボット、0メンバー
最大の訪問者今日:1時46分午前UTCで12
今月:19 01-10-2011午前7時01分(UTC)に
今年:28-03-2011 22:40 UTC少なくとも130
すべての時間:28-03-2011 22:40 UTC少なくとも130