Qual è la latenza ENTRO un data center? Lo chiedo supponendo che ci siano ordini di grandezza di differenza


17

Sto cercando di capire qualcosa a cui non riesco proprio a trovare una buona risposta.

Se dico una cache REDIS (o una cache in memoria esterna) che si trova in un centro dati e un server applicazioni che si trova nello stesso centro dati, quale sarà la velocità della connessione di rete (latenza, velocità effettiva) per la lettura dei dati tra queste due macchine?

La "velocità" della rete, ad esempio, sarà comunque almeno di un ordine di grandezza superiore alla velocità della RAM che sta cercando i miei dati dalla cache su REDIS?

La mia ultima domanda è: avere tutto questo in memoria su REDIS in realtà fornisce qualche utilità? In contrasto con se REDIS stava invece memorizzando nella cache tutto questo su un SSD? La memoria è costosa. Se la rete non è effettivamente un collo di bottiglia ALL'INTERNO del data center, la memoria ha un valore. Altrimenti no.

Immagino che la mia domanda generale sia nonostante le enormi incognite nei data center e l'incapacità di generalizzare, nonché le varianze, stiamo parlando di sufficienti ordini di grandezza tra la latenza della memoria in un sistema informatico e persino le migliori reti interne a un DC che la memoria ha latenze ridotte non forniscono un significativo miglioramento delle prestazioni? Capisco che ci sono molte variabili, ma quanto è vicino? È così vicino che queste variabili contano? Ad esempio, prendi una posizione iperbolica su di esso, un'unità a nastro è molto più lenta della rete, quindi il nastro non è l'ideale per una cache.


1
Dipende anche dal numero di roundtrip per transazione, questo è spesso il vero problema che si è serializzato in una sequenza di query. Un'interfaccia di query più complessa, una procedura lato server o una cache denormalizwd possono ridurre l'impatto.
Controlla il

Risposte:


19

Esistono diverse versioni dei "grafici di latenza che tutti dovrebbero conoscere" come:

Il fatto è che, in realtà, c'è molto di più della semplice latenza. È una combinazione di fattori.

Quindi, qual è la latenza della rete all'interno di un data center? Latenza, direi che è "sempre" sotto 1ms. È più veloce della RAM? No. È vicino alla RAM? Io non la penso così.

Ma la domanda rimane, è pertinente. È questo il dato che devi conoscere? La tua domanda ha senso per me. Dato che tutto ha un costo, dovresti ottenere più RAM in modo che tutti i dati possano rimanere nella RAM o che sia ok leggere di tanto in tanto dal disco.

Il tuo "presupposto" è che se la latenza della rete è più alta (più lenta) della velocità dell'SSD, non otterrai nulla avendo tutti i dati nella RAM in quanto avrai il lento sulla rete.

E sembrerebbe così. Ma devi anche tener conto della concorrenza. Se ricevi 1.000 richieste per i dati contemporaneamente, il disco può fare 1.000 richieste simultanee? Certo che no, quindi quanto tempo ci vorrà per soddisfare quelle 1.000 richieste? Rispetto alla RAM?

È difficile ridurlo a un singolo fattore come i carichi pesanti. Ma sì, se avessi una singola operazione in corso, la latenza della rete è tale che probabilmente non noteresti la differenza tra SSD e RAM.

Proprio come fino a quando il disco da 12 Gbps non è apparso sul mercato, un collegamento di rete da 10 Gbps non sarebbe stato sovraccaricato da un singolo flusso poiché il disco era il collo di bottiglia.

Ma ricorda che il tuo disco sta facendo molte altre cose, il tuo processo non è l'unico processo sulla macchina, la tua rete può trasportare cose diverse, ecc.

Inoltre, non tutte le attività su disco significano traffico di rete. La query del database proveniente da un'applicazione al server del database è solo un traffico di rete molto minimo. La risposta dal server di database può essere molto piccola (un singolo numero) o molto grande (migliaia di righe con più campi). Per eseguire l'operazione, potrebbe essere necessario che un server (server di database o meno) esegua più ricerche, letture e scritture su disco, ma che invii solo un bit molto piccolo sulla rete. Non è sicuramente uno-per-uno-network-disk-RAM.


Finora ho evitato alcuni dettagli della tua domanda, in particolare la parte Redis.

Redis è un archivio di strutture di dati in memoria open source (con licenza BSD), utilizzato come database, cache e broker di messaggi. - https://redis.io/

OK, questo significa che tutto è in memoria. Siamo spiacenti, questa veloce unità SSD non ti aiuterà qui. Redis può conservare i dati su disco, quindi possono essere caricati nella RAM dopo un riavvio. Questo è solo per non "perdere" i dati o dover ripopolare una cache fredda dopo un riavvio. Quindi, in questo caso, dovrai usare la RAM, qualunque cosa accada. Dovrai avere abbastanza RAM per contenere il tuo set di dati. RAM insufficiente e suppongo che il tuo sistema operativo userà swap, probabilmente non è una buona idea.


