Redis и МЕРКУРИЙ

Redis — де-факто стандарт среди решений для In-memory-хранения данных. И вполне логично, что многие компании используют его для решения пула задач в своих проектах.

20 матра 2024 года вендор Redis объявил о смене схемы лицензирования проекта на Redis Source Available License v2 для Community версии и Server Side Public License v1 для коммерческой версии. Распространение по лицензии BSD оставлено только для ветки 7.2, поддержка которой будет полностью прекращена вендором в 2026 году. Документация проекта закрыта для российского пользователя.

В связи с этим для многих компаний стал актуальным вопрос поиска альтернатив Redis.

Коротко о Redis

Redis — резидентная СУБД класса NoSQL, которая предполагает хранение данных в формате «ключ — значение» и позволяет выстраивать структуру хранения, удобную для конечных пользователей (вместо строк, которые нужно перебирать, сортировать, упорядочивать). Инструмент реализует In-memory-хранение, что кратно повышает доступность данных и скорость работы с ними.

Redis имеет ряд особенностей. Среди них:

  • повышенная производительность, которая достигается за счет хранения данных в оперативной памяти;
  • отсутствие языка SQL (вместо этого используются команды Redis);
  • хранение данных не в табличном виде, а в формате «ключ — значение». При этом ключи содержат тип строки, а значения — строки, списки, хеши и другие структурированные представления;
  • возможность гибкого масштабирования и работы с большими объемами данных.

Redis — практически универсальный инструмент. Например, его используют в качестве:

  • хранилища пользовательских сессий и промежуточных данных;
  • брокера сообщений;
  • кэша;
  • хранилища для данных, к которым нужен быстрый доступ.

К известным недостаткам Redis следует отнести

  • Однопоточность — все запросы обрабатываются в порядке очереди, параллельная обработка запросов одним инстансом невозможна;
  • Асинхронная репликация — запросы к реплике, если таковые есть, не могут гарантированно давать актуальные данные.

Коротко о Меркурий

Меркурий (MerQry) — российский потомок Redis.

Как позволяет лицензия BSD, взятый за основу код можно переабатывать, дополнять и изменять по своему усмотрению, а результат использовать и распространять любым образом, сохраняя авторство исходного кода постольку, поскольку он полностью или в части содержится в окончательном продукте.

И тем, кто использовал Redis раньше, важно получить продукт, в котором сохраняются все положительные свойства существующего Redis ветки 7.2 и более ранних версий, с устранением обнаруживаемыых недостатков и уязвимостей, с вендорской поддержкой и с ясными перспективами. Более того, мы все хотим, чтобы продукт развивался.

Что мы имеем сейчас?

  • Ветку Меркурий 7.2, полностью совместимую с Redis 7.2, включая устранение всех заявленных уязвимостей и багов Redis 7.2;
  • Ветку Меркурий 8.0, имеющую поддержку многопоточности на чтение. Это делает бессмысленным масштабирование с помощью репликации (в сценариях с репликацией Redis допускалось использовать репликационные инстансы для обработки запросов на чтение), т.к. запросы на чтение обрабатываются дополнительными потоками Меркурия, а репликация используется только для обеспечения горячего резерва и поддержания его в актуальном состоянии;
  • Корректную работу со всеми библиотеками, созданными для работы с Redis;
  • Увеличенная, по сравнению с Redis, производительность при работе с TLS;
  • Поддержку Меркурия для отечественных операционных систем.

Что мы будем иметь в краткосрочной перспективе?

  • Регистрация Меркурия в реестре отечественного ПО.

В среднесрочной перспективе (2026 год) —

  • Модуль Кадуцей — модуль, устраняющий возможность возникновения проблемы второй потери мастера в шардированном геораспределенном кластере Redis, приводящей к необходимости ручного вмешательства для восстановления работоспособности кластера;
  • Совершенствование модели ACL.

В долгосрочной перспективе (2027 год) —

  • Модуль логирования событий безопасности (аудит лог) в файловую систему;
  • Поддержка mTLS;
  • Поддержка TTL у элементов хэша;
  • Сертификация ФСТЭК.

Таким образом, используя Меркурий версии 7, пользователь может сосредоточиться на последовательном развитии своего продукта, не делая резких движений для перехода с Redis на использование ПО, работающего малоизвестным образом: Меркурий - наследник Redis, но он — продукт российский и будет равиваться в нашей стране;

Более высокую, по сравнению с Redis, произодительность при использовании TLS.

Используя Меркурий версии 8, пользователь получает следующие преимущества по сравнению с Redis:

  • Вендорскую поддержку;
  • Более высокую производительность по чтению;
  • Отсутствие падения производительности при использовании TLS/mTLS;
  • Более актуальные данные на реплике (за счет разгрузки реплики);
  • Возможность наращивания производительности путем увеличения количества ядер на сервере.