
나는 이메일 메일을 보내기 위한 서버를 유지 관리하고 있습니다(물론 스팸은 없습니다). 이 기계의 현재 속도는 약입니다. 시간당 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=<[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 서버에서 메일링 리스트를 직접 실행하면 커피 한잔 만들기를 마치기 전에 적어도 한 번은 2,000개의 메시지가 처리되는(즉, 지연될 수 있음) 것을 볼 수 있을 것으로 예상됩니다.
시스템이 스팸 및 바이러스 검사를 실행하고 있는 것 같습니다.나가는우편. 들어오는 메일을 검사하는 것은 좋은 생각이지만 보내는 메일을 검사하는 것은 그다지 좋은 생각이 아닐 수 있습니다. 특히 해당 메일의 원본이 이미 잘 제어되어 있는 경우에는 더욱 그렇습니다. 이로 인해 각 메시지 전달에 몇 초가 추가되고 디스크 I/O도 크게 증가한다는 것을 알 수 있습니다.
보내는 메일 검색을 중지하도록 Postfix를 재구성하겠습니다. 보내는 메일을 정상적으로 검사해야 하는 경우(예: 사무실에 있는 사람들이 자신의 컴퓨터에서 메일을 보내는 경우) 특별히 아웃바운드 메일링 목록 트래픽을 처리하기 위한 전용 메일 서버를 설정하십시오.
답변2
문제는 높은 CPU 대기 시간에서 알 수 있듯이 I/O 속도입니다. 이는 두 가지 요인으로 인해 발생할 수 있습니다.
- postfix 대기열 관리는 fsync()가 풍부하며 IOPS 조건에 과도한 로드를 부과합니다.
이 시도:"-o nobarrier" 마운트 옵션을 사용하여 postfix의 대기열(일반적으로 루트 파일 시스템)을 호스팅하는 파일 시스템을 다시 마운트합니다. 경고: I/O 장벽을 비활성화하면 정전 및/또는 OS 충돌 시 데이터 손실이 발생할 수 있으므로 이는 테스트로만 간주되어야 합니다. - 발신 이메일에도 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 레코드 목록을 가져옵니다.
이 목록(포트 25 - 항상)에서 smtp 서버(호스트 이름)로 이메일을 보냅니다.
그런 다음 앱을 실행하고 하나의 VPS 서버에서 단일 또는 여러 IP 주소로 보낼 수 있습니다.
아니면 postfix에서 여러 IP 주소로 이메일을 보내볼 수도 있습니다!!!
C# 또는 Java 메일 smtp 클라이언트를 사용할 수 있습니다.