実際の問題
私は、mongoidを介してRails3.0.4とMongoDBを使用しています。
@mailgunを使用してメールを配信しています。バルク(ニュースレターなど)とトランザクション(アカウントのアクティブ化、パスワードを忘れたなど)の両方の電子メールを送信します。現在、私はこれらのメールを配信するために単一のドメイン(メールガン側の単一のキューに変換されます)を使用しています。大量のメールがすでにキューに入れられていて、誰かが新しいパスワードを登録または要求すると、問題が発生します。トランザクションメールをバルクメールの前に配信したいのですが、mailgunキューはFIFOベースで機能します。
これを軽減する方法は、バルクメールとトランザクションメールに異なるドメイン(したがって、同時に処理できる異なるキュー)を使用することです。Railsでは、SMTP設定は、リクエストレベルの設定ではなく、アプリケーションレベルの設定です。したがって、SMTP設定ごとに異なる環境を使用することにしました。
私はメール用のキューシステムも持っており、それを処理するためにdelayed_jobを使用しています。delayd_jobでバルクメールとトランザクションメールを区別する方法がわかりません。そこで、キューシステムをrescue+redisまたはbeanstalked+stalkerのいずれかに移動することにしました。この場合、キューにタグを付けて、特定のキューのみを処理するようにワーカーに要求できます。
質問
保守が簡単で、リソースをほとんど必要とせず、拡張性に優れたものが必要です。
- delayd_jobを使用すると、他のサーバーを実行して監視する必要がありません。
- delayd_jobの場合、ラックスペースで256MBのスライスを使用していましたが、redisとストーカーにはresqueまたはbeanstalkdのいずれかの別のサーバーが必要でした。
- スケーリングについてはわかりませんが、アプリがリリースされてから2か月目になり、すでに3万通以上のメールを送信しています。
delayd_jobからredisまたはstalkerに移植する代わりの方法があれば、私に知らせてください。
アップデート:
delayd_jobも名前付きキューをサポートしているようですが、まだ文書化されていません。ドキュメントを追加するためにチケットを開くと、それらの使用方法がわかれば、詳細が更新されます:)