Сегодня Tarantool предлагает экосистему связанных между собой решений. Они закрывают основные потребности в хранении и обработке данных, при этом помогая улучшить производительность и надежность сервисов. Один из важных элементов этой экосистемы — Tarantool DB.
Рассказываем, что такое Tarantool DB, какие функции он скрывает «под капотом», разбираем нюансы работы с инструментом и показываем реальные кейсы его применения.
Статья подготовлена по мотивам вебинара «Строим кэши и витрины данных».
Знакомство с Tarantool DB
Tarantool DB — это мультипротокольная (работает с протоколами Redis и IPROTO) NoSQL система управления базами данных на основе платформы Tarantool Enterprise Edition (EE).
Она позволяет создавать высокоскоростные отказоустойчивые хранилища данных. С помощью Tarantool DB можно:
- ускорять доступ к данным;
- сокращать Time-to-market бизнес-сервисов;
- объединять данные из разных систем и подготавливать витрины.
Основной сценарий использования Tarantool DB — кэш, витрина «горячих» данных.
При этом Tarantool DB — отечественная разработка, поэтому инструмент можно рассматривать в качестве основного в случае «локализации» ИТ-ландшафта или миграции с NoSQL БД зарубежных вендоров.
Архитектурно Tarantool DB включает компоненты:
- для хранения данных: поддерживает кластеризацию, репликацию, шардирование, схемы данных и индексов;
- работы с данными: есть поддержка CRUD-операций и Redis-команд;
- интеграции с бизнес-приложениями: позволяет использовать для интеграции Java, Python, GO-коннекторы, Redis-коннектор.
Кейсы применения Tarantool DB
Сервис аутентификации. Личный кабинет
Tarantool DB используется в сервисе аутентификации в личном кабинете для хранения сессий пользователей и кодов авторизации. База хранит более 20 млн записей, поддерживает до 2 тысяч одновременных сессий и обеспечивает скорость отклика менее 100 мс при нагрузке до 2 тысяч запросов в секунду.
При этом БД одновременно решает задачи как краткосрочного, так и долгосрочного хранения. Это важно, поскольку время сессий может различаться — сессии могут храниться минуты (браузеры), а могут месяцы (мобильные приложения). RTO и RPO — меньше 1 часа.
Вместе с Tarantool DB, разнесенным на два ЦОДа, в архитектуре решения также есть сервис SSO и шлюз аутентификации. К данным из Tarantool обращаются сервисы для пользователей и личный кабинет пользователей.
Банковская система. Оперативное хранилище
Tarantool DB применяют в качестве оперативного хранилища банковской системы. БД хранит данные об остатках на счетах клиентов и журнал проводок в течение банковского рабочего дня, после чего передает данные в дисковую базу данных для архивного хранения.
На Tarantool DB приходится нагрузка в виде 150 ГБайт данных и более 20 тысяч запросов в секунду. Что важно — для банковской системы недопустима потеря данных, и синхронная репликация, поддерживаемая Tarantool DB, позволяет выполнять это требование.
Провайдер. Оценка в онлайне расходов клиентов
Один из провайдеров использует Tarantool DB для хранения информации о всевозможных пользовательских счетчиках (минуты, гигабайты, бонусные баллы и другие). Особенность реализации в том, что в рамках единого хранилища нужно работать с данными, относящимися к разным типам услуг.
Клиентское решение подразумевает недопустимость потери данных, большое количество запросов (более 60 тысяч в секунду) и большой объем данных (больше 1 ТБайт), поэтому Tarantool DB работает в рамках Tarantool Clusters Federation, используется синхронная репликация и репликация в резервный ЦОД.
Возможности «под капотом»
Tarantool DB имеет расширенные возможности хранения данных. Среди них:
- гарантированная персистентность хранимых данных;
- оптимизация хранения данных за счет сжатия и управление временем жизни данных;
- поддержка разных моделей данных: key-value, документарная БД, классические таблицы;
- поддержка вторичных индексов;
- гибкая настройка и управление схемой данных в кластерном хранилище данных.
Помимо прочего, в Tarantool DB вшита возможность полнофункциональной работы с протоколом Redis. В том числе есть:
- поддержка типов данных и более 60 команд Redis;
- поддержка Redis ACL;
- интеграция с LDAP/AD;
- логирование событий;
- шифрование TLS;
- совместимость настроек с Redis.
Такая совместимость позволяет переносить прикладные системы, работающие с Redis, на Tarantool DB — и прилагать для этого минимум усилий.
Безопасность и эксплуатационные возможности Tarantool DB
Здесь Tarantool DB обладает следующими возможностями:
- возможность управлять кластерным хранилищем данных как через интерфейс, так и через командную строку;
- поддержка механизма failover для повышения отказоустойчивости кластера;
- поддержка ролевой модели назначения прав доступа к объектам хранилища;
- журналирование всех событий для последующего аудита безопасности;
- интеграция с LDAP и шифрование TLS.
При этом Tarantool DB умеет работать на всех отечественных операционных системах, без проблем развертывается в среде Kubernetes, умеет раскатываться через Ansible, позволяет экспортировать метрики мониторинга (например, в Grafana или Prometheus).
Работа Tarantool DB с приложениями на Java
Важным компонентом для работы БД с Java-приложениями является Java-коннектор. Он предоставляет набор классов и интерфейсов, которые позволяют разработчикам создавать и выполнять SQL-запросы, изменять данные, управлять транзакциями и выполнять другие операции.
Для совместимости Tarantool с приложениями на Java у нас есть свой Java-коннектор. Недавно он был обновлен до третьей версии и теперь имеет следующие особенности:
- Полная поддержка протокола Tarantool (iProto). Реализованы и поддерживаются: -- маппинг типов данных Tarantool и Java; -- преобразование исключений Tarantool в исключения Java, в том числе вложенных исключений; -- преобразование Message Pack к структурам Java, в том числе к пользовательским классам; -- пагинация массива данных; -- интерактивные транзакции; -- подписка на события Tarantool.
- Удобство работы. Коннектор получил упрощенный API, поддержку фреймворка Spring, возможность конвертации объектов с помощью Jackson.
- Надежность. Есть и можно использовать: -- healthscheck работоспособности и переподключение к работающему инстансу БД; -- авторизацию (CHAP-SHA1, PAP-SHA256); -- поддержку TLS/MTLS; -- ограничение времени выполнения подключения; -- мониторинг.
В перспективе мы планируем реализовать enterprise-решение Spring Data, а также имплементировать разные обертки в виде спринт-кэша, G-кэша, API для кэширования.
Нюансы эксплуатации Tarantool DB
Tarantool и ускорение микросервисов. В микросервисной архитектуре БД может использоваться для постоянного хранения данных, в виде кэша или витрины данных и для других нагрузок. При этом Tarantool DB хранит данные в оперативной памяти, что положительно сказывается на скорости приложения и доступа к данным.
Tarantool DB и OLAP. Есть два типа систем. Одни ориентированы на OLAP-запросы (оперативная обработка данных), другие — на OLTP-запросы (обработка транзакций в реальном времени). Tarantool DB ориентирован именно на OLTP-нагрузку. Для работы с OLAP лучше использовать Tarantool Column Store — in-memory колоночную СУБД для транзакционно-аналитической обработки данных в реальном времени.
Tarantool DB и транзакции. Tarantool поддерживает транзакции ACID (Atomicity, Consistency, Isolation, Durability), но поддержка ACID обеспечивается только внутри экземпляра Tarantool. Если транзакция кластерная — нужен дополнительный контроль и вспомогательные триггеры для обработки таких запросов. Зависимость скорости работы от платформы развертывания. Классически физический сервер обеспечивает производительность выше, чем виртуальный. Это связано с тем, что любая виртуальная система неизбежно становится «прослойкой» и добавляет различные задержки. Вместе с тем при правильной настройке виртуальной среды развертывания, Tarantool DB может демонстрировать высокую производительность при обработке десятков и сотен тысяч запросов даже при незначительном объеме вычислительных мощностей. Это доказывает и практика — многие компании работают с Tarantool именно на виртуальных машинах.
Алгоритмы синхронизации данных. Для синхронизации данных между разными серверами и ЦОДами Tarantool DB использует репликационные потоки. При этом вариантов синхронизации несколько: асинхронная репликация, синхронная репликация, Tarantool Cluster Federation (TCF). При синхронной репликации можно использовать как классический Stateful Failover с Failover-координатором, так и алгоритм Raft (находится в бета-версии). В Stateful Failover мастером назначается следующий по приоритету узел.
Действия миграций при запуске рестарта. В Tarantool есть файл schema.yml, в котором лежит вся информация о кластере и его компонентах. Причем об этом файле знает каждый инстанс Tarantool. При рестарте БД миграции, указанные в schema.yml, запускаются автоматически.
Примечание: В ходе вебинара «Строим кэши и витрины данных» мы провели демо, где показали, как разворачивать Tarantool DB, настраивать кластер, загружать данные и работать с ними. Посмотреть его можно здесь.
Мы постарались «упаковать» в Tarantool DB максимум функций и возможностей, чтобы уже «из коробки» БД могла закрыть основные потребности и боли пользователей при построении кэшей и витрин данных.
Остались вопросы?
Расскажите о ваших задачах и узнайте больше
о реализации на платформе Tarantool