|
|
Veröffentlicht am 28.03.2024, 18:00:42
|
|
|
|

Garnet ist eine neue Art von Remote-Cache-Speicher, die von Microsoft Research entwickelt wurde und mehrere einzigartige Vorteile bietet:
- Garnet nimmt das beliebte RESP-Linienprotokoll als Ausgangspunkt, das es ermöglicht, Garnet von unveränderten Redis-Clients zu verwenden, die heute in den meisten Programmiersprachen verfügbar sind, wie StackExchange.Redis in C#.
- Garnet bietet einen besseren Durchsatz und Skalierbarkeit mit vielen Client-Verbindungen und kleinen Chargen im Vergleich zu vergleichbarem Open-Source-Cache-Speicher, was Kosten für große Anwendungen und Dienste spart.
- Garnet zeigte extrem niedrige Client-Latenz (typischerweise weniger als 300 Mikrosekunden bei 99,9 %) bei Verwendung von Commodity Cloud (Azure) VMs mit aktiviertem beschleunigtem TCP, was für reale Szenarien entscheidend ist.
- Garnet basiert auf der neuesten .NET-Technologie und ist plattformübergreifend, erweiterbar und modern. Es ist so konzipiert, dass es leicht zu entwickeln und weiterzuentwickeln ist, ohne in üblichen Situationen auf Leistung einzugehen. Wir nutzen das reichhaltige Bibliotheksökosystem von .NET, um die API zu erweitern und offene Optimierungsmöglichkeiten zu bieten. Dank unseres sorgfältigen Einsatzes von .NET erreicht Garnet sowohl unter Linux als auch unter Windows eine Spitzenleistung.
Open-Source-Adresse:Der Hyperlink-Login ist sichtbar. Dokumentation:Der Hyperlink-Login ist sichtbar.
Garnet hat folgende wichtige Vorteile:
- Der Serverdurchsatz (Operationen pro Sekunde) wird bei kleinen Chargen und vielen Client-Sitzungen im Vergleich zu vergleichbarem Open-Source-Cache-Speicher um mehrere Größenordnungen erhöht.
- Auf Commodity-Cloud-(Azure)-Rechnern mit beschleunigtem TCP unter Windows und Linux ist die Latenz pro Operation extrem niedrig (typischerweise weniger als 300 Mikrosekunden bei 99,9 %).
- Mit steigender Anzahl der Kunden wird eine bessere Skalierbarkeit mit oder ohne Client-Batching erreicht.
- Fähigkeit, alle CPU-/Speicherressourcen eines Servercomputers über eine einzige Shared-Memory-Server-Instanz zu nutzen (kein Bedarf für Clustering innerhalb der Knoten).
- Unterstützung für Datensätze, die größer als Speicher sind, die auf lokale und Cloud-Speichergeräte überlaufen.
- Datenbankfunktionen wie schneller Checkpoint und Wiederherstellung sowie veröffentlichen/abonnieren.
- Unterstützung für Multi-Node-Sharded-Hash-Partitionierung (Redis "Cluster"-Modus), Zustandsmigration und Replikation.
- Gut getestet mit einer umfassenden Testsuite (tausende Unit-Tests gegen Garnet und dessen Speicherschicht Tsavorite).
- C#-Codebasis, die sich leicht weiterentwickeln und erweitern lässt.
Garnet unterstützt nicht alle Redis-Befehle, sondern speziell Befehle zum Anzeigen:Der Hyperlink-Login ist sichtbar. Das Garnet-Projekt beinhaltet ein Benchmark-Tool zum Ausführen von RESP-Benchmarks mit verschiedenen Kunden, unterschiedlichen Workloads und verschiedenen Richtlinien zur Messung von Durchsatz, Leistung und Latenz. Adresse:Der Hyperlink-Login ist sichtbar. RESP-Protokoll:Der Hyperlink-Login ist sichtbar.
Dieser Artikel verwendet die eingebauten Benchmarking-Tools von Redis für einfache Tests, und die Testumgebung ist wie folgt:
| Cache | Version | | Redis | Redis 3.0.504 (000000000/0) 64 Bit | | Granat | Garnet 1.0.2 64 Bit; Standalone-Modus |
Redis-Benchmarks
Zuerst starten Sie den Redis-Cache über die Befehlszeile mit folgendem Befehl:
Der Testbefehl ist wie folgt:
Die Ergebnisse sind wie folgt:
====== SETZT ====== 500000 Anfragen in 24,38 Sekunden erledigt 100 parallele Clients 3 Bytes Payload am Leben bleiben: 1
0,03 % <= 1 Millisekunde 0,25 % <= 2 Millisekunden 2,65 % <= 3 Millisekunden 16,49 % <= 4 Millisekunden 59,95 % <= 5 Millisekunden 99,09 % <= 6 Millisekunden 99,76 % <= 7 Millisekunden 99,86 % <= 8 Millisekunden 99,93 % <= 9 Millisekunden 99,98 % <= 10 Millisekunden 99,99 % <= 11 Millisekunden 100,00 % <= 12 Millisekunden 20512,82 Anfragen pro Sekunde
====== GEH ====== 500000 Anfragen in 27,41 Sekunden abgeschlossen 100 parallele Clients 3 Bytes Payload am Leben bleiben: 1
0,03 % <= 1 Millisekunde 0,19 % <= 2 Millisekunden 6,44 % <= 3 Millisekunden 25,82 % <= 4 Millisekunden 45,65 % <= 5 Millisekunden 98,79 % <= 6 Millisekunden 99,98 % <= 7 Millisekunden 99,98 % <= 8 Millisekunden 99,98 % <= 9 Millisekunden 100,00 % <= 9 Millisekunden 18238,86 Anfragen pro Sekunde
Garnet-Benchmarks
Erstellen Sie ein neues .NET 8-Konsolenprojekt und beziehen Sie sich zunächst auf das Microsoft.Garnet-Paket mit folgendem Befehl:
Der Code lautet wie folgt:
Der Startbefehl lautet wie folgt:
Mit demselben Benchmark-Befehl ergibt sich das Ergebnis:
====== SETZT ====== 500000 Anfragen in 11,51 Sekunden abgeschlossen 100 parallele Clients 3 Bytes Payload am Leben bleiben: 1
75,51 % <= 1 Millisekunde 88,24 % <= 2 Millisekunden 92,04 % <= 3 Millisekunden 99,46 % <= 4 Millisekunden 99,98 % <= 5 Millisekunden 99,99 % <= 6 Millisekunden 100,00 % <= 12 Millisekunden 100,00 % <= 12 Millisekunden 43448,04 Anfragen pro Sekunde
====== GEH ====== 500000 Anfragen in 31,50 Sekunden abgeschlossen 100 parallele Clients 3 Bytes Payload am Leben bleiben: 1
0,01 % <= 1 Millisekunde 0,90 % <= 2 Millisekunden 27,25 % <= 3 Millisekunden 97,65 % <= 4 Millisekunden 99,82 % <= 5 Millisekunden 99,94 % <= 6 Millisekunden 99,98 % <= 7 Millisekunden 99,98 % <= 9 Millisekunden 99,98 % <= 10 Millisekunden 99,99 % <= 11 Millisekunden 100,00 % <= 12 Millisekunden 100,00 % <= 12 Millisekunden 15872.01 Anfragen pro Sekunde Da die Testwerkzeuge, Softwareversionen, Testparameter usw. alle zu unterschiedlichen Ergebnissen führen, dienen die Tests nur als Referenz; durch die einfachen Tests in diesem Artikel ist zu erkennen, dass Garnet eine deutlich geringere Latenz als Redis hat.
(Ende) |
Vorhergehend:.NET/C#-Reflexionsattribut, das anhand von Nulltypen beurteilt werden kannNächster:SSE (1) verwendet ASP.NET Core als SSE-Server
|