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

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

Nov 23, 2019 pm 05:02 PM
php 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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

なぜPHPを使用するのですか?利点と利点が説明されました なぜPHPを使用するのですか?利点と利点が説明されました Apr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHP対Python:ユースケースとアプリケーション PHP対Python:ユースケースとアプリケーション Apr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

PHP:サーバー側のスクリプト言語の紹介 PHP:サーバー側のスクリプト言語の紹介 Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査します PHPとWeb:その長期的な影響を調査します Apr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

See all articles