Ho erroneamente supposto che il mio test AB interno significa che il mio server è in grado di gestire 1k di concorrenza @ 3k hit al secondo.
La mia teoria al momento è che la rete è il collo di bottiglia. Il server non può inviare abbastanza dati abbastanza velocemente.
I test esterni di blitz.io con 1k di concorrenza mostrano che i miei successi si chiudono a 180, con pagine che impiegano sempre più tempo a rispondere poiché il server è in grado di restituire solo 180 al secondo.
Ho servito un file vuoto da nginx e lo ho messo in panchina: scala 1: 1 con concorrenza.
Ora per escludere i colli di bottiglia di IO / memcached (normalmente nginx estrae da memcached), offro una versione statica della pagina cache dal filesystem.
I risultati sono molto simili al mio test originale; Sono limitato a circa 180 RPS.
Dividere la pagina HTML a metà mi dà il doppio dell'RPS, quindi è decisamente limitato dalle dimensioni della pagina.
Se apache internamente ApacheBench dal server locale, ottengo risultati coerenti di circa 4k RPS sia sulla pagina intera che sulla mezza pagina, a velocità di trasferimento elevate. Velocità di trasferimento: 62586,14 [Kbyte / sec] ricevuti
Se eseguo AB da un server esterno, ottengo circa 180 RPS, come i risultati di blitz.io.
Come faccio a sapere che non è un throttling intenzionale?
Se eseguo il benchmark da più server esterni, tutti i risultati diventano scarsi, il che mi porta a credere che il problema sia nel traffico in uscita dei MIEI server, non un problema di velocità di download con i miei server di benchmark / blitz.io.
Quindi sono tornato alla mia conclusione che il mio server non è in grado di inviare dati abbastanza velocemente.
Ho ragione? Esistono altri modi per interpretare questi dati? È la soluzione / ottimizzazione per impostare più server + bilanciamento del carico che può servire a 180 accessi al secondo?
Sono abbastanza nuovo per l'ottimizzazione del server, quindi apprezzerei qualsiasi conferma interpretando questi dati.
Traffico in uscita
Ecco ulteriori informazioni sulla larghezza di banda in uscita: il grafico di rete mostra un output massimo di 16 Mb / s: 16 megabit al secondo. Non suona molto.
A causa di un suggerimento sulla limitazione, ho esaminato questo e ho scoperto che linode ha un limite di 50 Mbps (che a quanto pare non sono nemmeno vicino a colpire). L'ho fatto alzare a 100 Mbps.
Dato che linode limita il mio traffico e non lo sto nemmeno colpendo, questo significa che il mio server dovrebbe davvero essere in grado di produrre fino a 100 Mbps ma è limitato da qualche altro collo di bottiglia interno? Semplicemente non capisco come funzionano le reti su così larga scala; possono letteralmente inviare dati più velocemente che possono leggere dall'HDD? La pipe di rete è così grande?
In conclusione
1: Sulla base di quanto sopra, sto pensando di poter sicuramente aumentare il mio 180RPS aggiungendo un bilanciamento del carico nginx sopra una configurazione del server multi nginx esattamente a 180RPS per server dietro l'LB.
2: Se linode ha un limite di 50 / 100mbit che non sto colpendo affatto, ci deve essere qualcosa che posso fare per raggiungere quel limite con la mia configurazione a server singolo. Se riesco a leggere / trasmettere dati abbastanza velocemente localmente e linode disturba anche avere un limite di 50mbit / 100mbit, ci deve essere un collo di bottiglia interno che non mi consente di colpire quei tappi che non sono sicuro di come rilevare. Corretta?
Mi rendo conto che la domanda è enorme e vaga ora, ma non sono sicuro di come condensarla. Ogni input è apprezzato per qualsiasi conclusione che ho fatto.