Recentemente ho iniziato a imparare le sfumature dell'architettura computerizzata scalabile e aziendale e uno dei componenti centrali è una coda di messaggistica. Per imparare di più 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 di 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 il il registro è stato aggiornato. In quanto tale, ciò annulla la necessità che venga eseguito il threading e indica che esiste un limite per le dimensioni di un sistema scalabile basato sulla velocità di elaborazione del server su cui è in esecuzione il servizio della coda di messaggistica.
Il modo per aggirare questo sarebbe eseguire il servizio di accodamento messaggi su più server, ma questo aumenterebbe la probabilità che lo stesso messaggio venga scaricato due volte. L'unico modo per evitare che tali problemi si verifichino è 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 fermarne il funzionamento lavoro corrente, e ri-interrogare la coda dei messaggi per il messaggio successivo, ma di nuovo, ci sarebbe un limite in cui la maggior parte del traffico inviato sarebbe sincronizzazioni e callback di revoca, causando un collo di bottiglia e rallentando l'elaborazione delle informazioni in modo che un molti dei nodi di elaborazione effettuerebbero operazioni nulle e perdite di tempo.
L'ultimo modo in cui posso pensare di aggirare questo problema è che ogni server di messaggi (e ogni thread su ciascun server) abbia uno specifico offset rispetto a dove si trova nella coda, ma potrebbe avere problemi in base al tipo di applicazione, in particolare se è necessario eseguire l'elaborazione in un ordine specifico.
Quindi, tutto ciò che viene detto, ci sono disegni di un'architettura di messaggi in coda che potrebbe mostrarmi come i servizi esistenti di coda di messaggi di livello enterprise evitino questi problemi?