sql >> Databáze >  >> RDS >> Mysql

Architektura analýzy a zpracování e-mailů

Stejně jako mnoho „velkých“ otázek architektury, nejlepším řešením je skutečně jedna z nich... záleží. Můžete ovládat prostředí nasazení? To znamená...můžete použít jakýkoli e-mailový server, který chcete, nebo jste nuceni používat ten, který je již nainstalován a hostován? Můžete spustit kód na stejném počítači jako služba SMTP? Tyto otázky a mnoho dalších by měly být zváženy, aby se dospělo k (téměř) optimální architektuře.

Vzhledem k tomu udělám pár předpokladů a nabídnu několik nápadů, které si myslím, že stojí za to prozkoumat...

Měli byste se podívat na vysoce výkonný systém zasílání zpráv. Konkrétně se podívejte na RabbitMQ . RabbitMQ je spolehlivý a efektivní a rozložení pracovní zátěže na základě asynchronních příchozích událostí je vzor, ​​který konkrétně rozebírají ve svých (podle mého názoru velmi dobrých) tutoriálech.

Se serverem pro zasílání zpráv, jako je tento, máte jeden proces, který přijímá příchozí e-maily. Přednostně se to provádí jako součást procesu SMTP nebo alespoň velmi blízko k němu - zejména s pracovní zátěží, kterou jste zmínili. Pokud nemáte jinou možnost, vaše představy o používání cronu ke shromažďování zpráv přes POP nebo IMAP budou muset prozatím fungovat.

Proces shromažďování e-mailů by pak vložil zprávy do fronty RabbitMQ. (Možná ne doslova samotné e-maily, i když to je možné, ale myslel jsem spíše jako odkazy na to, kde je e-mail efektivně uložen). Potom spustíte více pracovních procesů, které jsou přihlášeny k odběru pojmenované fronty zpráv. RabbitMQ (nebo jakákoliv služba zasílání zpráv, pro kterou se rozhodnete) by pak tyto zprávy rozesílala postupně mezi jednotlivé předplatitele. Pokud jsou již načteny, mohou pracovní procesy zprávu NACK Zrušit nebo odeslat svou vlastní zprávu řídicího toku zpět do služby. S VELMI vysokým pracovním zatížením (opět, jak jste navrhovali), bych velmi doporučil nějaký druh procesu správy, který bude mít přehled o celkovém stavu distribuovaného systému. Manažer by shromažďoval statistiky doby běhu (VELMI užitečné pro budoucí plánování růstu, optimalizaci a refaktoring celého systému) a měl by schopnost roztočit a vypnout nové pracovní procesy. Než se dostanete k tomuto velmi vysokému pracovnímu zatížení a za předpokladu, že vaše pracovní procesy jsou stabilní a mohou žít dlouhou dobu bez fragmentace paměti atd., pak by mělo stačit pouze použití serveru zpráv k distribuci práce.

Za to, co stojí za to, mám nějaké zkušenosti s psaním e-mailových procesorů (konkrétně xmail - takový, který bych doporučil, pokud svůj projekt teprve začínáte a máte velkou kontrolu nad jeho ranými fázemi). V současné době také používám RabbitMQ k vytvoření systému mezipaměti výsledků s více agenty pro hlavní vědeckou výpočetní síť.

Každopádně... hodně štěstí s vaším projektem!




  1. Extrahování z velkého xml dotazu selhává s příliš dlouhým řetězcovým literálem

  2. php kód pro generování více řádků s vlastním kódem

  3. Zlepšení výkonu Galera Cluster pro MySQL nebo MariaDB

  4. Ovladač JDBC PostgreSQL pro Android