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 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.
(Кінець) |