ホームページ >バックエンド開発 >PHPチュートリアル >PHP の同時マルチプロセス処理のための強力なツールである Gearman の使用の概要、gearman_PHP チュートリアル
職場では、同時に複数のサーバーにデータを公開したり、複数のタスクを同時に処理したりする必要がある状況に遭遇することがあります。同じ時間です。 PHP のcurl_multiメソッドを使用してリクエストを同時に処理できますが、ネットワーク、データ、さまざまなサーバーの条件により、この同時処理の応答時間は非常に遅くなります。これは、同時リクエストのプロセスにはログの記録やデータの処理も含まれるためです。 、などのロジックでは、処理結果を待ってから戻るため、バックグラウンド操作のエクスペリエンスをフレンドリーに満たすことができません。
Gearman を使用して同時実行要件を達成する別のソリューションがあります。クライアント経由でGearmanのジョブにリクエストを送信し、各Workでcurl_multi、データ処理、ロギングなどの操作を行うと同時に、スーパーバイザを使用してGearmanとWorksのプロセスを監視し、並列マルチプロセスを実現します。負荷分散計画を実現できます。
Gearman ができること:
非同期処理:画像処理、注文処理、バッチメール/通知など
高いCPUやメモリを必要とする処理:大容量データ処理、MapReduce操作、ログ集計、動画エンコード
分散並列処理
スケジュールされた処理: 増分更新、データ コピー
レート制限された FIFO 処理
分散システム監視タスク
ギアマンの動作原理:
Gearman を使用するアプリケーションは通常、クライアント、ワーカー、タスク サーバーの 3 つの部分で構成されます。クライアントの役割は、ジョブ タスクを提案し、それをジョブ サーバー タスク サーバーに引き渡すことです。 Job Server は、タスクを完了するために適切な Worker を探します。ワーカーはクライアントから送信されたジョブを実行し、ジョブ サーバーを通じて結果をクライアントに返します。 Gearman はクライアント API とワーカー API を提供し、アプリケーションはこれらの API を使用して Gearman Job Server と通信できます。 Gearman 内のクライアントとワーカー間の通信は、TCP 接続を通じて行われます。
Gearman は、作業のワークロードをさまざまなマシンに分散できます。
インストール:
コードをコピーします コードは次のとおりです:
rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm
yum install -y gearmand
開始:
ギアマンド -d
PHP Gearman 拡張機能をインストールします
インストールには pcel を使用します。ソース コード パッケージをダウンロードしてコンパイルしてインストールすることもできますが、最初に libgearman と re2c をインストールすることを忘れないでください。そうしないと、拡張機能のコンパイルとインストールでエラーが発生します。
pecl install gearman #失敗してバージョンの問題が表示される場合は、pecl install gearman-1.0.3 を試すことができます。デフォルトは 1.1.2 のようです
コンパイルとインストールも非常に簡単です
コードをコピーします コードは次のとおりです:
wget -c http://pecl.php.net/get/gearman-1.1.1.tgz
tar zxvf gearman-1.1.1.tgz
ぴぴせ
./configure
作成&&作成インストール
echo "extension=gearman.so" >> /etc/php.ini
PHPインターフェース関数
Gearman は、GearmanClient、GearmanJob、GearmanTask、GearmanWorker など、多くの完全な拡張機能を提供します。詳細については、公式 PHP マニュアルを確認してください。
これは公式に提供されているサンプルの 1 つであり、同時分散タスク処理の非常に良い例です
リーリー
リーリー
3つの端末でgearman_work.phpを実行してみました
リーリー
コードをコピーします コードは次のとおりです:
取得中...
ユーザー情報の取得: 3.03 秒:
string(59) "リクエストしたユーザー (joe@joe.com) の身長は 7 フィートで、素晴らしいです"
string(56) "ユーザー (joe@joe.com) は Kevin Bacon から 1 度離れています"
string(43) "ユーザー (joe@joe.com) には投稿がありません。申し訳ありません!"
実際の運用環境では、ギアマンドとワークプロセスが予期せず終了していないことを監視するために、スーパーバイザーツールを使用できます。