Garnet är en ny typ av fjärrcachelagring utvecklad av Microsoft Research som erbjuder flera unika fördelar:
- Garnet tar det populära RESP-linjeprotokollet som utgångspunkt, vilket gör det möjligt att använda Garnet från omodifierade Redis-klienter som finns i de flesta programmeringsspråk idag, såsom StackExchange.Redis i C#.
- Garnet erbjuder bättre genomströmning och skalbarhet med många klientanslutningar och små batcher jämfört med jämförbar öppen källkods cachelagring, vilket sparar kostnader för stora applikationer och tjänster.
- Garnet visade extremt låg klientlatens (vanligtvis mindre än 300 mikrosekunder vid 99,9 %) med Commodity Cloud (Azure) VM:ar med accelererad TCP aktiverad, vilket är avgörande för verkliga scenarier.
- Garnet baseras på den senaste .NET-teknologin och är plattformsoberörd, utbyggbar och modern. Den är utformad för att vara lätt att utveckla och utveckla utan att offra prestanda i vanliga situationer. Vi utnyttjar det rika biblioteksekosystemet i .NET för att utöka API:et och erbjuda öppna optimeringsmöjligheter. Tack vare vår noggranna användning av .NET uppnår Garnet toppmodern prestanda både på Linux och Windows.
Öppen källkodsadress:Inloggningen med hyperlänken är synlig. Dokumentation:Inloggningen med hyperlänken är synlig.
Garnet har följande viktiga fördelar:
- Servergenomströmningen (operationer per sekund) ökas med flera storleksordningar för små batcher och många klientsessioner jämfört med jämförbar öppen källkods cachelagring.
- På vanliga molnmaskiner (Azure) med accelererad TCP aktiverad på Windows och Linux är latensen per operation extremt låg (vanligtvis mindre än 300 mikrosekunder vid 99,9 %).
- När antalet klienter ökar uppnås bättre skalbarhet med eller utan klientbatchning.
- Möjlighet att använda alla CPU-/minnesresurser på en serverdator via en enda delad minnesserverinstans (inget behov av klustring inom noden).
- Stöd för dataset större än minne som överflödar till lokala och molnlagringsenheter.
- Databasfunktioner som snabb kontrollpunkt och återställning samt publicera/prenumerera.
- Stöd för multi-nodes sharded hashpartitionering (Redis "cluster"-läge), tillståndsmigration och replikering.
- Väl testat med en omfattande testsvit (tusentals enhetstester mot Garnet och dess lagringslager Tsavorite).
- C#-kodbas som är lätt att utveckla och utöka.
Garnet stöder inte alla Redis-kommandon, specifikt stödde kommandon för att visa:Inloggningen med hyperlänken är synlig. Garnet-projektet inkluderar ett benchmarkverktyg för att köra RESP-benchmarks med olika klienter, olika arbetsbelastningar och olika policyer för att mäta genomströmning, prestanda och latens. Adress:Inloggningen med hyperlänken är synlig. RESP-protokoll:Inloggningen med hyperlänken är synlig.
Den här artikeln använder Redis inbyggda benchmarkingverktyg för enkel testning, och testmiljön är följande:
| cache | version | | Redis | Redis 3.0.504 (000000000/0) 64 bit | | Granat | Garnet 1.0.2 64 bitar; Fristående läge |
Redis-benchmarks
Först, starta Redis-cachen med kommandoraden med följande kommando:
Testkommandot är följande:
Resultaten är följande:
====== SET ====== 500000 förfrågningar slutförda på 24,38 sekunder 100 parallella klienter 3 bytes nyttolast håll vid liv: 1
0,03 % <= 1 millisekund 0,25 % <= 2 millisekunder 2,65 % <= 3 millisekunder 16,49 % <= 4 millisekunder 59,95 % <= 5 millisekunder 99,09 % <= 6 millisekunder 99,76 % <= 7 millisekunder 99,86 % <= 8 millisekunder 99,93 % <= 9 millisekunder 99,98 % <= 10 millisekunder 99,99 % <= 11 millisekunder 100,00 % <= 12 millisekunder 20512,82 förfrågningar per sekund
====== GÅ ====== 500000 förfrågningar slutförda på 27,41 sekunder 100 parallella klienter 3 bytes nyttolast håll vid liv: 1
0,03 % <= 1 millisekund 0,19 % <= 2 millisekunder 6,44 % <= 3 millisekunder 25,82 % <= 4 millisekunder 45,65 % <= 5 millisekunder 98,79 % <= 6 millisekunder 99,98 % <= 7 millisekunder 99,98 % <= 8 millisekunder 99,98 % <= 9 millisekunder 100,00 % <= 9 millisekunder 18238,86 förfrågningar per sekund
Granat-benchmarks
Skapa ett nytt .NET 8-konsolprojekt och referera först till Microsoft.Garnet-paketet med följande kommando:
Koden är följande:
Startkommandot är följande:
Med samma benchmark-kommando blir resultatet följande:
====== SET ====== 500000 förfrågningar slutförda på 11,51 sekunder 100 parallella klienter 3 bytes nyttolast håll vid liv: 1
75,51 % <= 1 millisekund 88,24 % <= 2 millisekunder 92,04 % < = 3 millisekunder 99,46 % <= 4 millisekunder 99,98 % <= 5 millisekunder 99,99 % <= 6 millisekunder 100,00 % <= 12 millisekunder 100,00 % <= 12 millisekunder 43448.04 förfrågningar per sekund
====== GÅ ====== 500000 förfrågningar slutförda på 31,50 sekunder 100 parallella klienter 3 bytes nyttolast håll vid liv: 1
0,01 % <= 1 millisekund 0,90 % <= 2 millisekunder 27,25 % <= 3 millisekunder 97,65 % <= 4 millisekunder 99,82 % <= 5 millisekunder 99,94 % <= 6 millisekunder 99,98 % <= 7 millisekunder 99,98 % <= 9 millisekunder 99,98 % <= 10 millisekunder 99,99 % <= 11 millisekunder 100,00 % <= 12 millisekunder 100,00 % <= 12 millisekunder 15872.01 förfrågningar per sekund Eftersom testverktyg, mjukvaruversioner, testparametrar etc. alla leder till olika resultat, är testerna endast för referens, och genom de enkla testerna i denna artikel kan man se att Garnet har betydligt lägre latens än Redis.
(Slut) |