struttura del server nodo e tecnologie - supporto continuo e volume elevato (quantità, non dimensione) transa di dati

-1

Ho difficoltà a pianificare la struttura del mio flusso di lavoro lato server e le tecnologie che dovrei usare.

La struttura di base e le attività sono:

Ora,aspettidaconsiderare:

1.ilserverascoltacontemporaneamentepiù"cartelle" nel DB.

  1. il server deve elaborare molte modifiche al db - circa 1000 al secondo per tutte le cartelle nel DB (non per ciascuna cartella, in totale). Le modifiche possono venire da molti utenti, il server non ha bisogno di tracciare (per ora) da dove proviene ogni cambiamento.

  2. Il processo per ottenere i dati relativi al cambiamento può essere costoso - comporta la ricerca di file di grandi dimensioni per una determinata espressione al loro interno. Tuttavia, i dati che vengono memorizzati nell'Ogg per quanto riguarda il cambiamento non sono così grandi. La dimensione della modifica Obj non è grande - JSON Obj con circa 20 linee corte ciascuna, in alto.

  3. L'ordine di creare la modifica Obj e inviarlo all'interfaccia utente può essere qualsiasi ordine, perché un indicatore orario è parte dei dati memorizzati nell'Ogg, e farò in modo che l'UI ordini tutto (o forse dovrei farlo sul lato server? dove vorresti mettere questo compito?). Perciò sto facendo le modifiche al caricamento e inviando l'Obj ai processi dell'interfaccia utente asincrona.

  4. L'interfaccia utente e le sue comunicazioni con il server nodo devono essere compatibili con Microsoft Explorer (la versione può essere determinata da me). Le librerie esterne possono essere utilizzate per raggiungere questo, se necessario. Il server riceverà messaggi dall'interfaccia utente, come "start" e "stop", non continua quelli.

Quello che voglio evitare è:

  1. rallentamento del server dovuto all'ascolto di più cartelle e alla gestione di così tante modifiche contemporaneamente.

  2. intasare la connessione tra il server e l'interfaccia utente inviando così tanti cambiamenti Objs.

Quando ho cercato informazioni su questo problema, ho trovato molte tecnologie utili:

  1. Librerie Websocket: ws, socket.io, ecc.

  2. Cluster di nodi.

  3. Emittore di eventi del server.

  4. Pacchetti e librerie di nodi per la funzionalità "ascolta" - fs, chokidar, ecc.

Quindi mi stavo chiedendo:

Qual è la struttura e le tecnologie migliori da utilizzare per ciascuna parte del flusso di lavoro in questo caso?

Dovrei usare websockets? VEDERE? o semplice API REST HTTP (con res.write in express)?

I Nodi Cluster possono aiutare l'ascolto parallelo e il recupero dei dati ogni volta che la cartella cambia?

Qual è il modo più efficiente per gestire così tante modifiche e inviarle all'interfaccia utente?

Sto cercando consigli su ogni passaggio, ad esempio:

Passaggio 1: l'ascolto di più cartelle viene eseguito in modo più efficiente utilizzando la tecnologia X, perché ...

Passaggio 2: ....

Grazie mille!

Yishai

    
posta mizenetofa1989 19.10.2017 - 17:49
fonte

1 risposta

0

OK, quindi. Il modo migliore per risolvere questo tipo di problema è catturare l'azione dell'utente iniziale e attivarla dal tuo processo anziché monitorare gli effetti del processo esistente e provare a dedurre cosa è successo.

Ma non ci hai dato alcuna informazione su cosa sia quell'azione, quale tecnologia usi, se puoi modificarla ecc. Dovremo guardare ad altri modi per ottenere un "aggancio" nel sistema.

Assumiamo che si tratti di un software di terze parti su cui non hai controllo e che non offre API o hook.

Avanti, abbiamo il database. Ancora una volta non è chiaro come questo si inserisca nel quadro. Ma il suo MongoDB. che sfortunatamente non ha Trigger. Se fosse MSSQL, potresti aggiungere trigger alle tue tabelle e convincerli a eseguire qualsiasi processo personalizzato.

Ora ci sono apparentemente alcuni trucchi che puoi usare. vedi questa domanda link

Andiamo avanti e supponiamo che quelli non risolveranno il tuo problema. Si arriva quindi a queste "multiple" cartelle "nel DB" si assume che si tratti di file txt su linux.

Ci sono alcuni strumenti che possono attivare il comando degli eventi del file system: link

Se lo imposti per monitorare i file che ti daranno un aggancio.

Una volta che hai il tuo Hook, ti consiglio di usarlo per creare un messaggio su un sistema di accodamento come rabbitMQ. Ciò ti consentirà di eseguire tutti gli altri programmi ed eventi dal sistema di accodamento, piuttosto che doversi preoccupare di come l'evento abbia avuto inizio.

Infine, come si fa a "spingere" l'evento su un client del browser? Qui come hai già scoperto, websockets fornisce una soluzione e il tuo sistema di accodamento ti aiuterà a ridimensionare gli eventi su più server web.

.... Comunque tornerò all'inizio e dirò, anche se ho visto sistemi che monitorano i file e fanno cose quando cambiano. Sono sempre stati fragili ed efficacemente tenuti insieme con lo spago. Probabilmente puoi mettere insieme qualcosa, ma se stai "pianificando la struttura del mio flusso di lavoro lato server e le tecnologie", allora sarebbe meglio tornare indietro e catturare l'azione dell'utente iniziale che attiva la modifica.

    
risposta data 19.10.2017 - 21:15
fonte

Leggi altre domande sui tag