Devo scrivere un servizio che legge i dati (una riga) da un database, invia messaggi SQS AWS e infine cancella i dati dal DB.
Lasciami spiegare usando un esempio. Ho una tabella di database D, il servizio S e la coda SQS Q. Ogni minuto, il servizio S, legge una riga (R1) da D, la analizza e invia un messaggio SQS a Q, e infine cancella la riga R1.
Il problema è che questo è un servizio critico e quindi ho bisogno di ridondanza. Inoltre, il messaggio SQS per ogni riga deve essere inviato esattamente una volta.
Possibili soluzioni a cui ho pensato (e problemi con esse):
-
Processi multipli: Posso eseguire lo stesso script su più server. La probabilità che tutti loro si schiantino insieme è bassa. Tuttavia, questo può comportare l'invio di più messaggi SQS per la stessa riga. I processi P1 e P2 potrebbero leggere e inviare messaggi SQS per la stessa riga. Se elimino la riga, prima di inviare il messaggio SQS e il processo si blocca, potrei perdere definitivamente la riga senza inviare alcun messaggio.
-
Processi multipli che funzionano con un ritardo: Posso eseguire più processi. P1 funziona come spiegato sopra. P2 opera con la verifica che elabori le righe che sono almeno (ad esempio 10 minuti). P3 opera su righe che sono almeno (ad esempio) vecchie di 20 minuti. Quindi se P1 si blocca, P2 può elaborare i dati. Se P1 e P2 si bloccano, P3 gestisce il carico, ecc. Il problema con questo approccio è che può causare ritardi nell'elaborazione.
Esistono schemi standard di progettazione / architettura che posso utilizzare per un simile problema?
Grazie!