Fondamentalmente questa domanda riguarda la varietà "Posso verificare che non stiamo per fare qualcosa di stupido?"
Stiamo impostando un nuovo sistema che deve garantire la consegna delle email.
Abbiamo un sistema esistente che elabora le transazioni finanziarie e che vogliamo disaccoppiare dall'invio delle ricevute (che attualmente sta gestendo da solo), quindi stiamo impostando un secondo servizio per scaricare le ricevute di invio. Il servizio di posta elettronica è completamente indipendente, ha un proprio database, riceve solo eventi dal sistema finanziario per dirgli quali email inviare.
Inizialmente pensavamo di utilizzare un pub / sub (probabilmente Google) per le comunicazioni tra i sistemi.
Ma mentre progettavamo i sistemi attorno ad esso, ci siamo resi conto che il processo di lavoro nel sistema di posta elettronica stava semplicemente togliendo messaggi da pub / sub e inserendoli in una tabella Postgres, che un altro processo poi inoltra tramite e-mail.
Abbiamo anche il buffering dei messaggi da pubblicare sul lato di pubblicazione, poiché anche se google pub / sub è molto affidabile, potrebbe non essere al 100%.
Quindi ci siamo chiesti perché abbiamo persino bisogno del pub / sub, perché non avere un sistema webhooks e avere l'operatore di messaggistica nel sistema finanziario ping un webhook sul sistema di posta elettronica?
Dato che pub / sub è un modello di progettazione così comune per risolvere questo tipo di problema, sono preoccupato che ci sia qualcosa che ci manca nei nostri pensieri?
Le prestazioni sembrano l'ovvia ragione, ma dato che il sistema finanziario deve fare quanto segue:
- Inserisci una transazione nel suo database
- Contatta il gateway di pagamento
- Contrassegna la transazione come pagato
- Coda che invia un messaggio nel DB
(Quindi un lavoratore annulla il messaggio e colpisce il webhook)
Mentre il processo webhooks nel servizio email deve solo
-
Inserisci l'evento del messaggio nel database
(lascia che un processo worker si occupi di elaborare quell'evento)
Mi sembra che il sistema finanziario non sarà mai in grado di muoversi abbastanza velocemente da sovraccaricare il webhook al servizio di posta elettronica. L'elaborazione delle transazioni dovrebbe sempre essere un collo di bottiglia più grande.