Garnet is een nieuw type externe cacheopslag ontwikkeld door Microsoft Research dat verschillende unieke voordelen biedt:
- Garnet neemt het populaire RESP-lijnprotocol als uitgangspunt, waardoor het mogelijk is om Garnet te gebruiken vanaf ongewijzigde Redis-clients die tegenwoordig in de meeste programmeertalen beschikbaar zijn, zoals StackExchange.Redis in C#.
- Garnet biedt een betere doorvoer en schaalbaarheid met veel clientverbindingen en kleine batches vergeleken met vergelijkbare open-source cacheopslag, wat kosten bespaart voor grote applicaties en diensten.
- Garnet toonde extreem lage clientlatentie (meestal minder dan 300 microseconden bij 99,9%) met Commodity Cloud (Azure) VM's met versnelde TCP ingeschakeld, wat cruciaal is voor realistische scenario's.
- Garnet is gebaseerd op de nieuwste .NET-technologie en is cross-platform, uitbreidbaar en modern. Het is ontworpen om gemakkelijk te ontwikkelen en te evolueren zonder in te leveren op prestaties in veelvoorkomende situaties. We maken gebruik van het rijke bibliotheekecosysteem van .NET om de API uit te breiden en open optimalisatiemogelijkheden te bieden. Dankzij ons zorgvuldige gebruik van .NET bereikt Garnet state-of-the-art prestaties op zowel Linux als Windows.
Open source adres:De hyperlink-login is zichtbaar. Documentatie:De hyperlink-login is zichtbaar.
Garnet heeft de volgende belangrijke voordelen:
- De serverdoorvoersnelheid (bewerkingen per seconde) wordt met meerdere ordes van grootte verhoogd voor kleine batches en veel clientsessies ten opzichte van vergelijkbare open source cacheopslag.
- Op commodity cloud (Azure) machines met versnelde TCP ingeschakeld op Windows en Linux is de latentie per bewerking extreem laag (meestal minder dan 300 microseconden bij 99,9%).
- Naarmate het aantal clients toeneemt, wordt er een betere schaalbaarheid bereikt, met of zonder client batching.
- Mogelijkheid om alle CPU-/geheugenbronnen van een servercomputer te gebruiken via één gedeelde geheugenserverinstantie (geen behoefte aan intra-node clustering).
- Ondersteuning voor datasets die groter dan het geheugen zijn en overstromen naar on-premises en cloudopslagapparaten.
- Databasefuncties zoals snelle checkpoint en herstel en publiceren/abonneren.
- Ondersteuning voor multi-node sharded hash partitionering (Redis "cluster" modus), state-migratie en replicatie.
- Goed getest met een uitgebreide testsuite (duizenden unittests tegen Garnet en zijn opslaglaag Tsavorite).
- C#-codebase die gemakkelijk te evolueren en uit te breiden is.
Garnet ondersteunt niet alle Redis-commando's, specifiek ondersteunt hij commando's om te bekijken:De hyperlink-login is zichtbaar. Het Garnet-project bevat een Benchmark-tool voor het uitvoeren van RESP-benchmarks met verschillende clients, verschillende workloads en verschillende beleidslijnen om doorvoer, prestaties en latentie te meten. Adres:De hyperlink-login is zichtbaar. RESP-protocol:De hyperlink-login is zichtbaar.
Dit artikel maakt gebruik van de ingebouwde benchmarktools van Edis voor eenvoudig testen, en de testomgeving is als volgt:
| cache | Versie | | Redis | Redis 3.0.504 (000000000/0) 64 bit | | Granaat | Garnet 1.0.2 64 bit; Standalone modus |
Redis-benchmarks
Start eerst de Redis-cache met de commandoregel met het volgende commando:
Het testcommando is als volgt:
De resultaten zijn als volgt:
====== ZET ====== 500.000 verzoeken afgerond in 24,38 seconden 100 parallelle clients 3 bytes payload Blijf in leven: 1
0,03% <= 1 milliseconde 0,25% <= 2 milliseconden 2,65% <= 3 milliseconden 16,49% <= 4 milliseconden 59,95% <= 5 milliseconden 99,09% <= 6 milliseconden 99,76% <= 7 milliseconden 99,86% <= 8 milliseconden 99,93% <= 9 milliseconden 99,98% <= 10 milliseconden 99,99% <= 11 milliseconden 100,00% <= 12 milliseconden 20512,82 verzoeken per seconde
====== GA ====== 500.000 verzoeken voltooid in 27,41 seconden 100 parallelle clients 3 bytes payload Blijf in leven: 1
0,03% <= 1 milliseconde 0,19% <= 2 milliseconden 6,44% <= 3 milliseconden 25,82% <= 4 milliseconden 45,65% <= 5 milliseconden 98,79% <= 6 milliseconden 99,98% <= 7 milliseconden 99,98% <= 8 milliseconden 99,98% <= 9 milliseconden 100,00% <= 9 milliseconden 18238,86 verzoeken per seconde
Garnet-benchmarks
Maak een nieuw .NET 8 consoleproject aan en verwijs eerst naar het Microsoft.Garnet-pakket met het volgende commando:
De code is als volgt:
Het opstartcommando is als volgt:
Met hetzelfde benchmarkcommando is het resultaat als volgt:
====== ZET ====== 5000000 verzoeken voltooid in 11,51 seconden 100 parallelle clients 3 bytes payload Blijf in leven: 1
75,51% <= 1 milliseconde 88,24% <= 2 milliseconden 92,04% <= 3 milliseconden 99,46% <= 4 milliseconden 99,98% <= 5 milliseconden 99,99% <= 6 milliseconden 100,00% <= 12 milliseconden 100,00% <= 12 milliseconden 43448,04 verzoeken per seconde
====== GA ====== 500000 verzoeken afgerond in 31,50 seconden 100 parallelle clients 3 bytes payload Blijf in leven: 1
0,01% <= 1 milliseconde 0,90% <= 2 milliseconden 27,25% <= 3 milliseconden 97,65% <= 4 milliseconden 99,82% <= 5 milliseconden 99,94% <= 6 milliseconden 99,98% <= 7 milliseconden 99,98% <= 9 milliseconden 99,98% <= 10 milliseconden 99,99% <= 11 milliseconden 100,00% <= 12 milliseconden 100,00% <= 12 milliseconden 15872.01 verzoeken per seconde Omdat de testtools, softwareversies, testparameters, enzovoort allemaal tot verschillende resultaten leiden, zijn de tests alleen ter referentie; uit de eenvoudige tests in dit artikel blijkt dat Garnet aanzienlijk lagere latentie heeft dan Redis.
(Einde) |