カテゴリ:記事

仮想環境を使用して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

はじめ

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

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

配置前

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

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

追加質問もあります。

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

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

展開

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

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

いったんシステムが再び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に良いでしょう- 。少なくとも認証とそれ以降の標準にそのために私はすぐにサインアップするだろう。

HTMLテーブルの生成クラス(HtmlTable.php)

によって 、火曜日2009年5月5日21:11

私はからHTMLテーブルを生成するために必要なPHP 、私が働いていたことがプロジェクトのためのデータ。 残念なことにGoogleを少し後に私は本当に私は自分自身を作成することを決めたように適していた何かを見つけることができませんでした。

私はこれが史上最高のテーブルを生成するクラスではないかもしれないし、そこにいくつかのバグがまだおそらくだが、私は共有し、誰もがより良いバージョンを望んでいる場合、私はそれに見ていきます好むだろうことを認識:)私は元々作成したいと思ったテーブルは別々のオブジェクトなどのセルのオブジェクト、行オブジェクト(セルのオブジェクトで構築された)の構築が、私はこの上のオーバーヘッドを実現したらすごい! だから私は、アレイの設定に戻って行ってきた。

クラスは、ヘッダー、フッター、または体内で使用される列の最大数を計算し、列のその番号を書き出します。 ヘッダ、フッタ、およびキャプションはオプションです。 属性はキー属性名とその値が属性値である配列で構成されています。 属性は、テーブルタグ(表の作成で - クラスの初期化)に適用され、テーブル行(配列[行] [属性])、および表のセル(配列[行] [列] [属性])これは、ヘッダー、フッター、およびに適用されるテーブルのボディ。

私はいつも何かを見て最善の方法はそうここに私達は行くの例を使用することです見つける:

 $表=新しいHTMLテーブル(配列('クラス'=>'ソート"、
                 'スタイル'=>'幅:550px ;'));
 $ヘッダ[0] [0] ['コンテンツ'] ='ID';
 $ヘッダ[0] [1] ['コンテンツ'] ='タイトル';
 $ヘッダ[0] [2] ['コンテンツ'] ='日';
 $ヘッダ[0] [3] ['コンテンツ'] ='サイト';

 $テーブル - > AddHeaderは($ヘッダ);
 $ I = 0;
 foreachの($ $ NewsItemのAS newsList){
 $ itemLink ="{$ NewsItemの['タイトル']}";
 $ tableBody [$ i]は=配列(0 =>配列(の'content'=> $ NewsItemの['id']を、
 "属性の'=>配列('スタイル'=>'フォントの太さ:太字;')),
 1 =>配列(の'content'=> $ itemLink)、
 2 =>配列(の'content'=> $ NewsItemの['date_posted'])、
 3 =>配列(の'content'=> $ NewsItemの['サイト']));
 $ i + +は;
 }
 $テーブル - > addBody($ tableBody);
 ()テーブル - > drawTable $をエコー。
ID タイトル サイト
9 ニュース1 2009年4月4日午前10時40分00秒 サイト名
10 ニュース2 2009年4月4日12時44分11秒 サイト名

そしてHTMLは次のようになります。

  =  "sortable" style =  "width: 550px;" > < テーブルの クラス ="並べ替え可能な" スタイル ="幅:550px;">
 <THEAD>
	 <TR    >
		 <     > ID </ TH> 
  <     >タイトル</ TH>
		 <     >日付</ TH>
		 <     >サイト</ TH>
 </ TR>
 </ THEAD>
 <TBODY>
	 <TR    >
		 =  "font-weight: bold;" >9</ td > <TDの スタイル ="フォントの太さ:太字;"> 9 </ TD> 
		 <TD    >ニュース1 </ TD> <TD    > 2009年4月4日10時40分00秒</ TD> <TD    > < tr >サイト名</ TD> </ TR> <TR    = "font-weight: bold;" >10</ td > < td > <TDの スタイル ="フォントの太さ:太字;"> 10 </ TD> <TD    >ニュース2 </ TD> 
  <TD    > 2009年4月4日12時四十分00秒</ TD>
		 <TD    >サイト名</ TD>
 </ TR> 
  </ TBODY>
 </ TABLE> 

コー​​ドは

HtmlTable.php
何かコメントがある場合と、下にそれらを取っておいてください、それはいくつかの話を聞くのは素晴らしいことです。 あなたがそれを使用して終了した場合も、私が知っていると私は将来的に拡張していきますができます。)

