2

我正在构建基于论坛/问答社区的应用程序的最后阶段,我想添加电子邮件通知。该应用程序有几个不同的实体,包括:线程、问题、项目、照片等。目标是用户可以“订阅”任意数量的这些实体,只要实体收到新的评论或活动,就可以排队发送电子邮件。此功能与 facebook 和论坛非常相似。

我研究了 ActionMailer(带有 rake 任务和延迟作业)、MailChimp API(和插件)和其他应用程序邮件程序(PostageAppPostmark)。

由于内存占用和服务器过载的潜在问题,我倾向于使用 ActionMailer。该应用程序将在 Heroku 上运行,但我担心服务器可能很容易不堪重负,每隔几分钟就会发送数百封电子邮件。

另一个复杂性是,根据用户偏好会有不同类型的订阅(即时电子邮件通知、每日电子邮件通知)。

为此类功能管理电子邮件的最佳方法是什么?非常感谢任何提示/想法!

4

2 回答 2

2

您可以使用 ActionMailer 通过 SendGrid 或 Postmark 发送。PostageApp 仍然需要一个 SMTP 服务器并添加了一个额外的依赖项,但是拥有它会很不错。我相信 MailChimp 只用于时事通讯,所以在这里对你来说可能没有多大用处。

在这里给出一个高层次的概述,有几件事很重要:

  1. 防止邮件程序逻辑混乱控制器。
  2. 防止延迟对用户请求的响应。
  3. 避免“应用程序过载”问题。
  4. 处理基于事件的定期电子邮件。

为了解决 #1,您需要使用观察者来决定何时发送基于事件的电子邮件。要考虑 #2 和 #3,您可以加入 DelayedJob,以便在后台发送电子邮件。你可以很容易地在 Heroku 上使用 SendGrid 和 ActionMailer(特别是如果你使用 Pony)。对于#4,您应该只创建一个 rake 任务来处理决定向谁发送电子邮件并将发送作业排队的业务逻辑,就像 Observer 那样的 DJ 任务。

为了清楚起见,DelayedJob 将在一个单独的进程中执行作业。对于 Heroku,您实际上是在不同的 Dyno 中运行每个 DelayedJob 工作程序,这是一个完全独立的堆栈/环境(很可能在不同的物理服务器上)。以这种方式超载您的应用程序不会有任何问题,除非您的数据库当然无法跟上添加作业的速度(在这种情况下,您可以使用 Redis 作为 DJ 商店)。您可以根据需要添加更多 DJ 工作人员,轻松进行水平扩展。

于 2011-04-14T01:10:05.107 回答
0

看看 SimpleWorker,一个基于云的后台处理/工作队列。

它是 Heroku 的附加组件,能够扩展和扩展以处理一组一次性帖子或预定电子邮件。(例如,可以安排一个主作业,然后当它不按计划运行时,它会将 10、100、1000 个作业排队,以便在横向扩展的基础架构上同时运行。)

Heroku 工作人员可以正常工作,因为它们将作为单独的进程运行,但是如果您有可变负载,那么您需要一种可以根据工作进行扩展和缩减的服务 - 所以您 a) 不为未使用的容量付费,并且 b ) 可以处理突发流量和批量输出。

(披露:我为公司工作。)

于 2011-04-22T19:27:47.473 回答