6

Railsアプリケーション内のAwsSqsをポーリングするスクリプトをどこに置くべきかについて混乱しています。

Webアプリ内でスレッドを使用する場合、おそらくCPUサイクルを使用してこのキューを永久にリッスンし、パフォーマンスに影響を与えます。

また、Herokuワーカーのdynoを1つ予約すると、月額$34.50かかります。単一のキューの投票にこの価格を支払うのは理にかなっていますか?それとも、それにワーカーを使用するのではないのですか?

スクリプトコード:

内容:変換されたPDFを聞きます応答を取得し、オブジェクトをpostgresデータベースに作成します。

  queue = AWS::SQS::Queue.new(SQSADDR['my_queue'])    
  queue.poll do |msg|
     ...
     id = received_message['document_id']
     @document = Document.find(id)
     @document.converted_at = Time.now
     ...
  end

私は助けが必要です!!ありがとう

4

1 に答える 1

4

3つの基本的なオプションがあります。

  1. ワーカーダイノの一部としてバックグラウンド作業を行います。これが最も適切なものであるため、これは最も簡単で最も簡単なオプションです。Webプロセスは着信HTTPリクエストを処理し、ワーカープロセスはSQSメッセージを処理します。終わり。
  2. Webダイノの一部としてバックグラウンド作業を行います。これは、別のスレッドを起動すること(およびRailsで発生する可能性のある問題に対処すること)を意味forkする場合もあれば、サブプロセスにバックグラウンド処理を実行させることを意味する場合もあります。何が起こっても、dynoが消費するRAMの512 MBの制限に注意してください。また、Web dynoは1つしかないと想定しているため、dynoのアイドリングはアプリが24時間365日実行されていない可能性があることに注意してください。また、このオプションは一般的に12ファクターのアプリの精神に反しているため、悪臭がします。
  3. バックグラウンド作業を1回限りのプロセスとして実行します。たとえばrake handle_sqs、キュ​​ーを処理し、キューが空になると終了するタスクを作成します。Herokuスケジューラが理想的です。20分ごとに1回程度実行してください。1回限りのdynoは、実行されている限り料金を支払いますが、キューが空の場合は数秒しかかからないため、常時稼働のワーカーよりもコストが低くなります。または、WebアプリでHeroku APIを使用して、同等のをプログラムで実行する1回限りのプロセスを起動することもできますheroku run rake handle_sqs
于 2012-11-28T16:22:59.237 に答える