Análisis de correo electrónico y procesamiento de architecture

ok estoy haciendo un proceso pesado en el procesamiento de cada correo electrónico. Digamos que estoy haciendo una IA para un sistema, él responderá automáticamente el correo electrónico que recibe, pero todavía no sé por dónde empezar.

Heres lo que estoy pensando

architecture 1 introduzca la descripción de la imagen aquí

problemas :

  1. digamos que tenemos 1000 correos electrónicos / seg. ¿Cómo funciona exactamente un servidor de correo, exim o sendmail, davecot, etc.?

  2. ¿Puede el parseandsavetomysql.py procesar 1000 correos electrónicos en un segundo? ¿Cómo funciona eso también? Por cierto, actualmente está funcionando bien, pero necesito saber sobre esto.

  3. ¿Es mi lógica correcta sobre un trabajador? o un sistema de colas? He intentado ver resultados y amigos, pero todavía no lo entiendo. ¿Cómo podemos bloquear una sesión? Digamos que en este problema “. Estoy procesando este archivo. No trabajo en email. El correo electrónico funciona en otro” ¿Cómo podemos hacer eso correctamente? o forma más sencilla?

architecture 2

introduzca la descripción de la imagen aquí

¿problemas?

  1. como esta escrito
  2. ¿Cómo puede un servidor pop / stmp recibir 1000 correos electrónicos / seg?
  3. Podemos recibir correo electrónico a través de imap y pop? ¿Porque solo estamos procesando es pop3 la forma correcta de elegir el rendimiento? hay un imap_open en php que estoy usando actualmente

Añadir

  1. ¿Existe un buen enlace o publicación de blog que resuelva el mismo problema que yo?
  2. Por favor, dame enlaces de proyectos, aplicaciones o terceros que resuelvan mi problema.
  3. Si hay algo en mente, por favor escríbalos.

Gracias por ayudar, Adam Ramadhan

edité mi architecture actual

introduzca la descripción de la imagen aquí

Como muchas de las preguntas de architecture de “gran cuadro”, la mejor solución es realmente una de esas … depende. ¿Puedes controlar el entorno de despliegue? Es decir … ¿puede usar el servidor de correo electrónico que desee o está limitado a usar uno que ya está instalado y alojado? ¿Puede ejecutar código en la misma máquina que el servicio SMTP? Estas preguntas, y muchas otras, deben considerarse con una architecture (casi) óptima.

Dado eso, voy a hacer un par de suposiciones y ofrecer algunas ideas que creo que vale la pena explorar …

Usted debe mirar en un sistema de mensajería de alto rendimiento. En concreto, eche un vistazo a RabbitMQ . RabbitMQ es confiable y eficiente, y la distribución de la carga de trabajo basada en eventos entrantes asíncronos es un patrón que discuten específicamente en sus tutoriales (en mi opinión, muy buenos).

Con un servidor de mensajería como este, tiene un proceso que recibe el correo electrónico entrante. Preferiblemente, esto se hace como parte del proceso SMTP, o al menos muy cerca de él, especialmente con la carga de trabajo que ha mencionado. Si no tiene otra opción, sus ideas sobre el uso de cron para recostackr mensajes a través de POP o IMAP tendrán que funcionar, por ahora.

El proceso de recostackción de correo electrónico luego enviaría los mensajes a la cola de RabbitMQ. (Quizá no literalmente los correos electrónicos en sí mismos, aunque eso es una posibilidad, pero estaba pensando más en referencias a dónde se almacena el correo electrónico de manera eficiente). A continuación, ejecuta varios procesos de trabajo que están suscritos a una cola de mensajes nombrada. RabbitMQ (o cualquier servicio de mensajería que usted decida) luego distribuiría esos mensajes de forma rotativa a los suscriptores individuales. Si ya está cargado, los procesos de trabajo pueden NACK el mensaje, o enviar su propio mensaje de flujo de control al servicio. Con una carga de trabajo MUY alta (una vez más, como he propuesto), recomiendo encarecidamente algún tipo de proceso de gestión que mantenga un control sobre el estado general del sistema distribuido. El administrador recostackría estadísticas de tiempo de ejecución (MUY útil para la planificación del crecimiento futuro, la optimización y la refactorización del sistema en general), y tendría la capacidad de activar y cerrar nuevos procesos de trabajo. Antes de llegar a esa carga de trabajo muy alta, y suponiendo que sus procesos de trabajo son estables y pueden vivir mucho tiempo sin fragmentación de la memoria, etc., basta con usar el servidor de mensajes para distribuir el trabajo.

Por lo que vale, tengo algo de experiencia en escribir procesadores de correo electrónico (específicamente xmail , uno que recomendaría si está comenzando su proyecto y tiene mucho control sobre sus etapas iniciales). Además, actualmente estoy usando RabbitMQ para crear un sistema de almacenamiento en caché de resultados para múltiples agentes para una importante red de computación científica.

De todos modos … ¡buena suerte con tu proyecto!