Velocidad de envío de correo electrónico: cómo mejorar

Velocidad de envío de correo electrónico: cómo mejorar

Mantengo un servidor para enviar correos electrónicos (sin spam, por supuesto). La velocidad actual de esta máquina es de aprox. 2000 correos electrónicos por hora.

(editar: de hecho, hoy hice una prueba de envío de correo, eliminando la limitación y enviando un correo a 2500 suscriptores recientes + activos. Tomó aprox. 1 hora y 45 minutos para enviar esto por correo).

Mi jefe señaló que no está satisfecho con eso, ya que vio empresas como Mail Chimp y similares donde puedes enviar miles de correos electrónicos en un par de segundos/minutos. Y se apagan, por supuesto, a medida que obtienes respuestas inmediatas, aperturas, etc.

Mi pregunta es, ¿qué se necesita exactamente para lograr esa velocidad de envío? Quiero decir, por supuesto, puedes agregar hardware y construir un sistema cada vez más complejo de servidores que envíen tu correo, etc. Y, por supuesto, también es cuestión de tener una lista limpia (sin hosts desconocidos, etc. ya que todos consumen los recursos del servidor)

Pero aparte de eso, estoy seguro de que debe haber otras formas de mejorar esto. ¿Alguien puede darnos una visión general sobre esto?

EDITAR

Como se solicitó en los comentarios, aquí hay algunos detalles más sobre el hardware que se utiliza y el comportamiento de envío:

tipo de servidor

Operating system: CentOS Linux 5.11
Kernel and CPU: Linux 2.6.18-400.1.1.el5 on i686
Processor: Intel Core2 Duo CPU E7500 @ 2.93GHz, 2 cores
CPU load averages: 1.07 (1 min) 1.18 (5 mins) 0.65 (15 mins)
CPU usage: 4% user, 1% kernel, 56% IO, 38% idle
Real memory: 1.49 GB used, 1.94 GB total
Virtual memory: 1.13 GB used, 3.91 GB total
Local disk space: 55.10 GB used, 219.71 GB total

MTA

Postfix version 2.3.3

Tamaño promedio de los correos electrónicos

Of the recent mailings, the largest one I found was just below 20k.
On average I can say it's probably between 8k and 10k per message.

ancho de banda disponible

30Mbit/s symmetrical

Velocidad del disco

hdparm -t /dev/sda

    /dev/sda:
     Timing buffered disk reads:  336 MB in  3.01 seconds = 111.64 MB/sec

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

    16384+0 records in
    16384+0 records out
    1073741824 bytes (1.1 GB) copied, 23.9512 seconds, 44.8 MB/s

Medidas de varias métricas.

CPU load - see above

disk time - ???

RAM usage - see above

bandwidth usage - below data from "iftop -n" over a time period of ca. 5 minutes while sending mail.

    TX:      cum:  3.43MB   peak:  1.16Mb    rates:   5.36Kb  99.5Kb   137Kb
    RX:            1.01MB           120Kb             2.06Kb  38.0Kb  32.3Kb
    TOTAL:         4.44MB          1.28Mb             7.42Kb   137Kb   169Kb

Algunos datos del registro de correo:

in case this is of value, here are a couple of lines from the maillog:

Mar  4 14:00:32 mailserver postfix/smtp[25768]: 6C419107802A: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.6, delays=0.05/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ud-0004fe-Rn)
Mar  4 14:00:32 mailserver postfix/qmgr[2806]: 6C419107802A: removed
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender), 1 matches for "[email protected]", results: "."=>[Amavis::Lookup::RE=ARRAY(0xaa7f358),HASH(0xac5f891)]
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_re("[email protected]"), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) query_keys: [email protected], myself@, mailserver.com, .mailserver.com, .com, .
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_hash([email protected]), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender<[email protected]>) => undef, "[email protected]" does not match
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) SpamControl: calling spam scanner
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) spam_scan: DSPAM not available, skipping it
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) timer set to 320 s for SA (was 480 s)
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) calling SA parse, SA version 3.2.5
Mar  4 14:00:33 mailserver amavis[26392]: (26392-01-46) CALLING SA check
Mar  4 14:00:33 mailserver postfix/smtp[25767]: A5341207802D: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.7, delays=0.15/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ue-0005BY-5x)
Mar  4 14:00:33 mailserver postfix/qmgr[2806]: A5341107802D: removed
Mar  4 14:00:34 mailserver postfix/smtp[25764]: C30371078144: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.8, delays=0.05/0/0.13/1.6, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mx.example.com as 1425474034-NECyl5JAc9-0Xx8wjwN)

Respuesta1

Al ejecutar yo mismo una lista de correo en un servidor Postfix, espero ver que se procesen 2.000 mensajes al menos una vez (es decir, que se puedan aplazar) antes de que puedas terminar de preparar una taza de café.

Su sistema parece estar ejecutando análisis de spam y virus enextrovertidocorreo. Si bien es una buena idea escanear el correo entrante, probablemente no sea tan buena idea escanear el correo saliente, especialmente si la fuente de ese correo ya está bien controlada. Podemos ver que esto agrega varios segundos a la entrega de cada mensaje y que también aumenta dramáticamente la E/S del disco.

Volvería a configurar Postfix para que deje de escanear el correo saliente. Si necesita escanear el correo saliente normalmente, por ejemplo, para las personas de su oficina que envían correo desde sus computadoras, configure un servidor de correo dedicado específicamente para manejar el tráfico de la lista de correo saliente.

Respuesta2

Su problema es la velocidad de E/S, como se ve por el alto tiempo de ESPERA de la CPU. Esto puede deberse a dos factores:

  1. La gestión de colas postfix es rica en fsync() e impone una gran carga en términos de IOPS.
    Prueba esto:Vuelva a montar el sistema de archivos que aloja la cola de Postfix (normalmente el sistema de archivos raíz) con la opción de montaje "-o nobarrier". ADVERTENCIA: esto debe considerarse solo una prueba, ya que deshabilitar las barreras de E/S puede provocar la pérdida de datos en caso de un corte de energía y/o una falla del sistema operativo.
  2. Parece que también estás ejecutando amavis + y spamassassin para el correo electrónico saliente.. Si bien esto puede ser algo bueno (dependiendo del entorno y sus requisitos), spamassassin puede reducir considerablemente el rendimiento de su correo electrónico.
    Prueba esto:en amavisd.conf, configurado $sa_local_tests_only = 1para excluir todas las pruebas dependientes de la red y $sa_mail_body_size_limit = 32*1024reducir la parte del cuerpo que será escaneada por spamassassin.

Pruebe las sugerencias anteriores una a la vez y cada vez compare su sistema. Entonces cuéntanos los resultados.

Respuesta3

Hola no necesitas postfix!!!!

Necesita escribir una aplicación multiproceso para enviar correos electrónicos desde (C++, C# .NetCore o Java)

  • Guarde los correos electrónicos del boletín en la base de datos MySQL

  • Obtenga una lista de registros MX para cada dirección de correo electrónico de su base de datos

  • Envíe correos electrónicos al servidor SMTP (nombres de host) desde esta lista (en el puerto 25, siempre).

Luego puede ejecutar aplicaciones y enviarlas desde una o varias direcciones IP desde un servidor VPS.

¡O puedes intentar enviar correos electrónicos desde múltiples direcciones IP desde Postfix!

Puede utilizar el cliente smtp de correo C# o Java

información relacionada