Найти в Дзене
CTO Pro IT & .NET

Распределенное кеширование (Distributed Cache). Что новенького?

Garnet
Garnet

Подписывайтесь также на мой Телеграм!

Сегодня хотелось бы немного обсудить распределенное кеширование. Нужно оно сами знаете для чего. Накопилось немного новостей.

Наверное, все в той или иной степени сталкивались на проектах с Redis. На всякий случай Redis — резидентная система управления базами данных класса NoSQL, работающая со структурами данных типа «ключ — значение». Используется как для баз данных, так и для реализации кэшей, брокеров сообщений (помнится давным-давно попадалась на глаза и взрывала мозг вот эта статейка 2014 года с видео о том, как бывший Twitter (а нынешний X) утилизирует в кластере Redis 105Tb RAM — сейчас вероятно объемы совсем другие, да и не уверен что там всё еще используется Redis, лень искать). Изначально выпускался под свободной лицензией, с 2024 года — под лицензией SSPL и RSAL.

Последний факт, кстати, многих напугал, когда 24 марта этого 2024 года Redis Ltd. объявила, что, начиная с Redis 7.4, её in-memory data store будет выпускаться под несвободными лицензиями с доступным (source-available) исходным кодом. Лицензии SSPL и RSAL не являются открытыми и вносят дополнительные ограничения, запрещающие бесплатное использование продукта для обеспечения работы облачных сервисов. Так что не всем, в итоге, стоит переживать, а только облачным провайдерам (статья на хабре с разбором).

В связи с этим многие задумались о поиске альтернатив. В интернетах фигурируют такие сервисы, как KeyDB, Valkey и т.д.

Я подкину еще одну.

18 марта 2024 года (интересненько, всего за несколько дней до упомянутого выше анонса изменения лицензионной политики Redis) Microsoft Research в своем блоге опубликовал анонс Garnet — cache store нового поколения с открытым исходным кодом, который адаптирует популярный протокол RESP, позволяющий использовать Garnet из Redis-клиентов без модификации кода в большинстве языков программирования (как, например, StackExchange.Redis в C#). Ну и конечно же Garnet более производительный (чем другие) и масштабируемый для большого количества клиентских соединений, обеспечивает экстремально маленькие задержки для клиентов (часто менее чем 300 микросекунд в 99,9м перцентиле), расширяемый, кроссплатформенный и т.д. Всё как мы любим. На бенчмарках от Microsoft Research Redis-ы и прочие далеко позади.

Будем надеяться, что так оно и есть, сам не пробовал.

Ну и закрывая тему новостей (как же не сказать про .NET): в .NET 9 появится новая реализация кеширования HybridCache. Сервис HybridCache гарантирует, что только один конкурентный вызов вызовет фабричный метод для определенного ключа, а все остальные «вызывальщики» будут ждать результаты вызова, чего не было доселе. Вот статья со сравнением MemoryCache, DistributedCache и HybridCache и видео от уважаемого Nick Chapsas для лучшего понимания сути проблемы.