Di recente ho iniziato a studiare le sfumature dell'architettura informatica scalabile e aziendale e uno dei componenti centrali è una coda di messaggistica. Per apprendere il massimo da qualsiasi paradigma di programmazione, sto cercando di implementare la mia versione di un servizio di coda di messaggistica.
Finora, il mio progetto iniziale viene eseguito su un listener socket threaded, ma per impedire che lo stesso messaggio venga scaricato due volte da due nodi di elaborazione separati, il registro dell'indice della coda dei messaggi viene bloccato quando viene avviata una lettura e sbloccato dopo che il registro è stato aggiornato. In quanto tale, ciò nega la necessità di essere threadato e significa che esiste un limite per le dimensioni di un sistema scalabile basato sulla velocità di elaborazione del server su cui è in esecuzione il servizio di coda di messaggistica.
Il modo per aggirare il problema sarebbe eseguire il servizio di coda messaggi su più server, ma ciò aumenterà la probabilità che lo stesso messaggio venga scaricato due volte. L'unico modo per evitare che si verifichino tali problemi sarebbe quello di includere un callback di revoca che (dopo che i server, o anche i thread su un singolo server, hanno sincronizzato le loro informazioni e rilevato tale riemissione) avrebbe comandato al nodo di elaborazione di interrompere la sua lavoro corrente e interrogare nuovamente la coda dei messaggi per il messaggio successivo, ma di nuovo, ci sarebbe un limite massimo in cui la maggior parte del traffico inviato sarebbe sincronizzazioni e richiamate di revoca, causando un collo di bottiglia e rallentando l'elaborazione delle informazioni in modo che un molti dei nodi di elaborazione eseguono operazioni null e perdono tempo.
L'ultimo modo in cui riesco a risolvere questo problema è avere ogni server della coda dei messaggi (e ogni thread su ciascun server) avrebbe uno scostamento specifico su dove si trova nella coda, ma ciò potrebbe avere problemi basati sul tipo di applicazione, soprattutto se l'elaborazione deve essere eseguita in un ordine specifico.
Quindi, tutto ciò che viene detto, ci sono progetti di architettura delle code dei messaggi che potrebbero mostrarmi come i servizi esistenti di coda dei messaggi di livello aziendale evitano questi problemi?