繁体   English   中英

Web应用程序架构:未来打样

[英]Web Application Architecture: Future Proofing

我有一个当前发送电子邮件的Web应用程序。 当我的Web应用程序发送电子邮件(发送电子邮件是基于用户操作 - 不是自动的)时,它必须运行其他过程,如压缩文件。

我正在努力使我的应用程序“面向未来” - 所以当有大量用户时我不希望服务器紧张,所以我认为需要发送需要发送的电子邮件和需要压缩的文件在队列中。 将它们放在表中,然后使用cron作业检查每一秒并执行它们(一次x行)。

以上是个好主意吗? 还是有更好的方法? 我真的需要帮助才能正确完成这项工作,以便以后节省我的头痛:)

谢谢大家

这是一个很好的方法,但你现在可以做的最重要的事情是有一个清晰的界面来排队消息,一个用于消耗队列。 不要将两端的用法硬编码到DB。

稍后,如果这成为瓶颈,您可能希望从另一台甚至无法访问数据库的计算机上完成邮件发送,因此这项微小的投资可以在以后为您提供选项。

您可能忽略的一个方面是您正在使用的压缩速度,在您的zip过程中使用较轻的压缩级别可能符合您的最佳利益,因为这可以大大改进拉链时间(轻松加倍),这可以增加到当你进入多个用户的领域时很多。

如果你使用压缩文件(MP3,ZIP,DOCX,XLSX,JPG,GIF等)并且在使用简单文本文件时使用高压缩(TXT,XML ,DOC,XLS等)因为它们即使在高压缩下也会非常快速地拉链。

重要的一点是,不要让cron作业每秒运行一次,而是让一个始终运行的守护进程在退出时自动重启 - 或类似的东西。

一个原因是,就像你自己描述的那样,如果很多用户要求发送电子邮件并且队列建立起来,那么一个cronjob将没有时间在ext ext stats之前进行芬兰语,并且你冒着系统泛滥的风险与流程。

以上是个好主意吗?

有没有更好的解决方案来处理数百万用户? 可能......但那并不重要。 重要的是你已经构建了抽象层。 如果有一天你有疯狂的流量,你的cron队列没有跟上,你可以替换该层的功能,而无需更改任何使用它的代码。

嗯。 我真的不喜欢cron每秒运行一些东西的想法。 这似乎太频繁了。 如果您的应用程序确实需要响应,那么我认为您应该保持同步。 也就是说,将处理保留在Web应用程序中,并寻找其他方法来降低服务器应变水平。

如果您可以在检查之间等待更长时间,那么让您的cron作业一次检查1个项目的队列会更好。 如果有,请对其进行处理,然后再次检查下一个而不退出。 如果没有,退出并且不要再试五分钟左右。

但是,所有这一切,任何像样的邮件传输代理(sendmail,postfix,Exchange)都将内置排队。 它可能比确保在意外发生时确保交付时做得更好。 在处理排队的电子邮件时需要考虑很多事情。 我通常喜欢尽可能早地将出站电子邮件发送到MTA。

-
BMB

构建分布式排队的东西。 缩放卷时,您可以扩展层的不同层,从而可能出现瓶颈。

是否有理由每秒运行一次cron? 音量那么高吗? 我会说尽力保持它是一个n层实现,因为你会交换进出的东西并重构位,因为它们会引起你的注意。

尝试不要在几周内构建任何你设计的东西。 在事情被锁定之前,通常会遇到其他情况。

好方法。 一些改进:

  1. 不要使用cron作业,而是在计时器上查询。
  2. 包含状态标志以保持多个读取器/写入器的排序。
  3. 读取器应该排空队列 - 在队列读取为空之前不要阻塞。
  4. 把事情简单化。 将复杂性和微妙性融入作家/读者对话中。

根据我的经验,这将很好地扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM