19

この質問は、Redis と一緒にZeroMQなどのメッセージング ソフトウェアを使用することについて、いくつかの言及 (この など) に出くわしたときに発生しますが、Redis 自体がメッセージング システムを使用しているという話をよく耳にします。では、Redis が他のメッセージング システムと一緒に使用される場合、Redis が単独でメッセージング システムとして使用される場合に深刻な欠陥があることを意味するのでしょうか?

キャッシングと pub/sub に Redis を使用することは明らかですが、JMS、AMQP、ZeroMQ などの本格的なメッセージング システムの代わりにRedis を使用できるかどうかは明確ではありません。
標準準拠の側面はそのままにして、機能/機能のみに集中すると、Redis はメッセージング システムに必要なすべてのメッセージング パターン/モデルをサポートしますか?

私が話しているメッセージングパターンは次のとおりです。

  1. RPC/Request-reply ( ActiveMQ/JMS を使用しとRabbitMQ/AMQP を使用した例)
  2. パイプライン/ワーク キュー (各メッセージの最大 1 回の消費)
  3. 放送(チャンネル登録者全員)
  4. マルチキャスト (コンシューマーのセレクターに基づくサーバーでのメッセージのフィルタリング)
  5. 他のメッセージング パターンはありますか?

はいの場合、Redis は、キャッシングとメッセージングという 2 つの (おそらくそれ以上の) 側面を同時に解決しているようです。

Java/Java EE サーバーに支えられた Web アプリケーションのコンテキストでこれを見ています。私はこれを、概念実証の観点からではなく、大規模なソフトウェア開発の観点から見ています。

Edit1:
user:791406 が有効な質問をしました:

「redis がこれらのパターンをサポートしているかどうかなど、誰が気にしますか? redis は SLA と QoS のニーズを満たしますか?」

この詳細は、コメント セクションではなく、質問の一部として提供する方がよいと思いました。

私の現在のニーズは、SLA や QOS とはあまり関係がなく、将来、要件が (合理的に) 増大した場合でも使用できる、自分の仕事 (メッセージング) 用のツールを選択することに関係しています。最初は単純な要件から始めていますが、要件が大きくなる傾向があることは誰もが知っています。いいえ、私はそれをすべて行う 1 つのツールを探しているわけではありません。ActiveMQ/RabbitMQ のように、Redis がメッセージング システムから期待される通常の要件を満たしているかどうかを知りたいだけです。もちろん、私の SLA/QOS のニーズが極端で偏心している場合は、それを満たすための特別なツールを入手する必要があります。例: 場合によっては、特定の SLA 要件により、RabbitMQ よりも ZeroMQ を選択できます。私はそのような特別な要件について話しているのではありません。私は平均的な企業の要件に焦点を当てています。

redis は、今日のメッセージング ニーズの基本的なツールとして使用できますが、将来の実際のメッセージング ジョブには不適切なツールになる可能性があるのではないかと (私のわずかな理解に基づいて) 心配していました。私は ActiveMQ/RabbitMQ のようなメッセージング システムの経験があり、単純なものから (合理的に) 複雑なメッセージング ニーズに使用できることを知っています。

編集2

  1. redis の Web サイトには、「Redis はメッセージング サーバーとしてよく使用される」と記載されていますが、メッセージング パターンを実現する方法は明確ではありません。

  2. Salvatore sanfilippo は、 Redis ユーザーは、Redis をデータベース、メッセージング バス、またはキャッシュとして使用する傾向があると述べています。それが「メッセージバス」としてどの程度機能するかは明らかではありません。

  3. redis がサポートしていない JMS のメッセージング要件を見つけようとしていたときに、Redis はサポートしているが JMS がサポートしていないものに出くわしました。特定のパターンに一致するチャネル名。

結論

メッセージングのニーズには JMS を使用し、キャッシングには Redis を使用することにしました。

4

1 に答える 1

18

あなたは何を必要としていますか?

「自分のアプリケーションをサポートするには、どのような品質のメッセージングが必要か?」という質問を自問する必要があると思います。メッセージング プラットフォームを決定する前に。redis がこれらのパターンをサポートしているかどうかは誰にもわかりません。redis は SLA と QoS のニーズを満たしますか? まずそこに焦点を当て、次にその評価に基づいてテクノロジーに関する決定を下してください。

そうは言っても、あなたがその決定を下す方法について私の意見を提供します...

高い信頼性/永続性/耐久性のあるメッセージング
極端な例を考えてみましょう: 取引または金融アプリケーションを構築しているとしましょう。このようなアプリケーションでは、メッセージの永続性、信頼性、1 回限りの配信、および耐久性が最優先される厳格な SLA が要求されます。この場合のメッセージング バックボーンとして redis を使用することはおそらく悪い選択です。理由はたくさんあります...

  • メッセージの再配信 (sh*t がファンに当たったとき)
  • redis がダウンしたときのメッセージ ストアのレプリケーション
  • メッセージ トランザクション (redis は XA を実行できません)
  • プロデューサー/サブスクライバーの耐障害性と切断回復力
  • メッセージの順序付け
  • ブローカーがダウンしているときにメッセージを送信する (ストア アンド フォワード)
  • シングルスレッドの redis がボトルネックになる可能性がある

システムに厳密な SLA がある場合、これらの問題の一部またはすべてが確実に発生するので、これらの制限をどのように処理しますか? 一部の問題に対処するために redis にカスタム コードを実装することはできますが、ActiveMq、WebsphereMQ、WebLogic JMS などの成熟したメッセージング プラットフォームが永続性、信頼性、および耐障害性を提供​​しているのに、わざわざ気にする必要はありません。あなたは Java/Java EE スタックを使用していると述べたので、オープン ソースまたは商用の、利用可能な最も堅牢なメッセージング フレームワークのいくつかを使用する立場にあります。金融取引を行っている場合は、これらのオプションを検討する必要があります。

高性能/大規模分散システム メッセージング
信頼性よりもパフォーマンスが必要なソーシャル ネットワークまたはゲーム プラットフォームを構築している場合は、ZeroMq が最適です。これは、メッセージングのような API でラップされたソケット通信ライブラリです。分散型 (ブローカーなし) で、非常に高速で、回復力が高く、フォールト トレラントです。ブローカー仲介、フロー制御、メッセージ永続性、またはポイントツーポイント同期を使用した N 対 N の pub/sub などを実行する必要がある場合、ZeroMq は必要な機能とコード サンプルを提供し、最小限のコードですべてを実行することを回避します。ゼロからソリューションを構築します。C で書かれていますが、ほぼすべての一般的な言語のクライアント ライブラリがあります。

それが役立つことを願っています...

于 2013-05-15T18:26:48.263 に答える