Picodata — альтернатива и drop-in-замена Redis

Александр Толстой

Redis стал де-факто стандартом для In-memory-хранения данных, однако недавние изменения в лицензировании и определенные проблемы с доступностью в России заставляют компании искать альтернативы. В этой заметке мы разберем различия и особенности двух баз данных: Picodata и Redis, а также рассмотрим Picodata Radix — специальный инструмент для замены Redis на Picodata.

Redis и проблема поддержки

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

Однако, с точки зрения корпоративного использования, Redis в последнее время становится источником проблем. В марте 2024 года разработчик Redis сменил лицензию на двойную (Redis Source Available License и SSPLv1), ограничивающую получение и использование исходного кода. Начиная с версии Redis 7.4, код проекта распространяется под проприетарными лицензиями вместо ранее применявшейся лицензии BSD. Это означает, что функций и обновлений в открытом доступе со временем станет еще меньше. Официальная документация Redis недоступна пользователям из России, а изменения в законодательстве РФ с некоторых пор явно отдают предпочтение отечественному ПО.

На российском рынке In-memory-решений есть несколько альтернатив Redis, и один из наиболее интересных вариантов — распределенная СУБД Picodata.

В это заметке мы рассмотрим Picodata с двух сторон:

  • СУБД Picodata как распределенная база данных общего назначения с набором уникальных функций. Для миграции с других СУБД, в том числе с Redis, требуется переписывание клиентских приложений и перестройка отдельных бизнес-процессов
  • Коммерческий плагин Radix, работающий в Picodata и позволяющий максимально удобно мигрировать с Redis с сохранением текущих приложений и бизнес-процессов. Radix — drop-in-замена Redis.

Для начала сравним основные функции СУБД Picodata и Redis, в частности — их общие черты.

Общие черты двух СУБД

Оба продукта, Picodata и Redis, обладают следующими свойствами:

  • высокая производительность за счёт хранения содержимого баз данных в оперативной памяти
  • однопоточность (обработка транзакций в обеих СУБД происходит в одном потоке)
  • возможность кластеризации — масштабирования системы хранения на нескольких вычислительных узлах для работы с очень большими объёмами данных
  • отказоустойчивость кластера за счет асинхронной репликации между активной и резервной репликами

Отличия Picodata от Redis

Picodata, как более универсальная СУБД, не имеет ограничений, присущих Redis. Посмотрим на отличия двух СУБД:

  • В Redis данные хранятся не в табличном виде, а в формате «ключ — значение». При этом ключи содержат тип строки, а значения — строки, списки, хеши и другие структурированные представления. Ключом может являться только строка, но хранить в СУБД можно данные разных типов: от строк и списков до пар «ключ — значение» и не только. В Picodata данные хранятся в таблицах с поддержкой реляционных связей. Ключи могут быть как простыми, так и составными. Значения же — строка, кортеж значений любых типов, поддерживаемых СУБД.
  • И Redis, и Picodata поддерживают горизонтальное масштабирование, но есть нюансы. Picodata изначально содержит весь необходимый инструментарий для управления кластером и отдельными инстансами. Если в Redis решардинг настраивается и запускается только вручную, то в Picodata этот процесс может быть как ручным, так и автоматизированным. По умолчанию, добавление новых узлов в кластер Picodata приводит к автоматической перебалансировке данных. Также, маршрутизация запросов в Picodata, в отличие от кластера Redis, происходит внутри кластера (а не только на стороне клиента), что делает Picodata более гибкой и удобной.
  • Picodata «из коробки» поддерживает автоматическое геораспределение узлов кластера. При запуске инстанса Picodata можно указать т. н. «домен отказа» — набор параметров, отражающих физическое расположение узла, на котором запущен инстанс (стойка, сервер, дата-центр, город и т. п.). Инстансы в составе набора реплик автоматически распределятся так, чтобы одинаковые наборы данных оказались (по возможности) в разных локациях.
  • Picodata сертифицирована по 4 уровню доверия ФСТЭК России и отвечает требованиям безопасного применения и безопасной разработки.

