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.
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.
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.
| 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 |
| Sistema operativo | Di Windows Server 2016 Edizione Data Center – x64 |
| NCache Versione | 5.0 |
| Topologia del cluster | Configurazione della cache partizionata |
| 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 |
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.
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.
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 |
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.
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 |
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.
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 |
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:
© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.