Progettazione del sistema per un problema del server client

0

Sto cercando di progettare e implementare una soluzione per il seguente problema che sto affrontando in uno dei miei progetti.

Ci sono n (diciamo 30) client che mi inviano punti dati del modulo {timestamp, object}, dove 'timestamp' arriva in ordine rigorosamente crescente.

I (server) necessario ascoltarli e elaborare i dati aggregati di tutti i client per ciascun timestamp nei seguenti casi:

  1. Ho sentito da tutti e 30 i clienti per un singolo timestamp.
  2. Vado in time in attesa di sentire da un sottoinsieme dei client. Questo timeout inizia dopo che ho ricevuto i dati per un timestamp per la prima volta.
  3. Un sottoinsieme di client invia dati di data e ora più alti di quelli che devo elaborare (in questo caso dovrei elaborare prima del timeout per qualsiasi dato aggregato).

C'è un modo migliore di mantenere bitmap di 30 client per ogni timestamp, utilizzando thread in background per controllare continuamente le bitmap e ricevere messaggi dal processo di listener forked se viene visualizzato un timestamp più alto per qualsiasi client? Vorrei qualcosa di veloce perché la quantità di dati da ricevere in un'ora è di circa 200 GB.

Qualsiasi suggerimento è apprezzato, non ho molta esperienza nella programmazione di sistemi C ++. Si prega di commentare se avete bisogno di ulteriori dettagli su qualsiasi cosa, mi scuso per aver perso qualcosa.

Modifica: ho letto su ZeroMQ, Kafka e RabbitMQ. MQ è un buon modello per questo tipo di problema ?, in particolare con la quantità di dati che devo elaborare?

    
posta zorro 30.07.2017 - 03:27
fonte

1 risposta

1

Vorrei fare qualche lettura sull'elaborazione del flusso distribuito. Ci sono strumenti che possono operare su flussi distribuiti (pensa Apache Kafka) che possono fare cose simili alle tue esigenze. Apache Spark Streaming e Apache Trident sono due esempi di tali strumenti.

In particolare, ti permettono di scrivere applicazioni di elaborazione del flusso che fanno un sacco di lavori pesanti per te. Ad esempio, puoi impostare una finestra scorrevole che ti darà registra all'interno di quelle finestre di tempo. Dovresti essere in grado di implementare i tuoi requisiti con le funzioni con finestre.

Dato che stai eseguendo queste operazioni mentre i dati entrano nel tuo sistema, puoi cando questa elaborazione in tempo reale, ed è molto più scalabile rispetto alla ricerca di un archivio dati da 200 GB.

    
risposta data 31.07.2017 - 02:25
fonte

Leggi altre domande sui tag