Garnet este un nou tip de stocare cache la distanță dezvoltat de Microsoft Research care oferă mai multe beneficii unice:
- Garnet ia ca punct de plecare popularul protocol de linie RESP, care face posibilă utilizarea lui Garnet de la clienții Redis nemodificați disponibili în majoritatea limbajelor de programare de astăzi, cum ar fi StackExchange.Redis în C#.
- Garnet oferă un throughput și o scalabilitate mai bune, cu multe conexiuni cu clienții și loturi mici, comparativ cu stocarea cache-ului open-source comparabilă, economisind costuri pentru aplicații și servicii mari.
- Garnet a demonstrat o latență extrem de scăzută a clientului (de obicei mai puțin de 300 microsecunde la 99,9%) folosind mașini virtuale Commodity Cloud (Azure) cu TCP accelerat activat, ceea ce este esențial pentru scenarii reale.
- Garnet se bazează pe cea mai nouă tehnologie .NET și este cross-platform, extensibil și modern. Este conceput să fie ușor de dezvoltat și evoluat fără a sacrifica performanța în situații comune. Valorificăm ecosistemul bogat de biblioteci .NET pentru a extinde API-ul și a oferi oportunități de optimizare deschisă. Datorită utilizării noastre atente a .NET, Garnet atinge performanțe de ultimă generație atât pe Linux, cât și pe Windows.
Adresă Open Source:Autentificarea cu hyperlink este vizibilă. Documentație:Autentificarea cu hyperlink este vizibilă.
Granatul are următoarele beneficii cheie:
- Debitul serverului (operații pe secundă) este crescut cu câteva ordine de mărime pentru loturi mici și multe sesiuni client comparativ cu stocarea cache open source comparabilă.
- Pe calculatoarele cloud de bază (Azure) cu TCP accelerat activat pe Windows și Linux, latența per operație este extrem de mică (de obicei sub 300 microsecunde, la 99,9%).
- Pe măsură ce numărul clienților crește, se obține o scalabilitate mai bună cu sau fără batching al clienților.
- Capacitatea de a folosi toate resursele CPU/memorie ale unui computer server printr-o singură instanță de server de memorie partajată (fără nevoie de clustering intra-nod).
- Suport pentru seturi de date mai mari decât memoria care se revarsă către dispozitive de stocare on-premises și cloud.
- Funcții de bază de date precum checkpoint rapid și recuperare și publicare/abonament.
- Suport pentru partiționarea hash-ului multi-nod sharded (modul "cluster" Rederis), migrarea stării și replicarea.
- Bine testat cu o suită de teste cuprinzătoare (mii de teste unitare împotriva Garnet și a nivelului său de stocare, Tsavorite).
- bază de cod C# ușor de evoluat și extins.
Garnet nu suportă toate comenzile Redis, ci în mod specific comenzile suportate pentru vizualizare:Autentificarea cu hyperlink este vizibilă. Proiectul Garnet include un instrument Benchmark pentru rularea benchmark-urilor RESP folosind clienți diferiți, sarcini de lucru diferite și politici diferite pentru măsurarea debitului, performanței și latenței. Adresă:Autentificarea cu hyperlink este vizibilă. Protocolul RESP:Autentificarea cu hyperlink este vizibilă.
Acest articol folosește instrumentele de benchmarking integrate ale Redis pentru teste simple, iar mediul de testare este următorul:
| cache | versiune | | Redis | Redis 3.0.504 (00000000/0) 64 de biți | | Granat | Garnet 1.0.2 64 biți; Mod standalone |
Repere Redis
Mai întâi, lansați cache-ul Redis folosind linia de comandă cu următoarea comandă:
Comanda de test este următoarea:
Rezultatele sunt următoarele:
====== SETUL ====== 500000 de cereri finalizate în 24,38 secunde 100 de clienți paraleli Sarcină utilă de 3 octeți Keep Alive: 1
0,03% <= 1 milisecundă 0,25% <= 2 milisecunde 2,65% <= 3 milisecunde 16,49% <= 4 milisecunde 59,95% <= 5 milisecunde 99,09% <= 6 milisecunde 99,76% <= 7 milisecunde 99,86% <= 8 milisecunde 99,93% <= 9 milisecunde 99,98% <= 10 milisecunde 99,99% <= 11 milisecunde 100,00% <= 12 milisecunde 20512,82 cereri pe secundă
====== SĂ ====== 500000 de cereri completate în 27,41 secunde 100 de clienți paraleli Sarcină utilă de 3 octeți Keep Alive: 1
0,03% <= 1 milisecundă 0,19% <= 2 milisecunde 6,44% <= 3 milisecunde 25,82% <= 4 milisecunde 45,65% <= 5 milisecunde 98,79% <= 6 milisecunde 99,98% <= 7 milisecunde 99,98% <= 8 milisecunde 99,98% <= 9 milisecunde 100,00% <= 9 milisecunde 18238,86 cereri pe secundă
Benchmark-uri Garnet
Creează un nou proiect de consolă .NET 8 și referă mai întâi la pachetul Microsoft.Garnet cu următoarea comandă:
Codul este următorul:
Comanda de pornire este următoarea:
Folosind aceeași comandă de benchmark, rezultatul este următorul:
====== SETUL ====== 500000 de cereri finalizate în 11,51 secunde 100 de clienți paraleli Sarcină utilă de 3 octeți Keep Alive: 1
75,51% <= 1 milisecundă 88,24% <= 2 milisecunde 92,04% <= 3 milisecunde 99,46% <= 4 milisecunde 99,98% <= 5 milisecunde 99,99% <= 6 milisecunde 100,00% <= 12 milisecunde 100,00% <= 12 milisecunde 43448,04 cereri pe secundă
====== SĂ ====== 500000 de cereri finalizate în 31,50 secunde 100 de clienți paraleli Sarcină utilă de 3 octeți Keep Alive: 1
0,01% <= 1 milisecundă 0,90% <= 2 milisecunde 27,25% <= 3 milisecunde 97,65% <= 4 milisecunde 99,82% <= 5 milisecunde 99,94% <= 6 milisecunde 99,98% <= 7 milisecunde 99,98% <= 9 milisecunde 99,98% <= 10 milisecunde 99,99% <= 11 milisecunde 100,00% <= 12 milisecunde 100,00% <= 12 milisecunde 15872,01 cereri pe secundă Datorită uneltelor de testare, versiunilor software, parametrilor de testare etc., toate duc la rezultate diferite, testele fiind doar de referință, iar prin testele simple din acest articol se poate observa că Garnet are o latență semnificativ mai mică decât Redis.
(Sfârșit) |