it-swarm-eu.dev

Objem e-mailu SMTP

Aplikace mé společnosti má hromadný e-mailový systém, který byl vytvořen na míru a který naši klienti používají k odesílání e-mailů na základě opt-ins. Při provádění sledování výkonu během některých obzvláště velkých dávek e-mailů jsme si všimli, že se zdá, že v našem aktuálním mechanismu odesílání (phpMailer) je umělá bariéra. Krátce jsme přesměrovali naši poštu prostřednictvím služby SMTP třetích stran, ale uvědomili si, že neposílali rychleji, než jsme my. Nyní, když se nám odesílající břemeno vrátí, pečlivě testujeme v očekávání řady nadcházejících velkých klientů.

Za předpokladu, že zvyšujeme rychlost odesílání pro náš poštovní protokol (uvažujeme o změně úplně na SwiftMailer), uvažoval jsem o tom, zda se náš SMTP server může nakonec stát také úzkým hrdlem. Jaký typ propustnosti jste schopni dosáhnout z vašeho SMTP serveru? Jaké úvahy o odesílání SMTP (jako je autentizace, balení atd.), Které musím znovu zvážit při vylepšení výkonu?

5
bpeterson76

Pokud používáte neblokující SMTP server (v případě, že zasáhne špatný server DNS/SMTP), pak jde o to, kolik různých domén jsou e-maily určeny a jaká je šířka pásma (zhruba řečeno, protože výjimky z pravidla se objevují v extrémech). Mám tušení (šířku pásma), protože vidíte podobné výsledky s externím serverem.

Jakékoli balení/šifrování moderního hardwaru zabere zlomek času potřebného k odeslání e-mailu na pomalý server. Pokud hostujete své vlastní servery DNS, ujistěte se, že se tyto rychlé výsledky vracejí, protože přijímající server SMTP bude pravděpodobně chtít znovu zkontrolovat vaše záznamy (zpomalení věcí dále). Mít dva poštovní servery (s dostatečnou šířkou pásma) je obvykle mnohem rychlejší (kvůli blokování na serveru s pomalým přijímáním), než utrácet stejné množství peněz na lépe specifikovaném jednom serveru.

Nasty hacky pro rychlé výhry

  1. Seřadit e-mailové adresy podle názvu domény. Pokud vytvoříte novou databázovou tabulku zavěšenou na tabulce, do které ukládáte e-mailovou adresu, může obsahovat cizí klíč, uživatelskou část a část domény. Tím se dosáhne běhu k rozdělení stávajících dat a některých změn v CRUD k aktualizaci záznamů. Tříděním podle názvu domény umožníte odesílajícímu serveru znovu použít jeho připojení ke vzdálenému poštovnímu serveru (buďte opatrní, abyste nebyli blokováni nevyžádanou poštou).

  2. Pokud je kód obtížný změnit a chcete střídat poštovní servery, můžete funkci jednoduše změnit tak, aby akceptovala odkaz (předpona s & v PHP), pak můžete použít proměnnou $ _GLOBAL, která se mění každých x sekund plánovač, který volá skrytou stránku PHP.

  3. Použijte místní mezipaměť DNS a vyžádejte si potřebné záznamy MX před před spuštěním (nebo alespoň odstartujte skript, který chcete spustit paralelně). Většina mezipaměti bude uchovávat záznamy po dobu 24 hodin (obvykle psané jako 3600 sekund). Může snížit počáteční latenci připojení přibližně o 100 ms. Pokud máte více serverů SMTP a přijímač má více záznamů MX, můžete výsledky zkazit. Váš první odesílající server tedy vidí:

    • MX Record 1 Priority 10
    • Priorita záznamu MX 20
    • Priorita záznamu 3 MX 30
    • Priorita záznamu MX 40

    a váš druhý odesílající server vidí

    • Priorita záznamu 1 MX 40
    • MX Record 2 Priority 10
    • MX Record 3 Priority 20
    • MX Record 4 Priority 30

    atd. Tímto způsobem můžete zvýšit paralelní chování, ale narušuje to všechny zisky z bodu 1.

Pokud můžete spustit trasování paketů k identifikaci úzkých míst, pomůže vám najít potřebné rychlé výhry.

3
Metalshark

Stejně jako miluji PHP, to je místo, kde je váš problém ve vašem systému. PHP prostě nemá účinnost jiných jazyků, pokud jde o zpracování textu.
https://stackoverflow.com/questions/603163/is-Perl-a-good-option-for-heavy-text-processing

Perl bude lepší volbou pro zpracování a odesílání e-mailů. Před několika lety jsem napsal jednoduchý program Perl, který by odesílal personalizované e-maily na naše přihlašovací údaje. Za 6 hodin jsem byl schopen poslat asi 80 000 e-mailů, pomocí Perlu jsem vytvořil e-mail a odešel je do místního programu Sendmail. To bylo na docela standardním virtuálním soukromém serveru s 2 GB RAM.

Odesíláte úlohy do místního procesu Sendmail nebo používá PHPMailer protokol SMTP? Místní program Sendmail bude rychlejší, protože aplikace PHP nemusí k odesílání e-mailu otevírat žádné síťové zásuvky.

V souhrnu byste tedy měli:

  1. Používejte Perl místo PHP (Perla nenávidím, ale je to lepší nástroj pro zpracování textu)
  2. Odešlete úlohu do místního programu Sendmail (který lze v případě potřeby nakonfigurovat tak, aby předával úlohy externím serverům SMTP)
  3. Pokud dojde k přetížení místního serveru, použijte externí server SMTP.
3
Shane Stillwell