Come calcolare la velocità di flusso del traffico web?

1

Sembra che dovrebbe essere abbastanza semplice, ma ho un diavolo di tempo con esso. Sperando che alcuni di voi possano essere in grado di dare una mano,

Sto usando PHP & MySQL e desidera calcolare le velocità di flusso del traffico verso determinate pagine Web. In definitiva, desidero essere in grado di inviare avvisi quando le velocità di flusso aumentano o diminuiscono drasticamente in determinati periodi di tempo. Per ora sto pensando che mi piacerebbe monitorare a intervalli di 5 minuti, 30 minuti, 60 minuti, 5 ore e 24 ore.

Il modo "facile" per farlo sarebbe probabilmente quello di registrare ogni singola richiesta di pagina come una voce separata nel mio DB e poi contarli e fare diversi calcoli di date, ecc. Ma io davvero non voglio creare una nuova riga per ogni richiesta. Preferirei semplicemente incrementare i contatori e risolverli, ma al momento sono completamente perplesso.

Quale sarebbe la via più facile per fare questo? I miei tentativi finora sono stati così lontani dal marchio che non ho nemmeno un codice da condividere.

    
posta Jonathan van Clute 20.07.2015 - 03:35
fonte

2 risposte

2

Sei sulla strada giusta: ogni richiesta di pagina web deve essere monitorata, ma devi farlo è molto semplice. Quindi il problema passa all'analisi statistica di questi contatori, ed è abbastanza facile.

Dimentica la memorizzazione di ogni pagina web nel DB, invece devi memorizzarlo nella cache (poiché non ti interessa davvero la velocità di flusso quando il sistema viene riavviato) e sarà molto più veloce da calcolare e non sarà una tormenta sistema il tuo sistema scrivendo migliaia di contatori sul DB.

Non memorizzare il timestamp, invece crea un bucket di richieste, mantieni questo incrementato al minuto (che è la tua granularità minima), così hai una matrice delle ultime 24 ore (1440 voci) con il numero di richieste ciascuna minuto memorizzato in ciascun elemento.

Ora devi solo sommare i numeri in ciascuno degli ultimi n elementi, confrontarli con l'elemento corrente e se il numero corrente è x rispetto alla somma degli altri, fai scattare l'avviso. Potresti ottimizzare questo eseguendo le somme per i periodi di avviso e memorizzandoli in un insieme di variabili ogni volta che i minuti cambiano.

    
risposta data 20.07.2015 - 09:51
fonte
0

Se si desidera eseguire il rollover, anziché archiviare in base al timestamp, è possibile utilizzare l'id del thread o il minuto equivalente e corrente del giorno per creare una chiave composita di chiave univoca e incrementare il valore associato ogni volta che si riceve una richiesta. Quindi, dopo ogni minuto, puoi aggregare tutte le richieste per quel minuto in tutti i thread per ottenere un valore di utilizzo da utilizzare nel prendere le tue decisioni.

In alternativa, ci sono librerie per fare questo genere di cose.

    
risposta data 20.07.2015 - 04:17
fonte

Leggi altre domande sui tag