Garnet to nowy typ zdalnego przechowywania pamięci podręcznej opracowany przez Microsoft Research, który oferuje kilka unikalnych korzyści:
- Garnet bierze za punkt wyjścia popularny protokół liniowy RESP, który umożliwia korzystanie z Garnet z niezmodyfikowanych klientów Redis dostępnych obecnie w większości języków programowania, takich jak StackExchange.Redis w C#.
- Garnet oferuje lepszą przepustowość i skalowalność dzięki wielu połączeniom klientom i małym partiom w porównaniu do porównywalnej otwartoźródłowej pamięci podręcznej, oszczędzając koszty dla dużych aplikacji i usług.
- Garnet wykazał niezwykle niskie opóźnienia klientów (zazwyczaj poniżej 300 mikrosekund przy 99,9%) przy użyciu maszyn wirtualnych Commodity Cloud (Azure) z przyspieszonym TCP, co jest kluczowe w realnych sytuacjach.
- Garnet opiera się na najnowszej technologii .NET i jest wieloplatformowy, rozszerzalny i nowoczesny. Jest zaprojektowany tak, aby łatwo się rozwijał i rozwijał bez utraty wydajności w typowych sytuacjach. Wykorzystujemy bogaty ekosystem bibliotek .NET do rozszerzenia API i zapewnienia otwartych możliwości optymalizacji. Dzięki starannemu wykorzystaniu .NET Garnet osiąga najnowocześniejszą wydajność zarówno na Linuksie, jak i Windowsie.
Adres open source:Logowanie do linku jest widoczne. Dokumentacja:Logowanie do linku jest widoczne.
Granat ma następujące kluczowe korzyści:
- Przepustowość serwera (operacje na sekundę) jest zwiększana o kilka rzędów wielkości dla małych partii i wielu sesji klienckich w porównaniu do porównywalnej otwartoźródłowej pamięci podręcznej.
- Na komputerach z commodity cloud (Azure) z włączonym przyspieszonym TCP na Windows i Linux opóźnienia na operację są niezwykle niskie (zazwyczaj poniżej 300 mikrosekund przy 99,9%).
- Wraz ze wzrostem liczby klientów osiąga się lepszą skalowalność, niezależnie od grupowania klientów.
- Możliwość wykorzystania wszystkich zasobów CPU/pamięci komputera serwerowego przez jedną instancję serwera pamięci współdzielonej (bez potrzeby klastrowania wewnątrzwęzłowego).
- Wsparcie dla zbiorów danych większych niż pamięć, które przepełniają się do urządzeń magazynujących lokalnie i w chmurze.
- Funkcje bazy danych, takie jak szybkie punkty kontrolne i odzyskiwanie oraz publikowanie/subskrypcja.
- Wsparcie dla wielowęzłowego podziału hash sharded (tryb "klasterowy" Redis), migracji stanów oraz replikacji.
- Dobrze przetestowane z kompleksowym zestawem testów (tysiące testów jednostkowych przeciwko Garnet i jego tierowi pamięci Tsavorite).
- C# baza kodu, którą łatwo rozwijać i rozszerzać.
Garnet nie obsługuje wszystkich poleceń Redis, a w szczególności poleceń do przeglądania:Logowanie do linku jest widoczne. Projekt Garnet zawiera narzędzie Benchmark do uruchamiania benchmarków RESP z użyciem różnych klientów, różnych obciążeń i polityk do pomiaru przepustowości, wydajności i opóźnień. Adres:Logowanie do linku jest widoczne. Protokół RESP:Logowanie do linku jest widoczne.
Ten artykuł wykorzystuje wbudowane narzędzia benchmarkingowe Redis do prostych testów, a środowisko testowe wygląda następująco:
| pamięć podręczna | Wersja | | Redis | Redis 3.0.504 (00000000/0) 64 bity | | Granat | Garnet 1.0.2 64 bit; Tryb samodzielny |
Benchmarki Redis
Najpierw uruchom pamięć podręczną Redis za pomocą wiersza poleceń:
Polecenie testowe wygląda następująco:
Wyniki są następujące:
====== ZESTAW ====== 5000000 żądań zakończonych w 24,38 sekundy 100 klientów równoległych Ładunek 3 bajtów Keep alive: 1
0,03% <= 1 milisekunda 0,25% <= 2 milisekundy 2,65% <= 3 milisekundy 16,49% <= 4 milisekundy 59,95% <= 5 milisekund 99,09% <= 6 milisekund 99,76% <= 7 milisekund 99,86% <= 8 milisekund 99,93% <= 9 milisekund 99,98% <= 10 milisekund 99,99% <= 11 milisekund 100,00% <= 12 milisekund 20512,82 żądań na sekundę
====== SIĘ ====== 5000000 żądań zakończonych w 27,41 sekundy 100 klientów równoległych Ładunek 3 bajtów Keep alive: 1
0,03% <= 1 milisekunda 0,19% <= 2 milisekundy 6,44% <= 3 milisekundy 25,82% <= 4 milisekundy 45,65% <= 5 milisekund 98,79% <= 6 milisekund 99,98% <= 7 milisekund 99,98% <= 8 milisekund 99,98% <= 9 milisekund 100,00% <= 9 milisekund 18238,86 żądań na sekundę
Benchmarki granatów
Stwórz nowy projekt konsoli .NET 8 i najpierw odwołaj się do pakietu Microsoft.Garnet za pomocą następującego polecenia:
Kod jest następujący:
Polecenie startowe wygląda następująco:
Używając tego samego polecenia benchmark, wynik wygląda następująco:
====== ZESTAW ====== 5000000 żądań wykonanych w 11,51 sekundy 100 klientów równoległych Ładunek 3 bajtów Keep alive: 1
75,51% <= 1 milisekunda 88,24% <= 2 milisekundy 92,04% <= 3 milisekundy 99,46% <= 4 milisekundy 99,98% <= 5 milisekund 99,99% <= 6 milisekund 100,00% <= 12 milisekund 100,00% <= 12 milisekund 43448,04 żądań na sekundę
====== SIĘ ====== 500000 żądań wykonanych w 31,50 sekundy 100 klientów równoległych Ładunek 3 bajtów Keep alive: 1
0,01% <= 1 milisekunda 0,90% <= 2 milisekundy 27,25% <= 3 milisekundy 97,65% <= 4 milisekundy 99,82% <= 5 milisekund 99,94% <= 6 milisekund 99,98% <= 7 milisekund 99,98% <= 9 milisekund 99,98% <= 10 milisekund 99,99% <= 11 milisekund 100,00% <= 12 milisekund 100,00% <= 12 milisekund 15872,01 żądań na sekundę Ze względu na narzędzia testowe, wersje oprogramowania, parametry testowe itd., które dają różne wyniki, testy są wyłącznie referencyjne, a dzięki prostym testom w tym artykule widać, że Garnet ma znacznie niższe opóźnienia niż Redis.
(Koniec) |