Ho creato un setup che risolve il mio problema, ma ho praticamente hackerato insieme leggendo i documenti AWS e provando le cose, quindi voglio vedere se c'è un modo migliore.
Ai fini di questa discussione definiamo un "compito" come un insieme di processi che 1) raccoglie i dati, 2) elabora i dati e 3) memorizza i dati elaborati. Supponiamo che tutte le attività siano indipendenti, nel senso che ogni attività può essere svolta rispetto allo stato di qualsiasi altra attività. In ogni momento c'è una lista di compiti che devono essere completati in modo asincrono ad intervalli di tempo regolari (per esempio ogni 2 minuti).
Attualmente sto usando quello che chiamerò un modello "una sola operazione per istanza". Ciò significa che ogni 2 minuti uno schedulatore mette ogni attività in lista in una coda e una raccolta di istanze worker letta dalla coda ed esegue le attività dall'inizio alla fine in modo asincrono. Funziona piuttosto bene, ma in rare occasioni mi imbatto in problemi quando un'attività richiede troppo tempo e lega una delle istanze. Inoltre, c'è molto tempo di inattività dopo che un'attività è stata completata (in genere solo 30 secondi o giù di lì) e prima del prossimo ciclo di attività pianificate.
Quindi sto pensando di passare a quello che chiamerò un modello di "catena di montaggio". Ciò significherebbe avere una raccolta di istanze che sono esperti sulla prima parte di un'attività (raccolta di dati), un'altra raccolta che sono esperti sulla seconda parte (elaborazione dei dati) e così via. Specializzando le istanze, la mia speranza è che sarei in grado di ottenere in modo più efficiente la stessa velocità di elaborazione per ogni attività (una volta ogni 2 minuti) e ridurre il rischio di un inceppamento del log se una parte di un'attività richiede troppo tempo. Lo svantaggio principale che posso vedere è che richiederebbe un maggiore coordinamento tra le istanze: le istanze di elaborazione dei dati dovrebbero attendere che le istanze di raccolta dati finiscano e così via. E non ho mai fatto nulla di simile prima, quindi sono preoccupato di ricostruire la mia intera configurazione solo per essere paralizzato da un difetto imprevisto.
Quindi cosa pensa la gente? Ci sono motivi per preferire la catena di montaggio a un compito per istanza? Ci sono modi per migliorare o semplificare entrambi i modelli come l'ho descritto? C'è un modello ancora migliore a cui non ho pensato?