検索
ホームページデータベースRedisメッセージキューの概念、原則、使用シナリオの詳細な紹介 (ケース付き)

メッセージキューの概念、原則、使用シナリオの詳細な紹介 (ケース付き)

ご存知のとおり、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: 要素を指定された範囲に保持します。

* LLEN: リストの長さを取得します

* LSET: リスト要素の値をインデックスで設定します

* LINDEX: リスト内の要素をインデックスで取得します

* LRANGE: リストの指定範囲内の要素を取得します

3.2 アーキテクチャ設計

シンプルな構造のフラッシュキルプログラム設計です。

#1. まず、フラッシュ セールに参加したユーザーを記録し、その時間を記録します。

2. ユーザーの ID を Redis リストに保存し、キューに入れます。最初の 10 ユーザーのみが正常に参加できると規定されている場合、リストの数が十分な場合は、データを追加し続けることはできません。この方法では、redis リストの長さは 10

3 のみになります。最後に、データへの負荷を軽減するために、redis 内のデータをデータベースにゆっくりと書き込みます。

3.3 コード レベルデザイン

1. ユーザーがフラッシュ セールを開始するとき、フラッシュ セール プログラムのリクエスト (uid、time_stamp) を Redis に書き込みます。

2. フラッシュセールで10人までしか成功できないと規定されている場合、Redisに保存されているデータの長さを確認し、上限を超えている場合は直接破棄してください。完成しました。

3. 最後に、Redis に保存されている 10 個のデータが無限ループで処理され、その後データがゆっくりフェッチされて mysql データベースに保存されます。

フラッシュセール領域ではデータベースへの負荷が特に高く、そのような設計をしないとMySQLの書き込みボトルネックが発生します。 Redis でキュー リストを使用し、フラッシュ セール リクエストを Redis に入力します。最後に、ウェアハウス プログラムを通じてデータをデータベースにゆっくりと書き込みます。このようにして、トラフィックのバランスが取れ、mysql には影響しません。 。 プレッシャーが強すぎる。

4. RabbitMQ

ここでは、RabbitMQ のいくつかの使用法について説明します まず、以前フラッシュ セールのケースについて話したときに、ロックの仕組みについて説明しました。他のプログラムが同じレコードを処理するのを防ぎます。システム アーキテクチャが非常に複雑な場合、複数のプログラムがリアルタイムでキューを読み取っているか、1 つ以上のキューを同時に操作する複数の送信プログラムがあり、これらのプログラムが必要になることさえあります。プログラムを別のマシンに配布する場合、redis キューの使用はやや不十分です。この時点で何をすべきでしょうか? 問題をより適切に解決できる、より専門的なメッセージ キュー システムを導入する必要があります。

4.1 RabbitMQ のアーキテクチャと原則

機能: AMQP の完全な実装、クラスターの簡素化、永続性、クロスプラットフォーム

RabbitMQS の使用

1. RabbitMQ のインストール (rabbitmq-server、php-amqplib)

2. プロデューサーはメッセージ チャネルにメッセージを送信します

3. コンシューマーはメッセージを処理します

ワーク キュー

アイデア: プロデューサーはタスクをメッセージ システムに送信します。メッセージ システムはタスクをメッセージ キューにカプセル化し、複数のコンシューマーに対して同じキューを使用します。 # ##

これにより、プロデューサーとコンシューマー間の分離が解決されるだけでなく、コンシューマーとタスクの共有が可能になり、サーバーへの負荷が軽減されます。

5. 概要

上記は主に、メッセージ キューの概念、原則、シナリオを学習することに焦点を当てています。ケースを分離し、RabbitMQ の簡単な使用法を理解します。

6. 質問

redis とメッセージ サーバーの選択の最大の違いは何ですか。

私の理解では、Redis はリクエストを 1 つずつ処理します。Redis はシングル スレッドです。メッセージ サーバーの IO 実装とは異なります。1 つは同期で、もう 1 つは非同期ですが、Redis は同期ブロッキングを使用します。メッセージ サーバー 非同期ノンブロッキングを使用します。

Redis 関連の知識の詳細については、Redis 使用法チュートリアル 列をご覧ください。

以上がメッセージキューの概念、原則、使用シナリオの詳細な紹介 (ケース付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Apr 17, 2025 am 12:16 AM

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

Redis:データモデルと構造の調査Redis:データモデルと構造の調査Apr 16, 2025 am 12:09 AM

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン