Architettura di un servizio Windows con Message Broker (Rabbit MQ)

0

Ho sviluppato un servizio Windows con Message Broker (RabbitMQ)

Lo scopo del servizio è di ricevere dati tramite connessione TCP / UDP. Analizza i dati in arrivo in formato HEX e convertili in oggetti e salva l'oggetto nel database. Inoltre, il servizio esegue alcuni calcoli e controlla l'invio di avvisi / notifiche.

Il numero di dispositivi è di circa 3000 - 3500.

Il servizio è sviluppato in C #, Rabbit MQ, Entity Framework e SuperSocket.NET.

Inoltre ho implementato il caching per la lettura dei dati dal database.

Quindi questa è una panoramica dell'architettura.

Parte A -

1 - Our service receives the data over TCP/UDP.

2 - Parse the HEX string to objects and saves them to the database.

3 - Push the object to the Message Queue for further processing.

Parte B -

1 - Receives the object from Message Queue

2 - Performs a heavy calculation and saves to database

3 - Calculate events and send out email and sms alerts/notifications (dependent on Part B --> step 2)

Ora il problema è che poiché la Parte A elabora i dati così velocemente, la coda viene riempita con 200.000 record in 2 ore.

Ho provato a creare più code nella parte B per elaborare i record, ma la percentuale di messaggi in arrivo è ancora superiore a quella in uscita.

Ho bisogno di una guida su cosa fare, dato che ho esaurito le idee su come migliorare il servizio, in quanto questa è la seconda volta che ho rifatto l'intero servizio.

    
posta Dawood Awan 18.12.2017 - 08:20
fonte

1 risposta

3

Dividi la parte B in più servizi.

Il servizio B esegue il calcolo pesante.

Una volta eseguito il calcolo pesante, inserirlo in un'altra coda e disporre di due servizi che scrivono i dati calcolati sul DB (C) e che inviano avvisi (D).

In questo modo, puoi eseguire più istanze del pesante servizio di calcolo. È persino possibile scalare il numero di istanze di computazione pesante in modo dinamico in base alle dimensioni della coda dei messaggi.

es. A B B B B C D.

E se è ancora troppo lento, puoi persino eseguire le B su server dedicati con più potenza ....

    
risposta data 18.12.2017 - 09:08
fonte

Leggi altre domande sui tag