メッセージキューの概念、原則、使用シナリオの詳細な紹介 (ケース付き)
ご存知のとおり、Web サイトをデザインする際には、ユーザーへの「グループ テキスト メッセージ」、「注文システムの大量のログ」、「フラッシュ セールのデザイン」などに遭遇することになります。サーバーはこれらを処理できません。この種の瞬間的な圧力のバーストには、システムを正常かつ効果的に使用するために「メッセージ キュー」の助けが必要です。この記事では主にメッセージ キューの概念について学習します。
主に次の知識を理解します。
1. キューとは何か、キューで何ができるのか?
2. アライメントの適用シナリオは何ですか?
3. キューを使用してサービスを分離するにはどうすればよいですか?
4. Redis キューを使用して高圧を解消するにはどうすればよいですか?
5.プロフェッショナルアライメントシステムRabbitMQの使い方は?
主な内容を要約すると次のとおりです。
@メッセージキューの概念、原理、シナリオ
@デカップリングケース: キュー処理順序システムと配信システム
@トラフィック ピークの削減事例: Redis のリスト型でフラッシュ セールスを実現
@RabbitMQ: よりプロフェッショナルなメッセージ システム実装ソリューション
1.メッセージ キューについて
1.1 メッセージ キューの概念
本質的に、メッセージ キューはキュー構造を持つミドルウェアです。つまり、メッセージはこのミドルウェアに入力された後、直接返されることができます。 . システムはすぐに処理する必要はありませんが、別のプログラムがデータを読み取り、順番に 1 つずつ処理します。
つまり、処理結果をすぐに返す必要がない、同時並行性が高くて時間がかかるような事態が発生した場合、メッセージキューを使用することでそのような問題を解決できます。
1.2 コア構造
ビジネス システムによってメッセージをエンキューし、メッセージを 1 つずつメッセージ キューに挿入し、挿入後に成功結果を直接返します。将来的には、メッセージ システム内のレコードを 1 つずつ取り出して処理し、デキュー処理を完了するメッセージ処理システムが登場する予定です。
1.3 適用シナリオ
データの冗長性: たとえば、注文システムでは、将来的に厳密なデータ変換と記録が必要になりますが、メッセージ キューはこれらのデータをキューに永続的に保存できます。次に注文があり、後続の処理プログラムがそれを取得し、後続の処理が完了した後、各レコードが処理できるようにするためにレコードが削除されます。
システムの分離: メッセージ システムを使用した後は、エンキュー システムとデキュー システムが分離されます。つまり、ある日クラッシュする限り、他のシステムの通常の動作には影響しません。
トラフィックのピークの削減: たとえば、フラッシュ セールやラッシュ セールでは、メッセージ キューをキャッシュと組み合わせて使用できます。これにより、瞬間的なアクセス量に効果的に耐え、サーバーが過負荷になってクラッシュが発生するのを防ぐことができます。
非同期通信: メッセージ自体をキューに入れてから直接返すことができます。
スケーラビリティ: たとえば、注文キューは注文を処理するだけでなく、他のビジネスでも使用できます。
ソート保証: データが特定の順序で処理されることを保証するために、シングルインとシングルアウトなど、一部のシナリオは製品の順序で処理する必要があります。メッセージ キューを使用することができます。
上記はメッセージ キューの一般的な使用シナリオですが、もちろんメッセージ キューは単なるミドルウェアであり、他の製品と組み合わせて使用することができます。
#1.4 一般的なキュー実装の長所と短所キュー媒体1. mysql などのデータベース (高信頼性、実装が簡単、低速)2、redis などのキャッシュ (単一のメッセージ パッケージが大きすぎると高速、効率が低い)#3、rabbitMq などのメッセージ システム (高度に専門的で信頼性が高く、学習コストが高い)
メッセージ処理トリガーメカニズム
1. 無限ループ読み取り: 実装は簡単ですが、障害が発生した場合は時間内に回復できません; (フラッシュセール、より集中化された、一元化された運用と保守に適しています)
2. スケジュールされたタスク: 圧力は均等に分散され、処理の上限があり、現在一般的な処理トリガー メカニズムです。 (唯一の欠点は、間隔とデータに注意する必要があることです。前のタスクが完了せずに次のタスクが再開されるまで待たないでください)
3. デーモン プロセス: php- に似ています。 fpm と php-cg、シェルの基礎が必要
2. 分離ケース: キュー処理「Order System」と「Distribution System」注文プロセスについては、「注文システム」と「配送システム」の 2 つのシステムを設計できます。オンライン ショッピングで誰もが目にしたことがあるはずです。注文を送信した後、背景で私の商品が配送されているのがわかります。このとき、「配信システム」が関与する必要があります。
「注文システム」と「配送システム」を一緒に設計してアーキテクチャを行う場合、いくつかの問題が発生します まず、注文システムの場合、システムへの負荷が比較的高くなります。しかし、「流通システム」は必ずしもこれらの圧力に即座に対応する必要はありません。
第二に、注文システムが故障した後に配送システムが故障することは望ましくありません。これは、両方のシステムの通常の動作に同時に影響を与えることになります。したがって、私たちはこれら 2 つのシステムを分離したいと考えています。 2 つのシステムが分離された後は、中間の「キュー テーブル」を介して 2 つのシステム間で通信できるようになります。
2.1 アーキテクチャ設計
1. まず、注文システムがユーザーの注文を受け取り、注文を処理します。
2. これらの注文情報はキュー テーブルに書き込まれます。このキュー テーブルは 2 つのシステム間の通信の鍵となります。
3. 分散システムによって定期的に実行されるプログラムは、処理のためにキュー テーブルを読み取ります。
4. 配信システムによる処理後、処理されたレコードにマークが付けられます。
2.2 プログラムの流れ
3. トラフィックピーククリッピングの事例: Redis のリスト型でフラッシュセールを実現
redis メモリに基づいているため、速度が非常に速くなります。Redis は耐久性があるため、データベースを補完するのに非常に適しています。Redis は定期的にデータをハードディスクに書き込むため、停電を心配する必要はありません。この点において、 , それは別のキャッシュ memcache よりも多くの利点があります. さらに、redis は 5 つのデータ型 (文字列、二重リンク リスト、ハッシュ、セット、順序付きセット) を提供します 一般的に、フラッシュ セールを行う場合、Redis は良い選択です。ケース、急ぎの購入、行列が必要なケースがすぐにあなたのケースよりも高くなる場合。 3.1 redisのデータ型のリスト型redisのリストは二重リンクリストであり、先頭または末尾からデータを追加することができます。 * LPUSH/LPUSHX: (/existing) リストの先頭に値を挿入します。 * RPUSH/RPUSHX: (/existing) リストの末尾に値を挿入します * LPOP: リストの最初の要素を削除して取得します。 * RPOP: リストの最後の要素を削除して取得します。 * LTRIM: 要素を指定された範囲に保持します。3.2 アーキテクチャ設計シンプルな構造のフラッシュキルプログラム設計です。* LLEN: リストの長さを取得します * LSET: リスト要素の値をインデックスで設定します * LINDEX: リスト内の要素をインデックスで取得します * LRANGE: リストの指定範囲内の要素を取得します
4. RabbitMQ
ここでは、RabbitMQ のいくつかの使用法について説明します まず、以前フラッシュ セールのケースについて話したときに、ロックの仕組みについて説明しました。他のプログラムが同じレコードを処理するのを防ぎます。システム アーキテクチャが非常に複雑な場合、複数のプログラムがリアルタイムでキューを読み取っているか、1 つ以上のキューを同時に操作する複数の送信プログラムがあり、これらのプログラムが必要になることさえあります。プログラムを別のマシンに配布する場合、redis キューの使用はやや不十分です。この時点で何をすべきでしょうか? 問題をより適切に解決できる、より専門的なメッセージ キュー システムを導入する必要があります。 4.1 RabbitMQ のアーキテクチャと原則ワーク キュー
これにより、プロデューサーとコンシューマー間の分離が解決されるだけでなく、コンシューマーとタスクの共有が可能になり、サーバーへの負荷が軽減されます。
5. 概要
上記は主に、メッセージ キューの概念、原則、シナリオを学習することに焦点を当てています。ケースを分離し、RabbitMQ の簡単な使用法を理解します。
6. 質問
redis とメッセージ サーバーの選択の最大の違いは何ですか。
私の理解では、Redis はリクエストを 1 つずつ処理します。Redis はシングル スレッドです。メッセージ サーバーの IO 実装とは異なります。1 つは同期で、もう 1 つは非同期ですが、Redis は同期ブロッキングを使用します。メッセージ サーバー 非同期ノンブロッキングを使用します。
Redis 関連の知識の詳細については、Redis 使用法チュートリアル 列をご覧ください。
以上がメッセージキューの概念、原則、使用シナリオの詳細な紹介 (ケース付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。
