我有一个网络应用程序,可以在一天中向我的用户发送定制的电子邮件,有时是他们选择的。因此,在一天中的任何特定时间,我可能什么都不做,或者发送多达一万封电子邮件。
以前我通过一个 cron 作业解决了这个问题,每分钟触发一次。它会调用一个脚本来查找接下来需要发送的一千封电子邮件。该脚本会将它们全部标记为“进行中”,然后遍历它们,尝试发送它们。循环很重 - 调用远程 API 发送电子邮件,将记录更新为“已发送”,记录操作。我发现的问题是,有时循环会中断、失败、服务器会闪烁,并且数百封电子邮件会卡住并标记为“进行中”。
我现在重写了循环以获取需要发送的单个电子邮件,将其标记为“进行中”,将其发送,将其标记为“已发送”,记录它,然后获取下一封。我运行它一分钟,想多少循环就多少。但这确实是 cpu 密集型的,而且似乎效率很低,有很多 db 调用。
我现在在想,每封每日电子邮件都应该有自己的 cron 工作。然后我最终得到了一万个或更多的工作,调用一个特定的 URL,比如http://mydomain.com/email/123/send。我在这里担心的是,我需要更新 cron 作业,例如时区和用户偏好更新(“在下午 6 点而不是上午 10 点向我发送电子邮件”)。所以我正在以编程方式重写我的 crontab,而且可能经常重写。
你将如何解决这个问题?顺便说一句,您知道任何旨在解决此问题的 Web 服务吗?