10

PHP でバッチ プロセッサを作成する場合 (明らかに cron 化する必要があります)、Gearman を使用することと、処理するデータを単に Redis に保存することの実際的な違いは何ですか?

これまでの私の観察では、Gearman はリアルタイムで作業をプッシュできますが、PHP コードは一定の間隔でしか実行されないため、定期的にスケジュールされたコマンドを Redis で使用することは、多かれ少なかれ同等のように思えます。

さらに、Gearman を使用すると、アプリが Gearman ライブラリのディスパッチ ライフサイクルにバインドされるため、アプリが不必要に複雑になるようです。

以上のことから、バッチ プロセッサが常に実行されていないことを考えると、Gearman+PHP は Redis+PHP よりも利点がないと仮定するのは正しいでしょうか?

4

2 に答える 2

19

Gearman は分散ジョブ サーバーであり、Redis は分散ストアです。つまり、リンゴとオレンジを比較するようなものです。

現在、Gearman のような機能を Redis で実装することができます (たとえば、リスト データ型に基づく) が、それは自前のアプローチです。原則は単純ですが、悪魔は細部に宿ります。

最適な Redis 分散キューの実装は、Ruby (Resque) と Python (Celery、RQ) 向けです。PHP 用の Resque のポートがあります。

https://github.com/chrisboulton/php-resque

Gearman を Redis ベースの実装と比較する際に考慮すべき重要な点があります。

  • Gearman ジョブはクライアントに完了を通知し、同期または非同期にすることができます。特定のものを実装しない場合、Redis キューは完了通知のない非同期ジョブのみをサポートします。

  • ブローカーの高可用性。Gearman は既製の戦略を提案します。Redis はそうではありません。マスター/スレーブ レプリケーションを構成し、Redis Sentinel を使用することはできますが、Redis HA は単純な問題ではありません。

  • 持続性。Gearman はインメモリ キューをサポートしていますが、いくつかの永続的なバックエンド (MySQL、Drizzle、sqlite、PostgreSQL) もサポートしています。Redis はさまざまな永続化オプションを提案していますが、MySQL や PostgreSQL のようなトランザクション エンジンほど信頼できるものはありません。

  • 垂直方向のスケーラビリティ。Redis は非常に効率的ですが、シングルスレッドのプロセスです。Gearmand はマルチスレッド プロセスであり、おそらくより適切にスケーリングできます (単一のプロセスを考慮すると)。

Redis ベースの分散ジョブ システムを実装するのは楽しく興味深いものですが、すぐに機能するものが必要な場合は、Gearman が最適です。

于 2013-08-16T16:26:28.833 に答える
4

Didier の回答に加えて、Gearman は合体機能を提供することもできます。たとえば、ワーカーがジョブを完了する前に多数のクライアントがすべて同じ要求を行った場合、作業の応答をすべてのクライアントに送り返すことができます。

ウィキペディアから:

ギアマンはクライアントから送られてきた作品を合体させます。2 つ以上のクライアントが、同じブロックが送信されていることを確認するか、クライアントから送信された一意の値を使用して、同じ作業本体で作業を完了するように要求した場合、1 つのワーカーのみが実行されるように作業を結合します。使用済み。これは、キャッシュ ヒットの失敗によくある群れの問題を回避するために特に行われます。

これを Redis で実装するには、はるかに複雑になります。

于 2014-10-09T19:12:45.343 に答える