好吧我正在处理每个电子邮件的繁重过程。让我说我为系统制作人工智能,他会自动回复他收到的电子邮件,但我还是不知道从哪里开始。
继承人的想法
架构1
问题:
假设我们有1000封电子邮件/秒邮件服务器,exim或sendmail,davecot等是如何正常工作的?
parseandsavetomysql.py可以在一秒钟之内处理1000封电子邮件吗?那怎么办? btw目前工作正常,但我需要了解这一点。
我对工人的逻辑是否正确?还是排队系统?我试图看到resque和朋友,但我仍然只是不明白我们怎么能锁定一个会话让我们说这个问题“嘿我正在处理这个文件不工作在email1.rawemail工作在其他”我们怎么能这样做正确还是更简单的方式?
架构2
问题?
插件
感谢帮助,Adam Ramadhan
编辑我当前的架构
答案 0 :(得分:2)
像许多“大图片”架构问题一样,最好的解决方案实际上就是其中之一......这取决于它。你能控制部署环境吗?那就是......你可以使用你想要的任何电子邮件服务器,或者你是否只能使用已经安装和托管过的服务器?你可以在与SMTP服务相同的机器上运行代码吗?应该考虑这些问题以及许多其他问题,以提出(接近)最优架构。
鉴于此,我将做出一些假设并提出一些我认为值得探讨的想法......
您应该研究一个高性能的邮件系统。具体来说,请看RabbitMQ。 RabbitMQ是可靠和高效的,基于异步传入事件的工作负载分配是他们(在我看来,非常好)教程中专门讨论的模式。
使用这样的消息服务器,您有一个接收传入电子邮件的进程。优选地,这是作为SMTP过程的一部分完成的,或者至少非常接近它 - 特别是在您提到的工作负载时。如果您别无选择,那么您目前使用cron通过POP或IMAP收集邮件的想法必须有效。
然后,电子邮件收集过程会将消息推送到RabbitMQ队列中。 (也许不是字面上的电子邮件本身,虽然这是一种可能性,但我更像是对电子邮件有效存储位置的引用)。然后,您运行订阅指定消息队列的多个工作进程。然后,RabbitMQ(或您决定的任何消息服务)将以循环方式将这些消息分发给各个订户。如果已加载,则工作进程可以NACK消息,或将自己的控制流消息发送回服务。由于工作量非常高(再次,就像你提出的那样),我强烈推荐某种管理流程来密切关注分布式系统的整体运行状况。管理员将收集运行时统计信息(对于整个系统的未来增长规划,优化和重构非常有用),并且能够启动和关闭新的工作进程。在你达到非常高的工作负载之前,假设你的工作进程是稳定的并且可以长时间没有内存碎片等,那么只需使用消息服务器来分配工作就足够了。
对于它的价值,我在编写电子邮件处理器方面有一些经验(特别是xmail - 如果你刚刚开始你的项目并且有很多控制权,我建议你使用它它的早期阶段)。此外,我目前正在使用RabbitMQ为主要的科学计算网格构建多代理结果缓存系统。
无论如何......祝你的项目好运!