0

Heroku に REST サーバーがあります。REST サービス用の N-dyno とワーカー用の N-dyno があります。

基本的に、私はいくつかの長期にわたる休息リクエストを持っています。これらが入ってきたら、ワーカーの 1 つに委任し、クライアントにリダイレクトを与えて操作をポーリングし、最終的に操作の結果を返したいと考えています。

これには、RedisToGo の JEDIS/REDIS を使用します。私が知る限り、これを行うには2つの方法があります。

  1. PUB/SUB 機能を使用できます。パブリッシャーに作業結果の一意の ID を作成してもらい、これらをリダイレクト URI で REST クライアントに返します。
  2. 基本的には同じですが、PUB/SUB の代わりに RPUSH/BLPOP を使用します。

1位のメリットがよくわかりません。たとえば、LongMathOperation というタスクがある場合、このリストを単純に作成できるように思えます。リスト要素は、算術演算の引数と、結果を配置する場所として REST サーバーによって生成された UUID を持つ JSON オブジェクトです。次に、すべてのワーカー dyno が BLPOP 呼び出しをブロックするだけで、最初の dyno がジョブを取得して処理し、UUID のキーを使用して結果を REDIS に入れます。

わかる?だから私の質問は、「PUB/SUB を使用する方がこれより優れているのはなぜですか?」ということです。PUB/SUB は、私が見逃していることをここでテーブルにもたらしますか?

ありがとう!

4

1 に答える 1

0

pubsub メッセージは永続的ではないため、リストも使用します。サブスクライバーがいない場合、メッセージは失われます。つまり、何らかの理由でリッスンしているワーカーがいない場合、クライアントは適切にサービスを受けられません。一方、リストは永続的です。しかし、明らかに同じ理由で、pubsub はリストほど多くのメモリを消費しません: 保存するものは何もありません。

于 2013-06-13T19:39:45.080 に答える