Creazione di un sistema di consegna e-mail scalabile

0

Voglio correggere il mio attuale sistema di consegna di email che invia email utilizzando un provider di posta elettronica di terze parti e crea un record per ogni email inviata in RDS. Funzionalmente questo è come si comporta il sistema -

  • Un utente crea Campagna per inviare email ai propri lead. Una campagna può essere inviata a un massimo di 1 milione di utenti
  • Una campagna creata viene archiviata in una tabella denominata campaign . La tabella memorizza anche le informazioni sui lead (condizione JSON) a cui è necessario inviare l'e-mail
  • Viene eseguito un lavoro che esegue il polling di campaign tabella e calcola i lead effettivi dal conditon JSON e recupera i loro indirizzi email dalla tabella lead
  • Più istanze di questo lavoro vengono eseguite in base al numero di campagne in attesa (in coda)
  • Un nuovo thread preleva l'elenco ottenuto nel passaggio precedente e invia le e-mail alla rinfusa di 50 e-mail utilizzando l'API del provider di servizi di posta elettronica di terze parti
  • Per ogni email inviata viene creato un record nella tabella Email . La tabella memorizza le informazioni del mittente e del ricevente insieme allo stato dell'e-mail. La tabella ha anche relazione con campaign tabella
  • Le informazioni sui rimbalzi via e-mail vengono ricevute utilizzando un webhook e lo stato di tali e-mail è impostato su "rimbalzato" in Email tabella
  • La tabella email viene utilizzata per creare diversi tipi di rapporti come trovare i lead a cui l'email è stata inviata utilizzando una determinata campagna da parte di un determinato utente
  • Le colonne della tabella Email vengono indicizzate perché vengono pesantemente lette su più parti dell'applicazione. A causa di questo, le scritture sul tavolo sono diventate più lente
  • Nel caso in cui molte e-mail vengano accodate per l'elaborazione e vengano generati più processi, le scritture sulla tabella Email diventano un collo di bottiglia, che causa lag di replica e impatti sui report in vari punti

Il mio obiettivo è rendere più rapidi gli inserimenti e le letture sulla tabella Email che non è possibile utilizzando RDS.

C'è un altro modo che posso usare per scalare questo sistema con la capacità di inviare milioni di email?

Vedo la ricerca elastica come un'opzione per la memorizzazione della tabella Email . Poiché Elastic Search non è un archivio dati principale, è necessario creare applicazioni per sincronizzare questi dati con una memoria persistente. Correggimi se sbaglio.

    
posta Jaguar 05.04.2018 - 09:20
fonte

1 risposta

-1

Sembra che siano i rapporti a rallentarti.

Sposta tutti i rapporti in un datawarehouse su una casella separata.

Se questo non lo risolve.

Dividi l'app in modo che vengano eseguite campagne diverse su database separati.

    
risposta data 05.04.2018 - 09:30
fonte

Leggi altre domande sui tag