2

私はフォーラム/Q&Aコミュニティベースのアプリケーションの構築の最後にいます。電子メール通知を追加したいと思います。アプリには、スレッド、質問、プロジェクト、写真など、いくつかの異なるエンティティがあります。目標は、ユーザーがこれらのエンティティをいくつでも「サブスクライブ」し、エンティティが新しいコメントやアクティビティを受信するたびに電子メールをキューに入れることです。この機能は、Facebookやフォーラムと非常によく似ています。

ActionMailer(rakeタスクと遅延ジョブを含む)、MailChimp API(およびプラグイン)、およびその他のアプリメーラー(PostageAppPostmark)を調べました。

メモリの占有とサーバーの過負荷に関する潜在的な問題のため、私はActionMailerに傾倒しています。アプリはHerokuで実行されますが、サーバーが数分ごとに数百通のメールを送信することに簡単に圧倒される可能性があります。

もう1つの複雑さは、ユーザーの好みに基づいて、さまざまなタイプのサブスクリプション(即時の電子メール通知、毎日の電子メール通知)が存在することです。

このような機能のために電子メールを管理するための最良の方法は何でしょうか?ヒント/アイデアは大歓迎です!

4

2 に答える 2

2

ActionMailerを使用して、SendGridまたは消印で送信できます。PostageAppはまだSMTPサーバーを必要とし、追加の依存関係を追加しますが、持っていると便利です。MailChimpはニュースレター専用だと私は信じているので、ここではおそらくあまり役​​に立たないでしょう。

ここで大まかな概要を説明すると、いくつか重要なことがあります。

  1. メーラーロジックがコントローラーを乱雑にしないようにします。
  2. ユーザー要求への応答の遅延を防ぎます。
  3. 「アプリケーションの過負荷」の問題を回避します。
  4. イベントベースの定期的な電子メールを処理します。

#1に対処するには、オブザーバーを使用して、イベントベースの電子メールを送信するタイミングを決定する必要があります。#2と#3を説明するために、DelayedJobをドロップして、電子メールがバックグラウンドで送信されるようにすることができます。HerokuでActionMailerを使用してSendGridを非常に簡単に使用できます(特にPonyにドロップした場合)。#4の場合、オブザーバーのようにDJタスクと同じように、誰に電子メールを送信するかを決定し、送信ジョブをキューに入れるというビジネスロジックを処理するrakeタスクを作成する必要があります。

明確にするために、DelayedJobは別のプロセスでジョブを実行します。Herokuの場合、実際には各DelayedJobワーカーを異なるDynoで実行しています。これは、完全に別個のスタック/環境です(おそらく別の物理サーバー上にあります)。もちろん、データベースがジョブの追加に追いつかない場合を除いて、この方法でアプリが過負荷になる問題はありません(この場合、代わりにRedisをDJストアとして使用できます)。必要に応じてDJワーカーを追加することで、簡単に水平方向にスケーリングできます。

于 2011-04-14T01:10:05.107 に答える
0

クラウドベースのバックグラウンド処理/ワーカーキューであるSimpleWorkerを見てください。

これはHerokuのアドオンであり、スケールアップおよびスケールアウトして、一連の1回限りの投稿またはスケジュールされた電子メールを処理できます。(たとえば、マスタージョブをスケジュールして、実行のスケジュールが外れると、スケールアウトされたインフラストラクチャ全体で同時に実行するために、数十、数百、数千のジョブをキューに入れます。)

Herokuワーカーは、別々のプロセスとして実行されるため、正常に動作できますが、負荷が変動する場合は、ジョブごとにスケールアップおよびスケールダウンできるサービスが必要です。したがって、a)未使用の容量を支払う必要はありません。b )バーストトラフィックとバッチ出力を処理できます。

(開示:私は会社で働いています。)

于 2011-04-22T19:27:47.473 に答える