Pattern

Блог Tarantool

BackIcon

Разбираем, чем заменить Redis

Разбираем, чем заменить Redis

CalendarIcon

28.03.2025

TimeIcon

3 мин.

EyeIcon

9

scroll iconScroll

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

Но для российских компаний Redis постепенно превращается в «чемодан без ручки»: вендор инструмента объявил о смене лицензии проекта на двойную (Redis Source Available License и SSPLv1), поддержка инструмента в РФ остается под вопросом, документация проекта закрыта, а новые законы делают приоритетным импортозамещение используемого ПО.

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

Немного о Redis

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

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

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

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

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

Почему компании ищут Redis альтернативы и какие варианты есть

Redis — одна из популярных СУБД. Например, по данным 2024 года, с ней работают около 20% разработчиков, в том числе многие российские специалисты и компании. Вместе с тем для пользователей из РФ решение постепенно становится не таким привлекательным, особенно для использования вдолгую и в больших проектах.

Причин несколько.

  • 20 марта 2024 года вендор инструмента объявил о переходе на лицензии SSPL и RSAL. То есть, начиная с версии Redis 7.4, код проекта распространяется под проприетарными лицензиями вместо ранее применявшейся лицензии BSD. Таким образом, функций и обновлений в открытом доступе со временем станет еще меньше.
  • Перспективы работы Redis в РФ не определены. Безусловно, никто не говорит, что Redis будет заблокирован в России, но нет гарантий, что даже при использовании инструмента с проприетарной лицензией у пользователей не возникнет проблем с доступом к сервису и документации, оплатой, обновлениями и поддержкой.
  • Одним из основных векторов развития ИТ-рынка РФ является импортозамещение используемого ПО и оборудования. Так, согласно нормам закона и предлагаемым изменениям в Федеральный закон «О безопасности критической информационной инфраструктуры Российской Федерации», приоритетом является переход на российское ПО, к числу которого Redis не относится.

В результате компании вынуждены искать замену Redis.

Альтернатив Redis несколько, в том числе среди Open-Source-решений. Но большинство из них продвигаются зарубежными разработчиками, поэтому не защищены от рисков, с которыми потенциально могут столкнуться пользователи Redis. Поэтому с точки зрения доступности набора предложенных возможностей и локализации достойной альтернативой Redis для российских (и не только) компаний может стать один из лидеров рынка In-memory в России — Tarantool DB.

Примечание: Tarantool DB — надежная и высокоскоростная In-memory-база данных. Инструмент относится к классу Not Only SQL СУБД. В Tarantool DB реализована поддержка схем, гарантий ACID, репликации, шардирования. К особенностям продукта относится наличие коннекторов для разработки хранилищ данных на языках бизнес-приложений. Tarantool DB входит в Реестр отечественного ПО и прошел сертификацию ФСТЭК.

Tarantool DB vs Redis: что получаем и теряем при переходе на новый инструмент

В идеальных условиях смена стека должна проводиться бесшовно — без потери функций, перестроения используемых пайплайнов, снижения производительности обработки, влияния на доступность и другие параметры. Но в реальных условиях обеспечить полное соответствие сложно: инструменты неизбежно различаются, даже на уровне отдельных аспектов.

Чтобы понять, как замена Redis на аналоги повлияет на ИТ-ландшафт и выстроенные процессы, мы сравнили инструменты по основным параметрам.

Надежность

Надежность хранения данных обеспечивается персистентностью и репликацией. Обе функции поддерживаются как в Redis, так и в Tarantool.

Масштабируемость

СУБД Redis можно масштабировать как с помощью репликаций, так и с помощью шардирования.

  • В случае масштабирования реплицированием нужен Redis Sentinel — процесс, который управляет репликами.
  • Для масштабирования шардированием нужен Redis Cluster — он позволяет строить кластеры из набора реплик и шардировать данные по фиксированным слотам.

Tarantool также предлагает поддержку обоих механизмов масштабирования и предоставляет возможность управлять ими с помощью инструментов кластеризации.

При этом:

  • в Redis решардинг настраивается и запускается вручную, а в Tarantool эти процессы автоматизированы;
  • Redis Cluster осуществляет маршрутизацию запросов на стороне клиента, а Tarantool — внутри кластера. То есть в контексте масштабирования Tarantool более гибкий и удобный.

Поддерживаемые типы данных

В Redis ключом может являться только строка, но хранить в СУБД можно данные разных типов: от строк и списков до пар «ключ — значение» и не только.

Tarantool также имеет расширенную поддержку типов данных, причем как атомарных, так и комплексных.

Вытеснение данных

Как в Tarantool DB, так и в Redis есть механизм лимитирования доступной памяти. Более того, в обоих решениях можно настроить не только уведомление о превышении лимита, но и алгоритмы удаления ненужных файлов. Например, в Redis для этих задач предусмотрена поддержка сразу нескольких механизмов вытеснения, среди которых:

  • вытеснение файлов из кэша после истечения заданного времени их существования (TTL — Time to Live);
  • удаление объектов, к которым дольше всего не было обращений (LRU — Least Recently Used);
  • удаление случайных объектов (Random);
  • удаление файлов, которые использовались реже других за определенный период (LFU — Least Frequently Used).

