まず、メッセージキューの特性
独立したサービス、普遍的な性質を持つメッセージ・キューは、それを行うにメッセージを配信するための上部アセンブリのビジネスモデルを考慮する必要がないが、通信によって定義されている上位層サービス仕様の異なるモジュールは、メッセージキューに依存しています。
FIFOは、配信が最初に到着本質的な違いやバッファにメッセージキューであることを確認します。
ユニバーサルメッセージキュー、メッセージの永続性と動的な追加や重要な基本特性の災害復旧機能をサポートしているノードの削除の組み立てのための災害復旧、。この機能は、ゲームサーバーアプリケーションのメッセージキューは必須ではないが、これはまた、アプリケーションシナリオに関連しているのほとんどのためであるもちろん、そのような持続的な需要は多くの時間がありません。
パフォーマンスは、システム全体の効率も向上します、メッセージのスループットは、インターコムキューに入れ、これは必要ありませんと言っています。
第二には、なぜメッセージキューが必要?
そのような「生産」と、システムの速度や安定性の要因で「消費」が表示されるなどの矛盾は、我々は双方の違いを埋めるために、抽象化層として、メッセージキューが必要な場合。「メッセージ」は、2台のコンピュータ間のデータ転送の単位です。メッセージは、テキスト文字列が含まれている、例えば、非常に単純なことができ、より複雑であってもよく、埋め込みオブジェクトが含まれていてもよいです。メッセージは、キュー「メッセージ・キュー」メッセージは、メッセージ送信プロセスにおいて容器に格納されているに送信されます。
いくつかの例
メッセージ1)業務システムは、SMSアプリケーションをトリガーするSMSモジュールが、ペースを保つことができませんでした、あなたは圧力をバッファリングし、それに対処するには遅すぎるスクラッチする必要があります。アプリケーションは、処理のためのメッセージキューで再とるメッセージに取ることができ、直接バックのユーザに成功メッセージ配信モジュールを投げSMSメッセージキューを送信することができます。
2)グループ保存ネットワーク及び不安定の他の要因は、に沿って送信された注文曲下より高いコスト、リモートシステム、およびので。
3)ベースのタスク処理システム、ユーザ第開始するメモリ内のメッセージキューにタスクを介して受信要求し、処理のためにキューから採取したアプリケーションタスクの複数の後端部を開きます。
第三に、どのようなメリットがメッセージキューを使用していますか?
3.1、システムの応答速度を向上させます
メッセージキュー、生産者のいずれかを使用して、キューの情事へのメッセージはすぐにユーザーへの応答を返すことができます。結果を待たずに。
結果を処理するユーザーは、単一の研究室を取るために、このような病院として、後に自分自身を選択することができます。、通知の結果を:なく、生産者(リッスンキューに参加する、またはそう生産者がリスナーインターフェースを実装すること電話番号を残すような)サブスクライブすることを可能にします。予告なしに、どこかになります同意を得ます。
3.2、システムの安定性を向上させます
アカウントへの電力供給システムの受注を、生産システムの場合にデータを送信します。電気の供給者と生産システム間のネットワークは、生産システムは、メンテナンスやその他の理由でサービスしていない可能性があり、落ちている可能性があります。あなたがメッセージキューを使用しない場合は、電気の供給システムデータは、ビジネスの発展に影響を与え、顧客が注文することができない、出て離します。これは、2つのシステム間の非常にタイトカップリングすべきではありません。これは、メッセージキューを介してデカップリングする必要があります。同時に、システムはより堅牢で安定します。
ピークからデカップリング、非同期
三点以上の実際を説明するために例を使用することができる - MMOゲームを想像して、複雑な論理シーン、戦闘、インタラクティブ及び他の外側の焦点に加えて、論理ノード内のすべての論理ノードが直接のMySQLに接続されて書き込まれないバッファ層またはORM人間の肉は、存在しません、だけでなく、戦いのSQL文のモジュールは、単に退屈だと思います。まず、この設計の欠点を考慮して配置されています。
メインのゲームロジックに直接カード、その後、内部同期が達成されている場合は、それがブラックボックスであると認識、論理ノード内のDb対話モジュールに結合された場合でも、IOの多くを持っているとの対話Dbの論理ノード、操作を保存するという理由だけで、プレイヤーはサーバーもオフにすることができ、廃棄されます。
その後、我々は1のためにそれを改善し、このモジュールは、論理ノード上のスレッドぶら下げを行うことができます。実際には、このフロントエンドモジュールと、このインタラクティブ論理ノードDbが元のメッセージキューの比較に基づいて説明します。これも欠点があり、その両方の計算集約タスク1が(ロジックプレイヤー)です。しかし、人はそれを展開し、ノードを取得し、集中的なIO(MySQLを書くための唯一の責任を読む)でありますそれは非常に面倒になり、結合度が高すぎます。例えば、今のシーンは、単一ノード上に置かれ、ボトルネックを発見し、サブノードシーンに応じて、これは他のシーンとそれをやり取りする方法をデータモジュールを掛け?
問題のピーク。分散システムでは、分散トランザクションを複数のノードに関連付けられ、各ノードは、トランザクション処理全体のボトルネック問題となるであろう。ある論理ノードとデータベースノード間のクッション、せずに、各操作はMMOのためにデータベースにアクセスする必要があり、ライン数百K負荷データのプレーヤー、ライン十分に提供10万選手はに従事するMySQLのノードの崩壊。直接的には、まだ比較的良好な結果をダウンさせる少なくともプレイヤーの前に、実際にログイン通常のゲームを上がることができた場合、プレイヤーは上戻っていないログオンします。しかし残念ながら、人気のC10K引数の開始前に十年が話している:同時アップの量後に、連鎖反応を引き起こします、同時多数の直接MySQLのノードハングアップしませんが、スループット低下し、Aをスピードを遅くします悪循環に選手のリクエスト処理時間はあきらめて再試行するプレーヤーを引き起こして、あまりにも長いので、しかし、バックエンドのために、すべての廃棄物の資源の消費の前に選手の方法。
だから、このシナリオでは、論理ノードとノードDBとの間のノードとの間のバッファは、当然のことです。実際には、このキャッシュノードは、多くの場合、より複雑なメッセージキューノードとして見ることができます。
第四に、なぜ必要性、分散のために?
4.1、分散型マルチシステムコラボレーションニーズ
複数のシステム間で共有データへのデータメッセージキューのニーズは値を演じます。分散通信機構、調整機構を設ける必要があります。
4.2、単一のデプロイメント環境は、分散システムが必要です
内部には、障害、主にクラスタ環境の単一の点を避けるために、パフォーマンスを向上させるためのシステムを発券します。クラスタ環境では、JVM複数のサーバで実行している複数のアプリケーション、データは、データベースまたはデータベースのさまざまなタイプの複数のノードに格納されています。マルチノード・コラボレーションのニーズを満たすために、分散液を提供する必要があります。
V.は何の問題アドレスへの環境ニーズを分散しましたか?
5.1、並行性の問題
優れた同時実行制御の必要性。ていることを確認し、「スレッドセーフ。」二回出荷するためであることが表示されません。お客様は、単一のAの下に表示されない、Bの出荷台数は、顧客やその他の事情に送信しました。
5.2、シンプルな、統一された操作機構
単純な定義、意味明確な、無関係なビジネス、適切なを必要と統一されたアクセスを確保します。
5.3フォールトトレランス
データのセキュリティを確保するために、単一障害点を制御します。
5.4、横方向に拡張することができます
簡単に拡張。
第六に、どのように達成するために?
キャリアを準備するには多すぎる、あまりにも多くの成熟したメッセージキューイングミドルウェア製品群。実績のある成熟した製品、インタフェース仕様、スケーラビリティ。
アカウントに技術的なルート、開発者やその他の事情を考慮し、環境要因の原因、原因組織のプロセスの不動産、実際のShiyun魏の配慮と組み合わせます。