Garnet è un nuovo tipo di archiviazione remota della cache sviluppata da Microsoft Research che offre diversi vantaggi unici:
- Garnet prende come punto di partenza il popolare protocollo di linea RESP, che rende possibile utilizzare Garnet da client Redis non modificati disponibili nella maggior parte dei linguaggi di programmazione oggi, come StackExchange.Redis in C#.
- Garnet offre una migliore capacità di throughput e scalabilità con molte connessioni client e piccoli lotti rispetto allo storage cache open source comparabile, risparmiando costi per applicazioni e servizi di grandi dimensioni.
- Garnet ha dimostrato una latenza client estremamente bassa (tipicamente inferiore a 300 microsecondi al 99,9%) utilizzando VM Commodity Cloud (Azure) con TCP accelerato abilitato, cosa fondamentale per scenari reali.
- Garnet si basa sulle più recenti tecnologie .NET ed è multipiattaforma, estensibile e moderno. È progettato per essere facile da sviluppare ed evolvere senza sacrificare le prestazioni in situazioni comuni. Sfruttiamo il ricco ecosistema delle biblioteche di .NET per estendere l'API e offrire opportunità di ottimizzazione aperta. Grazie al nostro uso attento di .NET, Garnet raggiunge prestazioni all'avanguardia sia su Linux che su Windows.
Indirizzo Open Source:Il login del link ipertestuale è visibile. Documentazione:Il login del link ipertestuale è visibile.
Garnet offre i seguenti benefici chiave:
- Il throughput del server (operazioni al secondo) aumenta di diversi ordini di grandezza per piccoli lotti e molte sessioni client rispetto allo storage open source della cache comparabile.
- Sulle macchine cloud commodity (Azure) con TCP accelerato abilitato su Windows e Linux, la latenza per operazione è estremamente bassa (tipicamente inferiore a 300 microsecondi al 99,9%).
- Con l'aumentare del numero di clienti, si ottiene una migliore scalabilità con o senza batching dei clienti.
- Capacità di utilizzare tutte le risorse CPU/memoria di un computer server tramite un'unica istanza di server di memoria condivisa (senza necessità di clustering intra-nodo).
- Supporto per dataset più grandi della memoria che si sovraplungano su dispositivi di storage on-premises e cloud.
- Funzionalità del database come checkpoint rapido e recupero e pubblicazione/iscrizione.
- Supporto per la partizione hash multi-node sharded (modalità "cluster" Ridis), migrazione di stato e replicazione.
- Ben testato con una suite di test completa (migliaia di test unitari contro Garnet e il suo livello di storage Tsavorite).
- Codice C# facile da evolvere ed estendere.
Garnet non supporta tutti i comandi Ridis, ma specificamente i comandi supportati per visualizzarli:Il login del link ipertestuale è visibile. Il progetto Garnet include uno strumento Benchmark per eseguire benchmark RESP utilizzando client differenti, carichi di lavoro differenti e politiche differenti per misurare throughput, prestazioni e latenza. Indirizzo:Il login del link ipertestuale è visibile. Protocollo RESP:Il login del link ipertestuale è visibile.
Questo articolo utilizza gli strumenti di benchmarking integrati di Redis per test semplici, e l'ambiente di test è il seguente:
| cache | Versione | | Redis | Redis 3.0.504 (00000000/0) 64 bit | | Granato | Garnet 1.0.2 64 bit; Modalità standalone |
Benchmark Redis
Per prima cosa, avvia la cache Redis usando la riga di comando con il seguente comando:
Il comando di test è il seguente:
I risultati sono i seguenti:
====== SET ====== 500000 richieste completate in 24,38 secondi 100 client paralleli Carico utile da 3 byte Tieni in vita: 1
0,03% <= 1 millisecondo 0,25% <= 2 millisecondi 2,65% <= 3 millisecondi 16,49% <= 4 millisecondi 59,95% <= 5 millisecondi 99,09% <= 6 millisecondi 99,76% <= 7 millisecondi 99,86% <= 8 millisecondi 99,93% <= 9 millisecondi 99,98% <= 10 millisecondi 99,99% <= 11 millisecondi 100,00% <= 12 millisecondi 20512,82 richieste al secondo
====== FATTI ====== 500000 richieste completate in 27,41 secondi 100 client paralleli Carico utile da 3 byte Tieni in vita: 1
0,03% <= 1 millisecondo 0,19% <= 2 millisecondi 6,44% <= 3 millisecondi 25,82% <= 4 millisecondi 45,65% <= 5 millisecondi 98,79% <= 6 millisecondi 99,98% <= 7 millisecondi 99,98% <= 8 millisecondi 99,98% <= 9 millisecondi 100,00% <= 9 millisecondi 18238,86 richieste al secondo
Benchmark Garnet
Crea un nuovo progetto console .NET 8 e prima fai riferimento al pacchetto Microsoft.Garnet con il seguente comando:
Il codice è il seguente:
Il comando di avvio è il seguente:
Utilizzando lo stesso comando di benchmark, il risultato è il seguente:
====== SET ====== 500000 richieste completate in 11,51 secondi 100 client paralleli Carico utile da 3 byte Tieni in vita: 1
75,51% <= 1 millisecondo 88,24% <= 2 millisecondi 92,04% <= 3 millisecondi 99,46% <= 4 millisecondi 99,98% <= 5 millisecondi 99,99% <= 6 millisecondi 100,00% <= 12 millisecondi 100,00% <= 12 millisecondi 43448,04 richieste al secondo
====== FATTI ====== 500000 richieste completate in 31,50 secondi 100 client paralleli Carico utile da 3 byte Tieni in vita: 1
0,01% <= 1 millisecondo 0,90% <= 2 millisecondi 27,25% <= 3 millisecondi 97,65% <= 4 millisecondi 99,82% <= 5 millisecondi 99,94% <= 6 millisecondi 99,98% <= 7 millisecondi 99,98% <= 9 millisecondi 99,98% <= 10 millisecondi 99,99% <= 11 millisecondi 100,00% <= 12 millisecondi 100,00% <= 12 millisecondi 15872,01 richieste al secondo Grazie agli strumenti di test, alle versioni del software, ai parametri di test, ecc., tutti portano a risultati diversi; i test sono solo di riferimento; attraverso i semplici test di questo articolo si può vedere che Garnet ha una latenza significativamente inferiore rispetto a Redis.
(Fine) |