В Tarantool DB для этих задач используется функция управления временем «жизни» данных.

Вторичные индексы

В Redis для работы со вторичными индексами нужны «костыли» и дополнительные модули. Из коробки такого функционала в инструменте нет.

Одновременно с этим Tarantool из коробки позволяет строить любое количество вторичных индексов. При этом они могут состоять из множества полей, содержать разные ключи, строиться по массивам значений. То есть с Tarantool можно реализовывать реляционные модели хранения. В СУБД RedisРедис реализовать подобное нельзя.

Персистентность

Для обеспечения персистентности данных нужны механизмы создания снапшотов (копий данных) и журналов предзаписи (WAL).

Tarantool, как и Redis, поддерживает оба механизма.

  • В Redis сброс данных из оперативной памяти на диск осуществляется каждую минуту с помощью механизма ОС fork. В случае любых аварийных ситуаций восстанавливается состояние, актуальное на момент последнего сохранения, все остальное утрачивается.

Журнал WAL в Redis применяется для сохранения на диске всей поступающей информации. При восстановлении после аварии Redis накатывает сохраненное состояние из снапшота, а недостающие транзакции восстанавливает из WAL.

  • В Tarantool персистентность обеспечивается комплексно — как снапшотами, так и журналированием. Благодаря такой реализации возможна полноценная WAL-based-репликация.

Вместе с тем в контексте обеспечения консистентности Redis и Tarantool все же различаются. Так:

  • Создание снапшотов в Redis осуществляется через механизм ОС fork. Tarantool для этого задействует более производительный внутренний readview.
  • В Redis из коробки активно только создание снапшотов. В Tarantool сразу включены и снапшотинг, и журнал.
  • Redis работает с одним файлом для WAL-журнала и снапшотов. Tarantool использует два файла, а количество журналов не ограничено.
  • В Tarantool снапшоты и WAL-журналы содержат все метаданные о транзакции и ее авторе. Redis таким похвастаться не может.

Транзакции

Tarantool, как и Redis, поддерживает механизм транзакций для непрерывного выполнения нескольких операций.

Хранимые процедуры

Как в Tarantool, так и в Redis для создания хранимых процедур предлагается использовать язык Lua.

Вместе с тем различия все же есть и даже по нескольким аспектам:

  • Реализация. В Tarantool применяется LuaJIT, а в Redis — PUC-Rio.
  • Тайм-аут. Redis позволяет задавать тайм-аут для остановки выполнения хранимых процедур. В Tarantool такого механизма нет: чтобы прервать процедуру, надо задействовать механизм проверки флага прерывания.
  • Runtime. Redis следует концепции однозадачности, то есть все операции выполняются полностью и последовательно. В свою очередь, в Tarantool можно с помощью ReadView дать доступ к данным для внешних модулей на Rust/C.

То есть в Redis Lua позволяет создавать простые хранимые процедуры, а в Tarantool можно реализовывать более сложный runtime для взаимодействия с внешними системами.

Поддерживаемые коннекторы

Redis из коробки поддерживает клиентские библиотеки для пяти основных языков: Python, C #/.NET, Node.js, Java, Go. Также можно использовать сторонние библиотеки, которые Redis не поддерживает напрямую. Среди них C, PHP, Ruby, Rust.

Tarantool DB официально поддерживает коннекторы для Java и Go. При этом для решения есть много открытых коннекторов, в том числе под Python и PHP. Полный список коннекторов можно найти здесь.

Репликация

Redis поддерживает исключительно асинхронную репликацию.

Tarantool поддерживает как асинхронную, так и синхронную репликацию.

Безопасность

В Redis есть поддержка аутентификации и авторизации. Но нет аудита операций с данными.

В Tarantool DB, помимо базовых механик защиты, есть и аудит операций с данными. Более того, в решении реализован ГОСТ TLS для шифрования трафика, а также получен сертификат ФСТЭК.

Что еще интересного предлагает Tarantool DB

Благодаря схожести инструментов по основным параметрам переход с Redis на Tarantool DB можно реализовать практически без влияния на выстроенные процессы и сложных манипуляций. При этом Tarantool DB способен не просто заменить Redis, но и предоставить возможности, которых в нем нет. Среди таких:

  • возможность указания независимых схем данных для разных таблиц или аналогов;
  • поддержка транзакций;
  • поддержка словарей в кластере (таблицы, дублируемые на все узлы);
  • возможность наложения ограничений (constraint) на данные;
  • геораспределение базы данных с помощью Tarantool Clusters Federation для построения отказоустойчивой системы.