Zend Frameworkを使用してDBにログインします。

によって 、火曜日2009年4月14日21:06

私はサイトを作って使用して実行する管理したZend Frameworkの 、すべてが放火魔/ FirePHPにうまくログインしているので、次のステップは、DBにログインすることでした。 私はまた、ユーザーエージェント、日付と時間、取得し、変数を投稿するなどのフレームワークを使用していくつかの追加情報をログに記録したいと考えていました。 のでマニュアルを拡張するために少しはここに私がやったことです:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

定義$ a = array('優先'=>'優先度'、columnMapping
'メッセージ'=>'メッセージ'、
"日時は、'=>'タイムスタンプ'、
=>'項目user_agent'user_agentの"、
"get_vars'=>'get_vars"、
"post_vars'=>'post_vars"、
"サイト"=>"サイト"
);

$ writerDb =新しいZend_Log_Writer_Db($ dbは、"error_logging"、$ columnMapping);
$ロガー=新しいZend_Logは($ writerDb);

$ロガー - > setEventItem('日時'、日付("YMD H:私:s'の));
$ロガー - > setEventItem('user_agentの"、$ _SERVER ['HTTP_USER_AGENT']);
$ロガー - > setEventItem('get_vars"、しますprint_r($ _GET、真の));
$ロガー - > setEventItem('post_vars"、しますprint_r($ _POST、真));
$ロガー - > setEventItem("サイト"、サイト);

$ logger -> info('通知メッセージ');

ここで、$ columnMappingで配列のキーは、私の列名です。 "優先度"と"メッセージ"によって理解されているZend_Log_Writersが、追加のフィールドは私にいくつかの追加情報を提供するために追加されました。

明らかにこれは、最初に他の作家のいずれかを使用して作業をロギングしていることを前提としています。)

英国の名前のディレクトリおよびFacebookのアプリケーション

によって 、金曜日2009年4月10日9:33

私はTracesmartのために働いて、一方に関与してきた楽しいことの一つは、 名前のディレクトリ 基本的に私たちは膨大な情報のデータベースを取り、さまざまな名前についての統計の大きな杭を引き抜いた。

プロセスは、サイトへより多くのトラフィックを描画するために、すべて一つの大きなSEOの努力ですが、それはまた、いくつかの興味深い情報と名前の統計を提供します。

ここに私の名前の例ですロイドワトキンは 、または私はもっと正確に考えますスティーブンワトキンを までに時間がかかる自分の名前をルックアップ Tracesmartサイトで、面白いかもしれません。)

我々はまた、上の名前の統計データを持っている名前のディレクトリ名を検索し、どのように最近されているかどうかを通知するページ。 その彼らがニュースに表示されるときに有名な人の名前が統計を飛ぶわかり、非常におもしろい。 最近の例ですとリーアムニーソン 、明らかに人々はスペル(故にこの名前でヒットの巨大な数字)でかなり右ではないが、最近ではスキー事故で死亡した妻の- リアムニルソン

Facebookのアプリケーション

後は名前のディレクトリが作成された我々は、作成に着手したFacebookアプリケーション我々はduely'という名前の私の名前を "。 Facebookアプリケーションの拡張子である名前のディレクトリといくつかの追加の統計を提供します。 Facebookのアカウントに名前のディレクトリを追加するためにアクセスしてください。

http://apps.facebook.com/my-name/

フォームフィールドが提出されていない無効になって...

によって 、木曜日2008年9月4日11:01

簡単なメモとして、現在進行中の一環として、 不動産代理店ソフトウェアのプロジェクト私は、システム内の日付のエントリを編集するために戻って行ってきた。 今ではなく、ユーザーがテキストの任意の古いビットを入力することができますから、私はに切り替えてJavascriptの日付/時刻ピッカー 、ユーザーがポップアップウインドウから、日付と時刻"を選択"することができます(短期用)。

ユーザーがクリックしたときに今、私の古いシステマ用ピッカーがポップアップする入力フィールド しかしこれは、ユーザーがテキストフ​​ィールドを無視できるようになると、まだ移動して、フィールドに、古いものを入力します。 これは理想的ではなかった。 ので、私の解決策は、"することだった無効にフォームフィールドを"と入れスパンをして、その隣のonclick日付/時刻ピッカーを呼び出してイベント。 これは、日付が正しい形式(つまり、まだ検証する必要があるが!)とで行くことに、ユーザーが、ほぼ良い日付/時刻ピッカーを使用してに強制されたことを意味した。

だから私はそれらをピックアップしようとしているフォームとピッキングを介して自分のきれいにフォーマットされた日付と時刻(s)を渡し始めたPHP$ _GETまたは$ _POSTの変数。 Unfortunately'disabled"フィールドは、フォームの送信を通過されていません これは非常に迷惑だった。 解決策は、フォームを使用して送信された時にJavaScriptを使用して、入力要素を有効にしていたのonSubmitイベントを。

これは、フォームデータが必要に応じて通過され、うまく検証するための準備がフォーマットされていることを意味... Âを

検索配列のキーとリターン一致

によって 、水曜日2008年8月13日16:26

私は配列を検索し、検索用語に一致するキーを持つ要素を返すために必要としています。 だから私は共有したいと思った。

"W HYは私がこれを必要とするだろう?"おそらく、私は項目の大きさに関係するすべての要素の配列を検索したい場合も、聞いてみる最初の質問になるし、私がして、適切なキーを抜くことができるこの小さな関数を使用して:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

私は、ディメンションデータの項目データの配列を検索したいのであれば例えば、私は(そしておそらく画面に印刷)次のようにすることができます。

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

それはのように返されます。

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

Pleskとカスタムphp.iniの

によって 、水曜日2008年8月13日15:53

我々は持っている専用サーバーukFast我々は数を実行するÂ ドメインで実行中の仮想サーバ上に存在するPleskを とにかく、私は警告を隠し、セキュリティのためにログファイルにエラーを保持する私のドメインのほとんどに、しかし、私のドメインのいくつか(そのような私が開発しているものなど)で私はすべて少し厄介な警告とエラーがそれを表示したい表示されます。

私は私の編集した場合はPHP > php.iniを。INIを"幾つかのサイトは完全にバージョンを生きている場合は特に、これはサーバではなく、良いアイデアで一人ひとりのドメインに影響を与える Âそこでこれを回避するためには、ファイルと呼ばれる配置する必要がありますvhosts.confを例えば、あなたのconfディレクトリに、 /var/www/vhosts/<my_domain>/conf/vhost.conf

したら、私は、含まれているサンプルのために再度、あなたが追加するコードを追加しました

 php_value error_reporting E_ALL php_value display_errors On 

次のコマンドを実行して、続いて(これはすべてのドメインを再構成し、そのわずか より速い ドメイン名を入力するよりラジアー

 # /usr/local/psa/admin/bin/websrvmng -a 

あなたが少し軽快してみたいなら、あなたは常に、である完全なバージョンを入力できます。

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

あなたがファイルをhttpd.includeに見れば、このコマンドの後に、、あなたのhttpd.includeがvhost.confファイルのインクルード行を持っていることをこのように表示されます。

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












パノラマのテーマ別 Themocracy

オンラインで現在8訪問者
4名様、4ボット、0メンバー
最大の訪問者今日:6時54分午前UTCに17
今月:18-08-2011午前6時54時17 UTC午前
今年:28-03-2011 22:40 UTCで130
すべての時間:28-03-2011 22:40 UTCで130