Подписывайтесь также на мой Телеграм!
Сегодня хотелось бы немного обсудить распределенное кеширование. Нужно оно сами знаете для чего. Накопилось немного новостей.
Наверное, все в той или иной степени сталкивались на проектах с 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 для лучшего понимания сути проблемы.