В результате, Picodata более удобная и гибкая в эксплуатации, но для её использования “из коробки” в приложениях, где уже используется Redis, эти приложения придётся переписывать. Для решения этой проблемы Picodata предлагает плагин Radix — отдельный инструмент, специально созданный для drop-in-замены Redis. 

Radix: ключ к Redis от разработчиков Picodata

Плагин Radix входит в состав коммерческой версии Picodata. Плагин позволяет клиентам и внешним приложениям работать с Picodata так, как если бы это был сам сервер Redis. Он поддерживает основные функции Redis и работает с несколькими десятками команд для redis-cli (поддерживается получение состояния кластера, работа со строками, списками, хешмапами, pub/sub и т. д.). Radix позволяет наиболее безболезненно перейти с Redis на Picodata с сохранением существующих бизнес-процессов.

Radix поддерживает полноценный кластерный режим работы с данными и множество баз данных (вместо 1): все 16 баз данных Redis в Picodata шардированы и доступны для работы. 

Вместе с Radix администраторы смогут воспользоваться ещё одной продвинутой функцией Picodata: тирами. Инстансы в кластере Picodata могут принадлежать разным тирам и таким образом создавать отдельные функциональные группы. Например, так можно более эффективно использовать оборудование: часть инстансов запускаются на серверах с большим объёмом ОЗУ и маленьким диском, с принадлежностью к обособленному тиру, а другая часть — на серверах с расширенной дисковой системой и с привязкой к другому тиру. Далее при создании шардированных таблиц в Picodata администратор может указать нужный тир, и  таким способом разделить потоки данных. Например, «горячие данные» обрабатывать на первом тире, а «холодные» — на втором. Это лишь один пример использования тиров, но суть в том, что подобный уровень гибкости доступен только в Picodata, а благодаря плагину Radix — и клиентам, переходящих с Redis на Picodata, но не в самом Redis.

Функциональность автоматической маршрутизации запросов в Radix позволяет запросить нужный набор данных, подключившись к любому узлу кластера. В Redis такого механизма нет: если запрашиваемых данных на текущем узле нет (по мнению менеджера кластера), то вам придется вручную подключаться к другому узлу.

Ограничения Radix

Было бы неверно думать, что функции Picodata Radix уже сейчас на 100% закрывают всю функциональность Redis. Есть некоторые ограничения и нереализованные (пока) функции.

Например, прямо сейчас Radix покрывает всё же не весь набор клиентских команд Redis, но мы работаем над тем, чтобы достичь паритета с Redis.

Также, пользователям Picodata Radix останутся недоступны внешние модули RedisGraph для работы с графами данных или RediSearch для быстрого полнотекстового поиска.

Возможность выбора

Развертывание СУБД Picodata в “чистом виде” и использование плагина Picodata Radix — это, по сути, два разных способа использования Picodata, которые предназначены для разных сценариев.

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

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

Что касается производительности, то при использовании Picodata с плагином Radix производительность может снижаться по сравнению с Redis. Это связано с архитектурой Picodata: состояние кластера фиксируется в Raft-журнале, а данные постоянно записываются в журнал транзакций (WAL) на диск, в то время как Redis применяет более гибкий механизм записи. Таким образом, некоторая потеря в производительности компенсируется значительно большей надежностью. Кроме того, всегда есть возможность нарастить мощность средствами горизонтального масштабирования.

Заключение

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

Picodata — альтернативная СУБД, также изначально рассчитанная для быстрой обработки “горячих” данных. Picodata предлагает гораздо больше дополнительных функций, чем Redis, что важно для разворачивания инфраструктуры новых проектов.  Благодаря встроенной поддержке транзакций и SQL, Picodata может работать и как полноценная база данных, подходящая для высоконагруженных сервисов. Например, Picodata дополнительно может использоваться в финансовых системах, CRM-системах или логистических сервисах, где важно не только быстро обрабатывать данные, но и гарантировать их консистентность.

Для существующих пользователей Redis Picodata предлагает миграцию с использованием коммерческого плагина Radix. Это путь быстрой и эффективной drop-in-замены Redis. Команда Picodata активно работает над достижением полного соответствия функциональности Redis, постепенно добавляя недостающие команды, чтобы обеспечить пользователям максимальную гибкость и удобство.