Scrittura dell'architettura del processo degli eventi per più interfacce del gestore di eventi

1

Sto lavorando su un programma Java che ascolterà più tipi di eventi da più fonti e memorizzerà le informazioni su più sink.

Ogni interfaccia avrà la propria fonte di ascolto e il proprio sink per memorizzare i dati. La frequenza degli eventi può essere centinaia di migliaia di eventi al secondo. Poiché la frequenza degli eventi è di grande entità, non dovrebbe esserci alcuna perdita di dati. L'applicazione deve essere scalabile e deve fornire buone prestazioni nelle ore di punta.

Devo scrivere diverse classi principali per eseguire ciascuna interfaccia separatamente o un'applicazione multi-thread che gestirà tutte le interfacce.

Si prega di suggerire l'architettura giusta per il mio requisito.

    
posta Ashish Nijai 07.09.2018 - 21:56
fonte

1 risposta

0

Ok, quindi per prima cosa togliamo l'aspetto multi-thread.

Entrambi i programmi dovrebbero essere multithread e non solo avendo più processori di messaggi a thread singolo.

Ora la questione della scalabilità.

La risposta del libro è di avere molti programmi ciascuno con un singolo tipo di messaggio.

Metti un'istanza di un programma per macchina virtuale e ridimensiona aggiungendo le macchine virtuali come richiesto.

Tuttavia. girare su e giù per macchine virtuali o persino contenitori non è istantaneo. anche correggere le macchine sul tuo programma è un problema difficile.

Spesso è più facile avere una VM con più potenza di elaborazione del necessario e inserire uno di ciascun tipo di processore di messaggi su di essa.

In questo modo, quando crei una nuova casella, ti preoccupi solo del carico totale, non del singolo carico di ciascun tipo di messaggio.

Inoltre è probabile che molti dei tuoi tipi di messaggi siano a volume molto basso. Non è economico mantenere un'intera scatola in esecuzione solo per gestire un paio di messaggi al giorno. (in realtà almeno due box e infrastruttura di bilanciamento del carico)

Ora l'esecuzione di più istanze su una singola casella risolve questi problemi, ma poiché competono tutti per le stesse risorse della cpu / rete / disco non è super efficiente.

Tuttavia, se ho un singolo programma in grado di gestire più tipi di messaggi, posso avere un controllo migliore su quanti scelgo di elaborare contemporaneamente.

Poiché il programma sa che ha tutte le risorse sul computer e può scegliere esattamente quanti messaggi elaborare in un momento, può allocare queste risorse in modo più efficace.

C'è ovviamente ancora l'argomento su come mantenere separata la tua logica di business. Ma in un sistema che ha molti bassi volumi per tipo, basso costo della CPU per elaborare i messaggi. Un processore di messaggi multitaspe potrebbe essere la soluzione giusta.

    
risposta data 08.09.2018 - 09:02
fonte