velocidade de envio de e-mail - como melhorar

1

Estou mantendo um servidor para enviar e-mails (sem spam, é claro). A velocidade atual desta máquina é de aprox. 2000 e-mails por hora.

( edit : na verdade, enviei um teste hoje, removendo o afogamento e enviando uma correspondência para 2500 assinantes recentes + ativos. Demorou aproximadamente 1 hora e 45 minutos para receber este email. )

Meu chefe apontou que ele não está satisfeito com isso, pois viu empresas como o Mail Chimp e similares, onde é possível enviar milhares de e-mails dentro de alguns segundos / minutos. E eles saem, é claro, quando você recebe respostas imediatas, abre, etc.

Minha pergunta é: o que exatamente é necessário para atingir essa velocidade de envio? Quero dizer, é claro que você pode adicionar ao hardware e construir um sistema cada vez mais complexo de servidores que enviam todos os seus e-mails, etc. E, claro, também é uma questão de ter uma lista limpa (nenhum host desconhecido, etc.). como todos eles consomem os recursos do servidor)

Mas, além disso, tenho certeza que deve haver outras maneiras de melhorar isso. Alguém pode dar uma visão geral sobre isso?

EDITAR

Conforme solicitado nos comentários, aqui estão alguns detalhes mais específicos sobre qual hardware está sendo usado, bem como o comportamento de envio:

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

Tamanho médio dos e-mails

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.

largura de banda disponível

30Mbit/s symmetrical

Velocidade do 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

Medições de várias 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

Alguns dados do maillog:

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)
    
por koljanep 03.03.2015 / 23:31

3 respostas

5

Executando uma lista de e-mails em um servidor postfix, espero ver 2.000 mensagens processadas pelo menos uma vez (ou seja, elas podem ser adiadas) antes que você possa terminar de fazer uma xícara de café.

Seu sistema parece estar executando varreduras de spam e vírus no correio de saída . Embora seja uma boa ideia verificar os e-mails recebidos, provavelmente não é uma boa ideia verificar os e-mails enviados, especialmente se a origem desses e-mails já estiver bem controlada. Podemos ver que isso está adicionando vários segundos para a entrega de cada mensagem, e que isso também está aumentando drasticamente a sua E / S de disco.

Eu reconfiguraria o Postfix para interromper a verificação de mensagens enviadas. Se você tiver necessidade de verificar emails de saída normalmente, por exemplo, para as pessoas em seu escritório enviando e-mails de seus computadores e, em seguida, configuram um servidor de e-mail dedicado especificamente para lidar com o tráfego da lista de e-mails enviados.

    
por 04.03.2015 / 15:12
1

O seu problema é a velocidade de E / S, conforme visto pelo alto tempo de espera da CPU. Isso pode ser devido a dois fatores:

  1. o gerenciador de filas postfix é fsync () - rico e impõe uma carga pesada nos termos de IOPS.
    Tente isto: remonte o sistema de arquivos que hospeda a fila do postfix (geralmente o sistema de arquivos raiz) ) com a opção de montagem "-o nobarrier". AVISO: isso deve ser considerado apenas um teste, pois a desativação de barreiras de E / S pode levar à perda de dados em caso de queda de energia e / ou falha do SO.
  2. parece que você está executando o amavis + e o spamassassin para enviar emails também . Embora isso possa ser uma coisa boa (dependendo do ambiente e seus requisitos), o spamassassin pode diminuir consideravelmente o seu volume de e-mails. Tente isto: em amavisd.conf, defina $sa_local_tests_only = 1 para excluir todos testes dependentes da rede e $sa_mail_body_size_limit = 32*1024 para reduzir a parte do corpo a ser digitalizada pelo spamassassin.

Tente as sugestões acima, uma por vez, e sempre compare seu sistema. Então, deixe-nos saber os resultados.

    
por 04.03.2015 / 21:52
-4

Oi, você não precisa do postfix !!!!

Você precisa escrever um aplicativo multithread para enviar e-mails de (C ++, C # .NetCore ou Java)

  • Salve e-mails de newsletters no banco de dados mysql

  • Obtenha a lista de registros MX para cada endereço de e-mail do seu banco de dados

  • Envie emails para o servidor smtp (hostnames) dessa lista (na porta 25 - sempre).

Em seguida, você pode executar aplicativos e enviar endereços IP únicos ou múltiplos de um servidor VPS.

Or you can try send emails from multiple ip addreses from postfix !!!

You can use C# or Java mail smtp client

    
por 23.05.2018 / 11:51