电子邮件解析和处理架构

时间:2012-05-11 15:37:21

标签: php python mysql email architecture

好吧我正在处理每个电子邮件的繁重过程。让我说我为系统制作人工智能,他会自动回复他收到的电子邮件,但我还是不知道从哪里开始。

继承人的想法

架构1 enter image description here

问题:

  1. 假设我们有1000封电子邮件/秒邮件服务器,exim或sendmail,davecot等是如何正常工作的?

  2. parseandsavetomysql.py可以在一秒钟之内处理1000封电子邮件吗?那怎么办? btw目前工作正常,但我需要了解这一点。

  3. 我对工人的逻辑是否正确?还是排队系统?我试图看到resque和朋友,但我仍然只是不明白我们怎么能锁定一个会话让我们说这个问题“嘿我正在处理这个文件不工作在email1.rawemail工作在其他”我们怎么能这样做正确还是更简单的方式?

  4. 架构2

    enter image description here

    问题?

    1. 正如所写
    2. pop / stmp服务器怎样才能收到1000封电子邮件/秒?
    3. 我们可以通过imap和pop收到电子邮件吗?因为我们刚刚处理pop3是选择性能的正确方法吗? php上有一个imap_open,我目前正在使用
    4. 插件

      1. 是否有一个很好的链接或博客文章可以解决与我相同的问题?
      2. 请给我链接解决我问题的项目,应用程序或第三方?
      3. 如果有任何想法,请写下来。
      4. 感谢帮助,Adam Ramadhan

        编辑我当前的架构

        enter image description here

1 个答案:

答案 0 :(得分:2)

像许多“大图片”架构问题一样,最好的解决方案实际上就是其中之一......这取决于它。你能控制部署环境吗?那就是......你可以使用你想要的任何电子邮件服务器,或者你是否只能使用已经安装和托管过的服务器?你可以在与SMTP服务相同的机器上运行代码吗?应该考虑这些问题以及许多其他问题,以提出(接近)最优架构。

鉴于此,我将做出一些假设并提出一些我认为值得探讨的想法......

您应该研究一个高性能的邮件系统。具体来说,请看RabbitMQ。 RabbitMQ是可靠和高效的,基于异步传入事件的工作负载分配是他们(在我看来,非常好)教程中专门讨论的模式。

使用这样的消息服务器,您有一个接收传入电子邮件的进程。优选地,这是作为SMTP过程的一部分完成的,或者至少非常接近它 - 特别是在您提到的工作负载时。如果您别无选择,那么您目前使用cron通过POP或IMAP收集邮件的想法必须有效。

然后,电子邮件收集过程会将消息推送到RabbitMQ队列中。 (也许不是字面上的电子邮件本身,虽然这是一种可能性,但我更像是对电子邮件有效存储位置的引用)。然后,您运行订阅指定消息队列的多个工作进程。然后,RabbitMQ(或您决定的任何消息服务)将以循环方式将这些消息分发给各个订户。如果已加载,则工作进程可以NACK消息,或将自己的控制流消息发送回服务。由于工作量非常高(再次,就像你提出的那样),我强烈推荐某种管理流程来密切关注分布式系统的整体运行状况。管理员将收集运行时统计信息(对于整个系统的未来增长规划,优化和重构非常有用),并且能够启动和关闭新的工作进程。在你达到非常高的工作负载之前,假设你的工作进程是稳定的并且可以长时间没有内存碎片等,那么只需使用消息服务器来分配工作就足够了。

对于它的价值,我在编写电子邮件处理器方面有一些经验(特别是xmail - 如果你刚刚开始你的项目并且有很多控制权,我建议你使用它它的早期阶段)。此外,我目前正在使用RabbitMQ为主要的科学计算网格构建多代理结果缓存系统。

无论如何......祝你的项目好运!

相关问题