Grazie. Questo è davvero utile. Ci sono davvero molte varianti contestuali che hanno attinenza con questo. Se ignoriamo i carichi pesanti per un momento, dalla tua risposta sembra che la latenza di rete sia il collo di bottiglia, quindi la latenza aggiuntiva di SSD vs RAM non è abbastanza significativa da importare. Ma ora, se prendiamo in considerazione carichi pesanti, le differenze di latenza dell'SSD rispetto alla RAM iniziano a peggiorare, e ora la RAM brillerà. È questo a cosa si riduce allora?
Neeraj Murarka,

1
È difficile ridurlo a un singolo fattore di carichi pesanti. Ma sì, se avessi una singola operazione in corso, la latenza della rete è tale che probabilmente non noteresti la differenza tra SSD e RAM. Proprio come fino a quando il disco a 12 Gbps non è apparso sul mercato, un collegamento di rete a 10 Gbps non sarebbe stato sovraccaricato da un singolo flusso poiché il disco era il collo di bottiglia. Ma ricorda che il tuo disco sta facendo molte altre cose, il tuo processo non è l'unico processo sulla macchina, ecc.
ETL

1
Si noti inoltre che ci sono molti altri fattori da considerare oltre alla latenza, in particolare che la maggior parte dei servizi reali deve eseguire più istanze del programma server su macchine diverse, quindi "tutto nella RAM localmente" normalmente non è affatto un'opzione pratica.
Chrylis -on strike -

Ma un collegamento di rete 10g è di fascia bassa. I miei server sono collegati al mio backbone con 200gigabit (sì, collegamenti 2x100g).
TomTom,

3

Esistono molti livelli di cache nei sistemi informatici. Inserirne uno a livello di applicazione può essere utile, memorizzare nella cache le API e le query del database. E possibilmente dati temporanei come sessioni utente.

Gli archivi di dati come Redis forniscono tale servizio su una rete (veloce) o su un socket UNIX (ancora più veloce), proprio come si farebbe con un database.

Devi misurare il rendimento effettivo della tua applicazione, ma facciamo un esempio. Supponiamo che una richiesta utente comune esegua 5 query API che richiedono 50 ms ciascuna. 250 ms è la latenza rilevabile dall'utente. Contrariamente alla memorizzazione nella cache dei risultati. Anche se la cache si trova in una zona di disponibilità diversa in tutta la città (non ottimale), gli hit hanno probabilmente 10 ms al massimo. Quale sarebbe uno speedup 5x.

In realtà, anche il database e i sistemi di archiviazione hanno le loro cache. Tuttavia, in genere è più veloce ottenere un risultato precaricato che passare nuovamente attraverso il motore di database e i livelli del sistema di archiviazione. Inoltre, il livello di memorizzazione nella cache può rimuovere un carico significativo dal database dietro di esso.

Per un esempio di tale cache in produzione, non guardare oltre il blog sull'infrastruttura Stack Overflow sull'architettura . Centinaia di migliaia di richieste HTTP che generano miliardi di hit Redis sono piuttosto significative.

La memoria è costosa.

La DRAM con tempi di accesso di 100 ns è circa 100 volte più veloce della memoria permanente a stato solido. È relativamente economico per questa prestazione. Per molte applicazioni, un po 'più di RAM acquista preziose velocità e tempi di risposta.


Puoi chiarire come hai calcolato che ciascuna di queste 5 query API impiega 50 ms ciascuna? È sotto la maschera dell'applicazione che colpisce il database e fa la query e calcola il set di risultati, piuttosto che colpire una cache in tutta la città che sembra aver memorizzato nella cache la stringa di query stessa come chiave e avere una copia cache di quel risultato impostato?
Neeraj Murarka,

1
Ho inventato quei numeri, ma sì. Fare una query e calcolare di nuovo un risultato è probabilmente più lento di ottenere quel risultato pre-calcolato. Implementazioni come Redis tendono ad essere in memoria per semplicità e velocità. Anche attraversare una rete IP o il trasporto socket UNIX può essere abbastanza veloce. Detto questo, questa roba da cache non è richiesta per ogni progetto.
John Mahowald,

Inteso. Penso di capire più o meno. Sembra che in molti casi, ma non sempre, anche spostandosi dal data center a una cache vicina che si trova forse nello stesso stato degli Stati Uniti (o provincia canadese, ecc.) (Forse la regione è un buon semantico) può spesso essere un grande vantaggio rispetto al processo cercando di ricalcolare il valore in modo algoritmico dal proprio database locale, se in effetti provoca un hit nella cache. Ma poi, la cache che potrebbe trovarsi in remoto non offre un sacco di valore essendo in memoria. Potrebbe anche essere basato su SSD.
Neeraj Murarka,

1
Il datacenter remoto è il caso peggiore, idealmente il livello di cache è inferiore a 1 ms dai suoi client. Forse la stessa zona di disponibilità o anche sullo stesso host. Se lo desideri, puoi memorizzare nella cache in un archivio permanente. In alternativa, è possibile utilizzare tale memoria a stato solido per il database primario, velocizzare tutte le query e possibilmente non è necessario un livello di memorizzazione nella cache. Esistono diversi design possibili.
John Mahowald,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.