|
|
Публикувано на 28.03.2024 18:00:42
|
|
|
|

Garnet е нов тип отдалечено кеш съхранение, разработено от Microsoft Research, което предлага няколко уникални предимства:
- Garnet използва популярния RESP линейн протокол като отправна точка, който позволява използването на Garnet от немодифицирани Redis клиенти, налични в повечето програмни езици днес, като StackExchange.Redis на C#.
- Garnet предлага по-добра пропускателна способност и мащабируемост с много клиентски връзки и малки партиди в сравнение със сравними отворени кеш хранилища, спестявайки разходи за големи приложения и услуги.
- Garnet демонстрира изключително ниска клиентска латентност (обикновено под 300 микросекунди при 99.9%) при използване на виртуални машини Commodity Cloud (Azure) с активиран ускорен TCP, което е критично за реални ситуации.
- Garnet е базиран на най-новата .NET технология и е кросплатформен, разширяем и модерен. Той е проектиран да бъде лесен за разработване и развитие без да жертва представянето в обичайни ситуации. Използваме богатата библиотечна екосистема на .NET, за да разширим API и да предоставим отворени възможности за оптимизация. Благодарение на внимателното използване на .NET, Garnet постига най-съвременна производителност както на Linux, така и на Windows.
Отворен код на адрес:Входът към хиперлинк е видим. Документация:Входът към хиперлинк е видим.
Гранатът има следните основни предимства:
- Пропускателната способност на сървъра (операции в секунда) се увеличава с няколко порядка за малки партиди и много клиентски сесии в сравнение със сравнимо отворено кеш съхранение.
- На стандартни облачни машини (Azure) с активиран ускорен TCP на Windows и Linux, латентността на операция е изключително ниска (обикновено под 300 микросекунди при 99.9%).
- С увеличаването на броя на клиентите се постига по-добра мащабируемост с или без пакетиране на клиенти.
- Възможност за използване на всички CPU/паметни ресурси на сървърен компютър чрез един споделен сървърен сървър (без необходимост от вътревъзлова клъстеризация).
- Поддръжка на набори от данни, по-големи от паметта, които преливат към локални и облачни устройства за съхранение.
- Функции на базата данни като бърза контролна точка, възстановяване и публикуване/абониране.
- Поддръжка за многовъзлово хеш разделяне (режим "клъстер" в Redis), миграция на състояния и репликация.
- Добре тествани с цялостен тестов пакет (хиляди unit тестове срещу Garnet и неговия слой за съхранение Tsavorite).
- C# кодова база, която е лесна за развитие и разширяване.
Garnet не поддържа всички Redis команди, специално поддържани команди за преглед:Входът към хиперлинк е видим. Проектът Garnet включва инструмент Benchmark за изпълнение на RESP бенчмаркове с различни клиенти, различни натоварвания и различни политики за измерване на пропускателната способност, производителността и латентността. Адрес:Входът към хиперлинк е видим. RESP протокол:Входът към хиперлинк е видим.
Тази статия използва вградените инструменти за бенчмаркинг на Redis за лесно тестване, а тестовата среда е следната:
| кеш | версия | | Редис | Redis 3.0.504 (00000000/0) 64-битов | | Гранат | Garnet 1.0.2 64 бита; Самостоятелен режим |
Redis бенчмаркове
Първо, стартирайте кеша на Redis чрез командния ред със следната команда:
Тестовата команда е следната:
Резултатите са следните:
====== SET ====== 500000 заявки, завършени за 24.38 секунди 100 паралелни клиента Полезен товар от 3 байта Поддържане жив: 1
0.03% <= 1 милисекунди 0.25% <= 2 милисекунди 2.65% < = 3 милисекунди 16.49% <= 4 милисекунди 59.95% <= 5 милисекунди 99.09% <= 6 милисекунди 99.76% <= 7 милисекунди 99.86% <= 8 милисекунди 99.93% <= 9 милисекунди 99.98% < = 10 милисекунди 99.99% <= 11 милисекунди 100.00% <= 12 милисекунди 20512.82 заявки в секунда
====== ВЗЕМИ ====== 500000 заявки, изпълнени за 27.41 секунди 100 паралелни клиента Полезен товар от 3 байта Поддържане жив: 1
0.03% <= 1 милисекунди 0.19% <= 2 милисекунди 6.44% <= 3 милисекунди 25.82% <= 4 милисекунди 45.65% <= 5 милисекунди 98.79% <= 6 милисекунди 99.98% <= 7 милисекунди 99.98% <= 8 милисекунди 99.98% <= 9 милисекунди 100.00% <= 9 милисекунди 18238.86 заявки в секунда
Гарнет бенчмаркове
Създайте нов проект за .NET 8 конзола и първо се обърнете към пакета Microsoft.Garnet със следната команда:
Кодът е следният:
Командата за стартиране е следната:
Използвайки същата команда за бенчмарк, резултатът е следният:
====== SET ====== 500000 заявки, завършени за 11,51 секунди 100 паралелни клиента Полезен товар от 3 байта Поддържане жив: 1
75.51% <= 1 милисекунда 88.24% <= 2 милисекунди 92.04% <= 3 милисекунди 99.46% < = 4 милисекунди 99.98% <= 5 милисекунди 99.99% < = 6 милисекунди 100.00% <= 12 милисекунди 100.00% <= 12 милисекунди 43448.04 заявки в секунда
====== ВЗЕМИ ====== 500000 заявки, изпълнени за 31,50 секунди 100 паралелни клиента Полезен товар от 3 байта Поддържане жив: 1
0.01% <= 1 милисекунди 0.90% < = 2 милисекунди 27.25% <= 3 милисекунди 97.65% <= 4 милисекунди 99.82% <= 5 милисекунди 99.94% <= 6 милисекунди 99.98% <= 7 милисекунди 99.98% <= 9 милисекунди 99.98% < = 10 милисекунди 99.99% <= 11 милисекунди 100.00% <= 12 милисекунди 100.00% <= 12 милисекунди 15872.01 заявки в секунда Поради инструментите за тестване, версиите на софтуера, параметрите на теста и др., които водят до различни резултати, тестовете са само за справка; чрез простите тестове в тази статия се вижда, че Garnet има значително по-ниска латентност от Redis.
(Край) |
Предишен:.NET/C# атрибут за отражение, който може да се оцени по нулеви типовеСледващ:SSE (1) използва ASP.NET Core като SSE сървър
|