我有一个 Web 应用程序,可以在用户选择的时间全天向他们发送定制的电子邮件。因此,在一天中的任何给定时间,我可能需要什么都不做,或者发送多达一万封电子邮件。
以前,我用一个 cron 作业解决了这个问题,每分钟触发一次。它会调用一个脚本来查找需要发送的下一千封电子邮件。该脚本会将它们标记为“正在进行中”,然后循环遍历它们,尝试发送它们。循环很重-调用远程 API 来发送电子邮件,将记录更新为“已发送”,记录操作。我发现的问题是,有时,循环会被标记为“数百封邮件”,失败,
我现在已经重写了循环,以获取需要发送的单个电子邮件,将其标记为“正在进行”,发送它,将其标记为“已发送”,记录它,然后获取下一个。我运行它一分钟,尽可能多的循环。但这确实是 cpu 密集型的,而且似乎效率很低,有很多 db 调用。
我现在在想,每个日常电子邮件都应该有自己的 cron 作业。然后我最终有一万个或更多的作业调用一个特定的 URL,如http://mydomain.com/email/123/send。我在这里担心的是,我需要更新诸如时区和用户首选项更新(“在下午 6 点而不是上午 10 点给我发送电子邮件”)之类的 cron 作业。
你将如何解决这个问题?顺便说一句,你知道任何旨在解决这个问题的 Web 服务吗?
10,000 个 cron 作业将导致 10,000 个可执行文件运行。我怀疑这将是您可用的最少可扩展选项。
这取决于你的确切需求,尽管 10k cron 作业看起来真的很糟糕,无论如何。也许你可以有几个 cronjobs,每个 cronjobs 选择一批邮件发送,以实现并行性并避免延迟发送邮件在底部?
另外,对于“以编程方式重写我的 cron”的部分,有 cron 库可用。我通常使用Quartz为这种事情,但它可能太臃肿为您的需求,所以也许你想使用一个更轻的库。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(16条)