ホームページ > バックエンド開発 > PHPチュートリアル > 分散タスク分散フレームワーク Gearman チュートリアルと PHP 実装例

分散タスク分散フレームワーク Gearman チュートリアルと PHP 実装例

WBOY
リリース: 2016-06-20 12:39:03
オリジナル
982 人が閲覧しました

出典: http://blog.csdn.net//clh604/article/details/19706827


1. Gearman の導入と使用シナリオ

Gearman は、Hadoop と比較してタスク分散機能に重点を置いた、タスクを分散するためのプログラム フレームワークです。タスクの分散は非常にシンプルで、スクリプトだけで完了できるほどシンプルです。 Gearman は元々、LiveJournal の画像サイズ変更機能に使用されていました。画像のサイズ変更は大量のコンピューティング リソースを消費するため、タスクの完了後にフロントエンドに戻って実行するようにスケジュールする必要があります。それをインターフェースに提示します。



通常、多言語と複数システムの統合は大きな問題になります。このような統合の問題に対処するには WebService の方法を使用しますが、RPC スタイルや REST スタイルなど、どのスタイルの WebService を使用する場合でも、WebService 自体にはある程度の複雑さが伴います。それに比べて、Gearman は同様の機能を実現でき、よりシンプルで使いやすいです。


Gearman リクエストの処理には、クライアント -> ジョブ -> の 3 つの役割が含まれます。


クライアント: リクエストのイニシエーター (C、PHP、Perl、MySQL UDF など)。
ジョブ: リクエスト スケジューラは、クライアントによって発行されたリクエストを調整し、適切なワークに転送する責任があります。
ワーカー: C、PHP、Perl などのリクエスト ハンドラー。


クライアントとワーカーは同じ言語の使用に限定されないため、複数の言語とシステム間の統合に役立ちます。


ワーカーを追加しても、アプリケーションの分散負荷分散アーキテクチャを簡単に実装できます。


2. Gearman ジョブ配布サーバーのインストール

Gearman サーバーとライブラリをインストールします:
wget http://launchpad.net/gearmand /trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
sudo make
sudo make install

途中でいくつかの問題が発生する可能性があります:
./configure の場合、ライブラリが不足している可能性があります。通常、2 つの開発パッケージ libevent と uuid が欠落しています。 。 。

sudo apt-get install libevent-dev
sudo apt-get install uuid-dev

インストール完了後にインストールを再構成し、
sudo ldconfig

3. Gearman クライアントとワーカーの PHP 実装例

Gearman PHP 拡張機能をインストールします:
wget http://pecl.php.net/get/gearman-0.4.0。 🎜> tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
sudo make
sudo make install

middle 考えられる問題:
phpize コマンドが見つかりません。phpize は php 開発パッケージに含まれているため、最初に php5-dev をインストールする必要があります

sudo apt-get install php5-dev

インストール後つまり、ソース コード ディレクトリで phpize を実行して、関連するインストール構成情報を生成し、次の ./configure などを実行できます。

make install 後、生成された Gearman が保存されているディレクトリが表示されます。そうです。

必要に応じて、対応する PHP の拡張機能ディレクトリに移動します (デフォルトでシステムにインストールされた PHP を直接使用するため、拡張機能内に自動生成されます)


次の変更php.ini PHP にモジュールをロードさせるには:
php --ini

php.ini の場所を確認し、sudo vim で変更し、

extension = "gearman.so"
次に、クライアントとワーカーの作成を開始します

client.php

[php]

プレーン コピーを表示します

  • $client= new GearmanClient();
  • $client->addServer("127.0.0.1 " , 4730);
  • print $client->do("title", "Linvo");
  • print "/n";
  • ?>
  • worker.php

    [php]

    プレーンコピーを表示

  • $worker= new GearmanWorker();
  • $worker->addServer("127.0.0.1", 4730); worker->addFunction("title", "title_function");
  • while (true){
  • $worker->work();
  • if ($ this->worker->returnCode() != GEARMAN_SUCCESS) {
  • //Gearman ステータス エラーにはログ記録または例外処理が必要です
  • }

    }
  • function title_function($job)
  • {
  • $str = $job->workload();
  • return strlen($str); 🎜> }
  • ?>
  • 準備作業が完了し、テストが開始されました
  • 1. ジョブを開始します
  • gearmand -d
    2. ワーカーを開始します
    php -c /etc/php5/apache2/php.ini worker.php

    3. クライアントを開始します (新しいターミナルで開きます)
    php -c /etc /php5/apache2 /php.ini client.php

    画面には文字列「5」の長さが表示されます

    ここで、説明が必要な点がいくつかあります。
    1. php cli モードで直接実行します。 -c パラメーターを追加して php.ini 設定ファイルをロードし、gearman 拡張機能
    をロードします。 2. ワーカーを 1 つのデーモン プロセス (CLI モード) および複数のデーモン プロセスにする必要があります。を開くことができるので、クライアントが開始したタスクがそれぞれのワーカーに分散されます。 (自動負荷分散) を実行するには
    この例は単純すぎるため、複数のワーカーを起動しても効果はわかりません。そのうちの 1 つを終了すると、システムが自動的に他のワーカーに切り替わって通常の実行を継続することがわかります
    3. 同様に、複数のクライアントを開くこともできます (モデルについては以前のログを参照してください)

    4. 同時に、単一障害点を避けるために複数のジョブを開くこともできます






    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート