NCache Benchmark delle prestazioni

2 milioni di operazioni/sec

(cluster a 5 nodi)

 

Sintesi

NCache può aiutarti a scalare linearmente e migliorare le prestazioni in modo semplice ed economico. Le aziende Fortune 500 in tutto il mondo si sono affidate a NCache da oltre 13 anni per rimuovere i colli di bottiglia delle prestazioni correlati all'archiviazione dei dati e ai database e per adattare le applicazioni .NET all'elaborazione delle transazioni estreme (XTP).

Questo documento utilizzerà NCache 5.0 con API moderne e alcune nuove funzionalità per dimostrare la scalabilità lineare e le prestazioni estreme che puoi ottenere per le tue applicazioni .NET. In questo esperimento, abbiamo integrato un modem NCache API con topologia di cache partizionata con pipelining abilitato. I dati sono completamente distribuiti su tutti i server di caching e i client si connettono a tutti i server per le richieste di lettura e scrittura.

In questo benchmark, dimostriamo che il NCache cluster può scalare linearmente e che abbiamo raggiunto 2 milioni di transazioni al secondo utilizzando solo 5 nodi del server cache. Lo dimostreremo anche noi NCache può fornire una latenza inferiore al microsecondo anche in un cluster di grandi dimensioni. In questo whitepaper tratteremo le impostazioni dei benchmark, i passaggi per l'esecuzione dei benchmark, le configurazioni di test, le configurazioni di carico e i risultati. Puoi vedere l'esperimento di benchmark in azione in questo video.

 

Panoramica della configurazione del benchmark

Diamo un'occhiata alla nostra configurazione di benchmark. Per questo test utilizzeremo server AWS m4.10xlarge. Ne abbiamo cinque. NCache server su cui configureremo il nostro cluster di cache. Avremo 15 server client, da cui eseguiremo le applicazioni per connetterci a questo cluster di cache.

Utilizzeremo Windows Server 2016 come sistema operativo – Data Center Edition, 64 bit. NCache La versione utilizzata è la 5.0 Enterprise. In questa configurazione di benchmark, utilizzeremo una Topologia della cache partizionataIn una topologia di cache partizionata, tutti i dati saranno completamente distribuiti in partizioni su tutti i server di caching. E tutti i client saranno connessi a tutti i server per richieste di lettura e scrittura, in modo da utilizzare tutti i server contemporaneamente. Non abbiamo la replica attivata per questa topologia, ma esistono altre topologie come Topologia di replica partizionata dotato di supporto per la replicazione.

NCache Impostazione del benchmark
Figura 1- NCache Impostazione del benchmark

Avremo pipelining abilitato che è una nuova funzionalità in NCache 5.0. Funziona in modo tale che sul lato client vengano accumulate tutte le richieste in esecuzione e vengano applicate immediatamente sul lato server. L'accumulo avviene in microsecondi, quindi è altamente ottimizzato ed è la configurazione consigliata quando si hanno requisiti di carico transazionale elevati.

Ecco una rapida panoramica della nostra configurazione di riferimento, comprese le configurazioni hardware, software e di carico.

Configurazione hardware:

Dettagli client e server
(Macchina virtuale)
AWS m4.10xlarge: 40 core, 160 GB di memoria, rete - Ethernet 10 Gbps
Numero di nodi server 5
Numero di nodi client 15

Configurazione software:

Sistema operativo Di Windows Server 2016
Edizione Data Center – x64
NCache Versione 5.0
Topologia del cluster Configurazione della cache partizionata

Carica configurazione:

Dimensione della cache 4 GB
Dimensione dei dati Array di byte di dimensione 100
Articoli totali 1,000,000
pipelining Gli utenti dell’app Smart Spaces con Google Wallet possono ora usufruire di accesso mobile contactless con qualsiasi lettore HID® Signo™ abilitato NFC.
Rapporto Get/Update 80:20
Discussioni 1280
Istanze di applicazioni 2 istanze per macchina client, totale 30 istanze
 

Popolazione dei dati

Dopo aver configurato il nostro ambiente di benchmark, inizieremo con una popolazione di dati di 1 milione di elementi nel cluster di cache. Eseguiremo l'applicazione client (Cache Item Loader) che si connetterà e aggiungerà 1 milione di elementi nella cache. Un client si connetterà a tutti i server di caching e aggiungerà 1 milione di elementi nel cluster di cache, dopodiché potremo iniziare con le richieste di lettura e scrittura.

È possibile utilizzare questa Pacchetto Nuget – NCache SDK per installare l'SDK sul computer client e configurare il pipelining tra client e server e distribuire l'applicazione Load Generation (GitHub) per popolare 1 milione di elementi della cache sul cluster di cache.

 

Caricamento della transazione di build

Ora eseguiremo l'applicazione per generare un carico transazionale su questo cluster di cache con l'80% di operazioni in lettura e il 20% in scrittura. È possibile monitorare tutte le attività utilizzando i contatori Perfmon. Inizialmente, collegheremo 10 istanze client a ciascuna. NCache server con attività sui recuperi e sugli aggiornamenti al secondo.

 

Stage 1 Carico di transazione da 1 milione di operazioni/secondo

Fase 1 - Carico di transazione da 1 milione di operazioni/secondo
Figura 2 - Istantanea effettiva acquisita durante i benchmark: 5 nodi, 10 istanze client

Nello screenshot puoi vedere che con 10 istanze client connesse a un cluster a 5 nodi abbiamo richieste al secondo comprese tra 180,000 e 190,000. E poiché abbiamo 5 NCache server che lavorano in parallelo, accumulando queste richieste arriviamo a 1 milione di richieste al secondo da parte di questo cluster di cache.

Abbiamo un utilizzo efficiente di memoria e CPU e la durata media delle operazioni in microsecondi/cache è di poco inferiore a 10 microsecondi per operazione. La nostra prima fase è completata, con il raggiungimento di 1 milione di operazioni al secondo dal nostro cluster di cache.

Fase 1 – Scheda dati riassuntiva
Numero totale di server cache nel cluster 5
Totale istanze client connesse 10
Richieste al secondo / nodo 180,0000 ~ 190,000
Richieste totali - Cluster di cache 950,000 ~ 1,000,000
% Tempo processore (max) 20%
Memoria di sistema 4.2 GB
Latenza (operazione in microsecondi/cache) 10 microsecondi/operazione
 

Stage 2 Carico di transazione da 1.5 milione di operazioni/secondo

Ora che abbiamo raggiunto 1 milione di TPS, è il momento di aumentare il carico sotto forma di più istanze applicative per aumentare il carico transazionale. Non appena queste applicazioni saranno eseguite, si noterà un aumento del contatore delle richieste al secondo. Aumenteremo il numero di client a 20. Con questa configurazione, come potete vedere nello screenshot qui sotto, ora mostriamo 300,000 richieste al secondo per istanza. Abbiamo raggiunto con successo 1.5 milioni di richieste al secondo da questo cluster di cache.

Fase 2 - Carico di transazione da 1.5 milione di operazioni/secondo
Figura 3 - Istantanea effettiva acquisita durante i benchmark: 5 nodi, 20 istanze client

Come potete vedere, il numero di richieste al secondo per ciascun server è di 300,000. I recuperi sono poco più di 200,000 al secondo e gli aggiornamenti sono compresi tra 50,000 e 100,000. Potete vedere che la durata media di un microsecondo per operazione nella cache è inferiore a 4 microsecondi; questo è sorprendente perché abbiamo una latenza molto bassa, unita all'impatto del pipelining. Quando si ha un carico transazionale elevato dal lato client, il pipelining è davvero utile, riduce la latenza e aumenta la produttività. Ecco perché consigliamo di attivarlo. Inoltre, la durata media di un microsecondo per operazione nella cache ora si aggira intorno ai 3-4 microsecondi per operazione nella cache.

Fase 2 – Scheda dati riassuntiva
Numero totale di server cache nel cluster 5
Totale istanze client connesse 20
Richieste medie al secondo/nodo 300,000
Richieste totali - Cluster di cache 1,500,000
% Tempo processore (max) 30%
Memoria di sistema 6 GB
Latenza (operazione in microsecondi/cache) 3 ~ 4 microsecondi/operazione
 

Stage 3 Carico di transazione da 2 milione di operazioni/secondo

Aumentiamo ulteriormente il carico eseguendo altre istanze dell'applicazione, il che mostrerà anche un ulteriore aumento delle richieste al secondo. Ora collegheremo 30 istanze client a tutti NCache server.

Come puoi vedere dallo screenshot qui sotto, ora abbiamo raggiunto con successo le 400,000 richieste al secondo che riceviamo da ogni NCache server; ne abbiamo 5 NCache server in modo che il numero arrivi a due milioni di transazioni al secondo da questo NCache Cluster di cache. E abbiamo una media di microsecondi per operazione di cache inferiore a 3 microsecondi. Abbiamo anche la memoria di sistema e il tempo di elaborazione del processore ben al di sotto dei limiti, con un utilizzo del 40-50% su entrambi i fronti.

Fase 3 - Carico di transazione da 2 milione di operazioni/secondo
Figura 4 - Istantanea effettiva acquisita durante i benchmark: 5 nodi, 30 istanze client

Ora abbiamo una latenza di 2 ~ 3 µs/operazione, un miglioramento rispetto al risultato precedente. Si può ancora una volta osservare un mix di recuperi, aggiornamenti e un utilizzo efficiente delle risorse di CPU e memoria. Possiamo concludere che NCache è scalabile linearmente. Ora rivediamo i nostri numeri di scalabilità.

Fase 3 – Scheda dati riassuntiva
Numero totale di server cache nel cluster 5
Totale istanze client connesse 30
Richieste medie al secondo/nodo 400,000
Richieste totali - Cluster di cache 2,000,000
% Tempo processore (max) 60%
Memoria di sistema 6 GB
Latenza (operazione in microsecondi/cache) 2 ~ 3 microsecondi/operazione
 

Risultati del benchmark

Siamo stati in grado di dimostrare che NCache è linearmente scalabile e siamo stati in grado di ottenere i seguenti risultati dopo aver eseguito i benchmark:

Figura 5- NCache 5.0 Throughput (Transazioni al secondo) – Cluster a 5 nodi
Figura 5- NCache 5.0 Throughput (Transazioni al secondo) – Cluster a 5 nodi
Figura 6 - Throughput per nodo - Cluster a 5 nodi
Figura 6 - Throughput per nodo - Cluster a 5 nodi
Figura 7 – Latenza media in microsecondi per operazione di cache
Figura 7 – Latenza media in microsecondi per operazione di cache
Figura 8 – Totale operazioni/sec - Cluster a 5 nodi
Figura 8 – Totale operazioni/sec - Cluster a 5 nodi
 

Conclusioni

  1. Scalabilità lineare: Con 5 NCache server siamo stati in grado di raggiungere 2 milioni di richieste al secondo. L'aggiunta di sempre più server significa maggiori capacità di gestione delle richieste da NCache.
  2. Bassa latenza e alta produttività: NCache garantisce una latenza inferiore al microsecondo (2.5 ~ 3 microsecondi) anche con cluster di grandi dimensioni. NCache Aiuta a soddisfare i requisiti di bassa latenza e alta produttività anche su larga scala. Abbiamo una latenza molto bassa, un effetto derivante dal pipelining. Quando si hanno carichi transazionali elevati dal lato client, il pipelining è davvero utile e riduce la latenza e aumenta la produttività.

Cosa fare dopo?

© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.