Attualmente sto lavorando a un nuovo progetto open-source per un'ispezione dei pacchetti. Non ho quasi nessuna esperienza con la progettazione di un'architettura. Vorrei quindi chiedere la tua opinione sulla mia attuale architettura e su quali problemi potrei affrontare durante il ridimensionamento.
Ho un set di file di acquisizione di pacchetti di grandi dimensioni con traffico di rete. Questi file di acquisizione sono tutti catturati sulla stessa macchina e si susseguono nel tempo. Il mio compito principale è ricostruire tutti i flussi di rete che stavano accadendo in questi file. I flussi possono estendersi su più file.
Ecco quello che ho finora: Non voglio trasferire file su una rete perché sono relativamente grandi, quindi ho scritto un piccolo servizio web che riceve query con i seguenti parametri: numero di file, offset e quantità di byte. Questo servizio di invio risponde con byte da questa posizione.
Un'altra parte è un separatore. Inizia da un semplice offset di pacchetto e fa iterativamente i seguenti passaggi:
- Ottieni byte per la prossima intestazione del protocollo in questo pacchetto
- Analizza l'intestazione
- Invia informazioni per aggiornare le informazioni sul flusso di rete a un terzo componente
- Analizza qual è il protocollo successivo nello stack del protocollo nel pacchetto
Infine, la terza parte: re-constructor del flusso: È un insieme di oggetti che contiene alcune meta informazioni su un flusso (ad esempio indirizzi IP, porte TCP) e un elenco di file con offset e dimensioni per descrivere il carico utile del flusso.
Le mie domande:
- Penso che implementare "send service" e "re-constructor" da solo non sia una buona idea. Quale può essere una soluzione più ottimale in termini di prestazioni.
- Attualmente sto usando rabbitMQ per comunicare tra i componenti. Esiste una soluzione più produttiva?
- Stavo pensando di creare più istanze di separatori (magari su macchine separate) quindi ho bisogno di alcuni meccanismi per orchestrare la consegna dei byte.
- "Separatore" sprecano molto tempo solo in attesa di una consegna di byte. Come posso migliorarlo?
Inoltre, apprezzo molto qualsiasi suggerimento o commento sull'architettura attuale. Per favore aiutate l'architetto principiante e il collaboratore open-source:)