PHPプロジェクトで使用するMQ(メッセージキュー)の概要。 パート1

メインの仕事と並行して、「バックグラウンド」でゲームプロジェクトのアーキテクチャの実装を検討し、検討します(私の興味と仕事の主な分野はオンラインブラウザゲームの作成です)。 最近、メッセージキュー(MQまたはメッセージキュー)に基づいてメインゲームサーバーを実装することは興味深いとの考えにますます戻りつつあります。 つまり、このようなゲームのエンジンは、非同期メッセージを介して互いに通信するコンポーネントのセットになり、各コンポーネントはメッセージジェネレーターまたはサブスクライバー、つまり他のメッセージを実行できます。



私が理解しているように、このアプローチはJavaの世界で広く使用されています。これにはJava Message Service( JMS )標準があり、メッセージブローカーが使用されます。これがApache ServiceMixなどのエンタープライズサービスバス( ESB )アーキテクチャの基礎です。 しかし、私たちにとってこれは依然として大規模なプロジェクトの高い範囲であり、WebおよびWeb指向アプリケーションの仕様では、同様のことができるかどうかを検討しますが、低コストで、アプリケーションにフォールトトレランス、負荷分散、非同期処理を提供します。 そしてもちろん、これをすべてのサーバーコンポーネントの実装の主要言語としてPHPで実装することが非常に望ましいです。



そして、もう一度-MQ、これはコンポーネント間でメッセージを収集、保存、ルーティング(配布)するアーキテクチャとミドルウェアです。 完全な説明のふりをすることはなく、おそらく多くのニュアンスを考慮に入れないため、私の定義を公理と見なさないでください。MQのアーキテクチャをより深く理解したい場合は、追加の文献を読むことをお勧めします(たとえば、これらの記事:[ 1 ]、 [ 2 ]、[ 3 ])およびウィキペディアの定義- メッセージキュー



今のところ、どの通信システム実装システムが存在するか、そして最も重要なこととして、それらのうちのどれが私のプロジェクトの仕様の基礎と見なすことができるか、非常に簡単に、概要を見てみましょう。 また、PHPの実装のみを検討するつもりでしたが、「より深く掘り下げる」必要があることがわかったため、PHPアプリケーションとやり取りできる他の言語のシステムにも触れます。



Apache ActiveMQは、Message BrokerとEnterprise Integration Patternsのオープンな実装です(非常に簡単な場合は、ルールに従って追加処理を実装するための拡張機能です)。 私の意見では、このプロジェクトは、すべてのオープンで、最も強力で開発中の、最近リリースされたバージョン5.1です。 多くの標準を実装し、エンタープライズレベルのソリューションに必要なすべての機能を提供し、Apache Javaテクノロジースタックの一部です。 私が興味を持ったのは、言語間のメッセージングの可能性でした。つまり、クライアントはどの言語でも実装できます。 Java、C、C ++、C# プラットフォームの場合、MQへのネイティブアクセスのためのWireプロトコルを実装するOpenWireライブラリであり、PHPを含む他の言語のために、 Stomp-メッセージをフォーマットに変換するさまざまなスクリプト言語用のライブラリの実装がありますJMS ところで、安全な通信とメッセージングを確保する必要がある場合は、SSLを使用できます。



MQS(ミニマリストキューサービス)は、いわば反対側のプロジェクトです。 これは、XML-RPCプロトコルを使用してメッセージキューシステムを編成するPerlで書かれた小さなシステムです。メッセージ自体は、任意のデータベースまたはファイルに保存できます。 残念なことに、サイトの最新ニュースの日付は2005年4月であり、現在のバージョンは0.0.14であるため、プロジェクトはおそらく中止されます。



Spreadはメッセージキューの別の実装であり、今回はC ++であり、Win32、Linux、BSD、MacOSなどのさまざまなプラットフォーム向けのバージョンがあります。 現在のバージョンは4.0です。 このシステムは、多くの顧客とそれに応じたメッセージが存在する高性能システムに分散され、焦点を合わせています。 最新の4.0バージョンであるVirtual Synchronyテクノロジーでのサポートの宣言。 興味深いのは、いくつかのプラットフォーム(C / C ++、Java、Perl、Python、Ruby)の組み込みインターフェイスに加えて、いくつかのプラットフォームのバイナリバージョンがすぐに配信に含まれることです。 4番目のP-PHPがなく、その中に何もないことは奇妙ですが、PECLにはSpread API全体を実装する拡張機能があります。 現在のバージョンは2.1で非常に新しいため、プロジェクトは開発中です。 組み込みのインターフェースの代替を含む他の言語の実装がありますので、 こちらリストをご覧ください 。MSExcelの拡張もあります。 興味深いプロジェクトには、 Apachemod_log_spreadモジュールあります。これにより、複数のWebサーバーからアクセスログを収集できます。



RabbitMQは、オープンテレコムプラットフォームに基づいたErlangで記述された高性能プラットフォームです。つまり、通信アプリケーションやその他の同様のシステムでよく使用される、非常に信頼性が高くスケーラブルなシステムです。 JavaおよびC ++専用のインターフェースがあります。 システムはAMQP( メッセージングミドルウェアのオープンスタンダード)をサポートしています 。 システムはおもしろいです。Erlangだけが知っていますが、このプラットフォームでサーバーモジュール全体を設計すると、多くの「グッズ」が得られることがわかります。特に、最も人気のあるejabberd Jabberサーバーは同じプラットフォームで作成されます。オンラインゲームプロジェクトに適用する。



Beanstalkdは、Facebookソーシャルネットワーク用のアプリケーションの1つ(ネットワークではなくアプリケーション)の開発の一環として作成された興味深いプロジェクトでもあります。 これは、ジョブキューを保存および処理するための専用サーバーであり、メモリ内のデータストレージを使用して速度を確保しますが、フォールトトレランスを犠牲にします。 このプロジェクトは、前述のMemcacheQと非常によく似ており、開発者自身がmemcachedの作成者にアーキテクチャとプロトコルの原則を感謝しています。 システムは、電子メールの送信、バックグラウンド処理など、即時の応答を必要としないカスタムタスクハンドラーの非同期キューを作成するように設計されています。 Erlang、OCaml、Perl、PHP、Python、Rubyなどのさまざまな言語用のクライアントAPIがあります 。 PHPの場合、ライブラリはここにあり、バージョン0.11がありますが、開発自体はほんの数か月前に始まりました(プロジェクトの登録によって判断します)。 Beanstalk Messaging Queueは、高速で提供されるCで書かれていますが、RAMにすべてのデータを保存するという点でのプロジェクトの詳細は、追加のソフトウェアとコストがかかる場合でも、最大のフォールトトレランスが緊急に必要な領域には適していませんデータベースにデータを保存します。



今のところすべてです。 しかし、PHPについてはどうでしょうか。 説明されているソリューションはサードパーティのプラットフォームに基づいていますが、PHPアプリケーションとの通信を提供するライブラリがあります。 しかし、この種のアプリケーションにはネイティブのPHPソリューションがあり、もちろん完全な類似物ではありません。ここでは、PHP環境の仕様がすでに影響を及ぼしますが、多くのアプリケーション分野には十分です。 この資料の続きで、このような決定についてお話しします。



All Articles