sql >> Database teknologi >  >> RDS >> Mysql

E-mail-parsing og -behandlingsarkitektur

Ligesom mange "storbillede"-arkitekturspørgsmål er den bedste løsning virkelig en af ​​dem...det afhænger af. Kan du kontrollere implementeringsmiljøet? Det vil sige...kan du bruge den e-mail-server, du vil, eller er du nødt til at bruge en, der allerede er installeret og hostet? Kan du køre kode på samme maskine som SMTP-tjenesten? Disse spørgsmål og en masse andre bør overvejes for at komme med en (næsten) optimal arkitektur.

I betragtning af det vil jeg gøre et par antagelser og komme med nogle ideer, som jeg synes er værd at udforske...

Du bør undersøge et højtydende meddelelsessystem. Mere specifikt, tag et kig på RabbitMQ . RabbitMQ er pålidelig og effektiv, og fordelingen af ​​arbejdsbyrden baseret på asynkrone indkommende begivenheder er et mønster, som de specifikt diskuterer i deres (efter min mening, meget gode) tutorials.

Med en meddelelsesserver som denne har du én proces, der modtager den indgående e-mail. Dette gøres helst som en del af SMTP-processen, eller i det mindste meget tæt på den - især med den arbejdsbyrde, som du har nævnt. Hvis du ikke har noget andet valg, så skal dine ideer om at bruge cron til at indsamle beskeder via POP eller IMAP fungere, indtil videre.

E-mail-indsamlingsprocessen ville derefter skubbe beskeder ind i RabbitMQ-køen. (Måske ikke bogstaveligt talt selve e-mails, selvom det er en mulighed, men jeg tænkte mere som referencer til, hvor e-mailen er effektivt gemt). Du kører derefter flere arbejdsprocesser, der abonnerer på en navngivet beskedkø. RabbitMQ (eller hvilken som helst beskedtjeneste, du beslutter dig for) vil derefter distribuere disse beskeder på en round-robin måde til de individuelle abonnenter. Hvis de allerede er indlæst, kan arbejdsprocesser NACK meddelelsen eller sende deres egen kontrol flow meddelelse tilbage til tjenesten. Med en MEGET høj arbejdsbyrde (igen, som du har foreslået), vil jeg stærkt anbefale en form for administrationsproces, der holder styr på det distribuerede systems overordnede tilstand. Lederen ville indsamle køretidsstatistikker (MEGET nyttigt til fremtidig vækstplanlægning, optimering og refaktorering af det overordnede system) og have evnen til at skrue op og lukke nye arbejdsprocesser. Før du kommer til den meget høje arbejdsbyrde og antager, at dine arbejdsprocesser er stabile og kan leve længe uden hukommelsesfragmentering osv., så burde det være tilstrækkeligt at bruge beskedserveren til at distribuere arbejde.

For hvad det er værd, har jeg haft en vis erfaring med at skrive e-mail-processorer (specifikt xmail - en, som jeg vil anbefale, hvis du lige er startet på dit projekt og har meget kontrol over dets tidlige stadier). Desuden bruger jeg i øjeblikket RabbitMQ til at bygge et multi-agent resultat-cachesystem til et større videnskabeligt computernet.

Anyway...held og lykke med dit projekt!




  1. Fejl:Tabel 'mysql.proc' eksisterer ikke, når du tilføjer MySQL-datakilde til Visual Studio-projektet

  2. Find duplikerede værdier i MySQL

  3. 6 måder at konvertere en streng til en dato/tidsværdi i SQL Server

  4. JDBC udfører ikke kommandoen SHOW DATABASES