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 «кластер»), миграции состояний и репликации.
- Хорошо протестирован с комплексным тестовым набором (тысячи модульных тестов против Garnet и его уровня хранения Tsavorite).
- C# кодовая база, которую легко развивать и расширять.
Garnet не поддерживает все команды Redis, особенно поддерживаемые команды для просмотра:Вход по гиперссылке виден. Проект Garnet включает инструмент Benchmark для запуска RESP-бенчмарков с использованием разных клиентов, различных рабочих нагрузок и различных политик для измерения пропускной способности, производительности и задержки. Адрес:Вход по гиперссылке виден. Протокол RESP:Вход по гиперссылке виден.
В этой статье используются встроенные инструменты бенчмаркинга Redis для простого тестирования, а среда тестирования выглядит следующим образом:
| тайник | Версия | | 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 запросов в секунду
Бенчмарки Garnet
Создайте новый консольный проект .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.
(Конец) |