Важно отметить, что переход с Redis на Tarantool DB можно реализовать минимальными усилиями. Это возможно благодаря тому, что в поставке Tarantool DB присутствует механизм drop-in-замены Redis на Tarantool, а также предусмотрены:

  • поддержка типов данных и 70+ команд Redis;
  • поддержка Redis ACL;
  • совместимость настроек с Redis.

Подробнее об этом можно почитать в официальной документации сервиса.

От теории к цифрам

Теперь посмотрим на прикладном уровне, как замена Redis на Tarantool DB повлияет на ключевые метрики.

Для наглядности рассмотрим, как оба решения справляются с нагрузками в типичных сценариях работы.

За основу сравнения мы берем результаты нагрузочного тестирования, которое провел Денис Макаров, Backend-teamlead в компании KTS. Полный текст исследования вы можете найти здесь.

Для нагрузочного тестирования использовался Grafana K6 (с дополнительным расширением для Tarantool).

Сравнение проводилось на Tarantool 2.10 и Redis 7.0.5.

Простой Key-Value

Тест проводился на ВМ с Ubuntu с 4 CPU, 16 Гб оперативной памяти и SSD на 30 Гб.

Проверялись три задачи: установка значения по ключу, чтение, удаление.

Нагрузка — 100 пользователей. Время теста — 2 минуты. Ключ — ID пользователя и номер запроса. RedisРедис и аналог, то есть Tarantool, тестировались в дефолтной конфигурации.

По результатам тестов Tarantool оказался производительнее в операциях записи и чтения, а Redis — в удалении.

image6.jpg

Работа с множествами

Сценарий подразумевал проверку производительности инструментов при добавлении и получении значений из множества с помощью команд SADD/SMEMBERS.

Инструменты показали схожие результаты:

image1.jpg

Счетчик

Вводные условия практически идентичны: нагрузка в виде 100 пользователей.

Применяли INCR/DECR в Redis и идентичные update-операции в Tarantool, причем операции выполняются параллельно.

В этом сценарии Tarantool немного уступает по производительности.

image4.jpg

Вторичные индексы

В Redis добавляем вторичные индексы с помощью модуля RediSearch. В Tarantool поддержка вторичных индексов есть из коробки.

В этой задаче Tarantool действует быстрее на 2000–3000 RPS.

image3.jpg

Примечательно, что для Tarantool не нужны никакие вспомогательные компоненты.

Работа с памятью

Тест-кейс направлен на определение производительности работы инструментов с диском. Сценарий фактически повторял тест с проверкой Key-Value, но с изменением конфигурации БД:

  • в Redis изменялся параметр appendfsync;
  • в Tarantool — параметр wal_mode.

В этом сценарии лучшие показатели демонстрирует именно Tarantool.

image5.jpg

Производительность БД при репликации

Чтобы понять, как с репликацией меняется производительность БД, каждый инструмент проверили в задачах реплицирования на один узел.

Тест-кейс повторял тест Key-Value, но с изменением конфигурации репликации. Для проведения теста были развернуты две ВМ с Ubuntu, 4 CPU, 16 Гб оперативной памяти и 30 Гб SSD.

По итогам теста в операциях чтения и удаления Tarantool немного уступает Redis.

image2.jpg

Tarantool DB — достойная замена Redis?

Redis — популярный инструмент с большим комьюнити, который подходит для многих сценариев и исходных условий.

Вместе с тем Redis не безальтернативное решение. Достойной заменой СУБД вполне может стать Tarantool DB, который во многих типичных для Redis сценариях демонстрирует схожие показатели или даже превосходит своего конкурента. Более того, Tarantool можно эффективно использовать даже там, где не подходит Redis: российский аналог имеет больше возможностей и вариантов применения в проде. И при этом Tarantool — российский инструмент, внесенный в Реестр отечественного ПО, то есть риски работы с ним с точки зрения локализации и законодательства сведены к минимуму.

Читайте также

Middleware для IoT и цифровых двойников

Цифровые двойники позволяют создавать точные копии физических объектов или процессов в цифровом пространстве. Этот термин известен еще с 2002 года и подразумевает создание цифровых двойников реальных объектов в виртуальном мире для оптимизации производственных процессов — например, определения оптимального расположения оборудования на заводе или оптимизации логистики.
ArrayIcon

Tarantool: 15 лет истории и эволюции версий

Tarantool применяют в разных сценариях крупного корпоративного бизнеса — от мобильного банкинга до онлайн-доставки. Чтобы достичь этого и уйти от рисков потери данных, характерных для In-memory технологий прошлых поколений, специалисты Tarantool на протяжении всей 15-летней истории развития инструмента повышали его надежность и добавляли новые функции. Команда Tarantool рассказывает, как зарождалось решение, как оно эволюционировало и чем сейчас привлекает пользователей, в том числе Enterprise-клиентов с повышенными требованиями к безопасности и отказоустойчивости.
ArrayIcon

Выбор хранилища S3 On-Premises: анализ вариантов в РФ

ArrayIcon