Назад | Перейти на главную страницу

скорость отправки электронной почты - как улучшить

Я поддерживаю сервер для отправки электронных писем (конечно, без спама). Текущая скорость этой машины составляет ок. 2000 писем в час.

(редактировать: вообще-то я сегодня сделал тестовую рассылку, сняв троттлинг и отправив рассылку 2500 недавним + активным подписчикам. Прошло ок. 1 час 45 минут, чтобы отправить это письмо.)

Мой босс указал, что его это не устраивает, поскольку он видел такие компании, как Mail Chimp и им подобные, где вы можете отправлять тысячи электронных писем за пару секунд / минут. И они, конечно же, гаснут, когда вы получаете немедленные ответы, открытия и т. Д.

У меня вопрос, что именно нужно для достижения такой скорости отправки? Я имею в виду, что, конечно, вы можете добавить оборудование и построить все более и более сложную систему серверов, которые все отправляют вашу почту и т. Д. И, конечно же, это также вопрос наличия чистого списка (без неизвестных хостов и т. Д.) так как все они съедают ресурсы сервера)

Но помимо этого, я уверен, что должны быть другие способы улучшить это. Кто-нибудь может дать обзор по этому поводу?

РЕДАКТИРОВАТЬ

Как указано в комментариях, вот еще несколько подробностей о том, какое оборудование используется, а также о поведении отправки:

Тип сервера

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

Средний размер писем

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.

доступная пропускная способность

30Mbit/s symmetrical

Скорость диска

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

Измерения различных показателей

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

Некоторые данные почтового журнала:

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=<email1@example.com>, 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 "email2@example.com", results: "."=>[Amavis::Lookup::RE=ARRAY(0xaa7f358),HASH(0xac5f891)]
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_re("myself@mailserver.com"), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) query_keys: myself@mailserver.com, myself@, mailserver.com, .mailserver.com, .com, .
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_hash(myself@mailserver.com), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender<myself@mailserver.com>) => undef, "myself@mailserver.com" 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=<email3@example.com>, 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=<email4@example.com>, 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)

Запуская список рассылки на сервере postfix, я ожидаю, что 2000 сообщений будут обработаны хотя бы один раз (т.е. они могут быть отложены), прежде чем вы сможете закончить приготовление чашки кофе.

Похоже, что ваша система выполняет сканирование на спам и вирусы. исходящий почта. Хотя сканирование входящей почты - это хорошая идея, сканирование исходящей почты, вероятно, не очень хорошая идея, особенно если источник этой почты уже хорошо контролируется. Мы видим, что это добавляет несколько секунд к доставке каждого сообщения, а также значительно увеличивает количество операций ввода-вывода на вашем диске.

Я бы перенастроил Postfix, чтобы он не сканировал исходящую почту. Если вам нужно нормально сканировать исходящую почту, например для людей в вашем офисе, отправляющих почту со своих компьютеров, затем настройте выделенный почтовый сервер специально для обработки исходящего трафика списков рассылки.

Проблема заключается в скорости ввода-вывода, о чем свидетельствует высокое время ожидания процессора. Это может быть связано с двумя факторами:

  1. Постфиксное управление очередью - это функция fsync (), которая накладывает большую нагрузку на IOPS.
    Попробуй это: перемонтируйте файловую систему, в которой находится очередь постфикса (обычно корневая файловая система), с параметром монтирования "-o nobarrier". ВНИМАНИЕ: это следует рассматривать только как тест, так как отключение барьеров ввода-вывода может привести к потере данных в случае отключения электроэнергии и / или сбоя ОС.
  2. похоже, что вы также используете amavis + и spamassassin для исходящей почты. Хотя это может быть хорошо (в зависимости от среды и ее требований), spamassassin может значительно снизить объем вашей электронной почты.
    Попробуй это: в amavisd.conf установите $sa_local_tests_only = 1 для исключения всех сетевых тестов и $sa_mail_body_size_limit = 32*1024 чтобы уменьшить часть тела, которая будет сканироваться spamassassin.

Поочередно пробуйте приведенные выше предложения и каждый раз проверяйте свою систему. Тогда дайте нам знать результаты.

Привет, тебе не нужен постфикс !!!!

Вам нужно написать многопоточное приложение для отправки писем из (C ++, C # .NetCore или Java)

  • Сохранение электронных писем с новостями в базе данных mysql

  • Получите список записей MX для каждого адреса электронной почты из вашей базы данных

  • Отправлять электронные письма на SMTP-сервер (имена хостов) из этого списка (на 25-й порт - всегда).

Затем вы можете запускать приложения и отправлять сообщения с одного или нескольких IP-адресов с одного сервера VPS.

Или вы можете попробовать отправлять электронные письма с нескольких IP-адресов из postfix !!!

Вы можете использовать почтовый smtp-клиент на C # или Java