
Я обслуживаю сервер для отправки электронных писем (без спама, конечно). Текущая скорость этой машины составляет около 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
МТА
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=<[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)
решение1
Запуская список рассылки на сервере Postfix, я ожидаю, что 2000 сообщений будут обработаны как минимум один раз (т.е. они могут быть отложены), прежде чем вы успеете приготовить чашку кофе.
Похоже, ваша система выполняет сканирование на наличие спама и вирусов.исходящийmail. Хотя сканирование входящей почты — это хорошая идея, сканирование исходящей почты, вероятно, не такая уж хорошая идея, особенно если источник этой почты уже хорошо контролируется. Мы видим, что это добавляет несколько секунд к доставке каждого сообщения, а также значительно увеличивает ваш дисковый ввод-вывод.
Я бы перенастроил Postfix, чтобы остановить сканирование исходящей почты. Если вам нужно сканировать исходящую почту обычным образом, например, для людей в вашем офисе, отправляющих почту со своих компьютеров, то настройте выделенный почтовый сервер специально для обработки исходящего трафика почтовых рассылок.
решение2
Ваша проблема в скорости ввода-вывода, как видно по высокому времени ожидания CPU. Это может быть вызвано двумя факторами:
- Управление очередями в Postfix использует много fsync() и создает большую нагрузку на показатели IOPS.
Попробуй это:перемонтируйте файловую систему, в которой размещена очередь postfix (обычно корневая файловая система), с опцией монтирования "-o nobarrier". ВНИМАНИЕ: это следует рассматривать только как тест, так как отключение барьеров ввода-вывода может привести к потере данных в случае отключения питания и/или сбоя ОС. - похоже, что вы используете amavis + и spamassassin для исходящей почты также. Хотя это может быть полезно (в зависимости от среды и ее требований), spamassassin может значительно снизить пропускную способность вашей электронной почты.
Попробуй это:в amavisd.conf настройте$sa_local_tests_only = 1
исключение всех сетевых тестов и$sa_mail_body_size_limit = 32*1024
сокращение части тела, сканируемой spamassassin.
Попробуйте приведенные выше предложения по одному за раз, и каждый раз проверяйте свою систему. Затем сообщите нам результаты.
решение3
Привет, тебе не нужен постфикс!!!!
Вам необходимо написать многопоточное приложение для отправки писем из (C++,C# .NetCore или Java)
Сохранение писем рассылки в базе данных MySQL
Получите список записей MX для каждого адреса электронной почты из вашей базы данных
Отправлять электронные письма на SMTP-сервер (имена хостов) из этого списка (на порт 25 — всегда).
Затем вы можете запускать приложения и отправлять данные с одного или нескольких IP-адресов с одного VPS-сервера.
Или вы можете попробовать отправлять письма с нескольких IP-адресов из Postfix!!!
Вы можете использовать почтовый smtp-клиент C# или Java.