Tarantool

Big Data, Большие данные, обработка данных, архитектура, SQL, Tarantool, Greenplum? Arenadata

Tarantool – open-source продукт российского происхождения, сервер приложений на языке Lua, интегрированный с резидентной NoSQL-СУБД, которая содержит все обрабатываемые данные и индексы в оперативной памяти, а также включает быстрый движок для работы с постоянным хранилищем (жесткие диски). Благодаря своим архитектурным особенностям, Тарантул позволяет быстро обрабатывать большие объемы данных, поэтому эта СУБД широко применяется в различных Big Data проектах [1].

История разработки и развития

Отметим наиболее значимые вехи развития проекта Tarantool [2]:

  • 2008 год – отечественная компания Mail.ru Group начала разработку программного продукта для своих внутренних нужд и собственных сервисов;
  • 2014 год – участие системы в первом официальном независимом тесте на производительности NoSQL-СУБД, который проводили исследователи португальских университетов. Вместе с Tarantool также тестировались и другие популярные Big Data системы класса NoSQLCassandra, Apache HBase, MongoDB, Elasticsearch, Redis, Voldemort, Scalaris, Oracle NoSQL и  Примечательно, что Tarantool показал наилучшие результаты в 4 из из 5 тестов на обработку 600 тысяч записей под нагрузкой, продемонстрировав свое главное преимущество – высочайшую скорость [3].
  • 2014 год – Тарантул внедрен в сервисы соцсетей Badoo и Одноклассники;
  • 2016 год – корпорация Mail.ru Group опубликовала исходный код Tarantool в открытом доступе под лицензией BSD;
  • 2018 год – Tarantool используется в Мегафоне, Аэрофлоте и Альфа-банке;
  • 2019 год – компания Arenadata, разработчик первого отечественного дистрибутива Apache Hadoop и других Big Data Решений, на основе Tarantool создала собственную платформу резидентных вычислений – Arenadata Grid [4].
Бенчмаркинговый тест NoSQL-СУБД
Результаты бенчмаркингового исследования самых популярных NoSQL-СУБД

Как устроен Tarantool: архитектура и принципы работы

Прежде всего отметим наиболее важные концепции Tarantool с точки зрения разработчика Big Data приложений [2]:

  • поддержка SQL и документо-ориентированных запросов на скриптовом мультипарадигмальном языке Lua;
  • поддержка ACID-транзакций (Atomicity, Consistency, Isolation, Durability – атомарность, согласованность, изоляция, стойкость);
  • индексация по первичным ключам, с поддержкой неограниченного числа вторичных ключей и составными ключами в индексах;
  • разделение доступа на основе ACL-модели (Access Control List);
  • единый механизм упреждающей записив журнал (WAL, Write Ahead Log), который обеспечивает согласованность и сохранность данных в случае сбоя – изменения не считаются завершенными, пока не проходит запись в WAL;
  • синхронная и асинхронная репликация локально и на удаленных серверах, когда сразу несколько узлов могут обрабатывать входящие данные и получать информацию от других узлов.

Основными программными компонентами Tarantool являются следующие [1]:

  • JIT (Just In Time) Lua-компилятор – LuaJIT;
  • Lua-библиотеки для самых распространенных приложений;
  • сервер документоориентированной NoSQL-СУБД Tarantool с 2-мя движками – резидентным (In-memory, memtx), который хранит все данные в оперативной памяти, и дисковый (vinyl), который эффективно сохраняет данные на жесткий диск, используя разделение на диапазоны, журнально-структурированные деревья со слиянием (log-structured merge trees) и классические B-деревья.

Перейдем к архитектуре: распределенный кластер Tarantool состоит из подкластеров, которые называются шарды (shard). Каждый шард хранит некоторую часть данных и представляет собой набор реплик, одна из которых является ведущим узлом, обрабатывающим все запросы на чтение и запись. При разделении (шардинге) данных они распределяются на заданное количество виртуальных сегментов с уникальными номерами. Рекомендуется задавать количество сегментов в 100-1000 раз больше, чем потенциальное число кластерных узлов с учетом масштабирования кластера в перспективе. Однако, слишком большое число сегментов может потребовать дополнительную память для хранения информации о маршрутизации, а слишком маленькое – привести к снижению степени детализации балансировки.

Итак, каждый шард хранит уникальное подмножество сегментов, причем один сегмент не может относиться к нескольким шардам одновременно. Таким образом, с архитектурной точки зрения сегментированный кластер Tarantool включает следующие компоненты [5]:

  • хранилище (storage) – узел, который хранит подмножество набора данных. Несколько реплицируемых хранилищ составляют набор реплик (шард, shard). У каждого хранилища в наборе реплик есть роль: мастер или реплика. Мастер обрабатывает запросы на чтение и запись. Реплика обрабатывает запросы только на чтение.
  • Роутер (router) – автономный компонент, который обеспечивает маршрутизацию запросов чтения и записи от клиентского приложения к шардам. В зависимости от функций приложения, роутер работает на его уровне или на уровне хранилища. Он сохраняет топологию сегментированного кластера прозрачной для приложения, скрывая такие детали, как номер и местоположение шардов, процесс балансировки данных, отказы реплики и восстановление после них. Роутер может сам идентифицировать сегмент, если приложение четко определяет правила вычисления идентификатора сегмента на основе запроса. Для этого роутеру необходимо знать схему данных. У роутера нет постоянного статуса, он не хранит топологию кластера и не выполняет балансировку данных. Роутер поддерживает постоянный пул соединений со всеми хранилищами, созданными при запуске, что помогает избежать ошибок конфигурации.
  • Балансировщик – фоновый процесс равномерного распределения сегментов по шардам, во время которого выполняется миграция сегментов по наборам реплик. Балансировщик запускает периодически, перераспределяя данные из наиболее загруженных узлов в менее загруженные, когда предел дисбаланса в наборе реплик превышает показатель, указанный в конфигурации.
Архитектура, Tarantool
Архитектура СУБД Tarantool

Основные сценария использования в Big Data и примеры внедрения

Благодаря высокой скорости обработки данных, типовыми сценариями применения Tarantool в Big Data считаются следующие:

  • ускорение распределенных вычислений, в т.ч. на Apache Hadoop и Spark, а также выполнение аналитических SQL-запросов с большими данными в MPP-СУБД, таких как Arenadata DB на базе Greenplum;
  • гибридная транзакционно-аналитическая обработка больших данных;
  • оперативное кэширование для систем потоковой передачи и шин данных.

На практике это встречается в следующих бизнес-задачах:

  • управление телекоммуникационным оборудованием;
  • биржевые торги на финансовых рынках и аукционах интернет-рекламы;
  • персонализированный маркетинг – формирование персональных маркетинговых предложений с привязкой ко времени и месту;
  • игровые рейтинговые таблицы.

Также Tarantool может использоваться и в системах интернета вещей (Internet of Things, IoT), в т.ч. промышленного (Industrial IoT, IIoT). Tarantool IIoT поддерживает основные протоколы работы с датчиками (MQTT и MRAA), которые генерируют большие объемы данных для обработки в реальном времени. Еще эта версия Тарантул позволяет создавать скрипты для описания процессов получения показателей с промышленных устройств, их обработки, сохранения и передачи [6].

Подробнее про примеры использования Tarantool в реальных проектах мы рассказываем в отдельной статье.

Источники

  1. https://www.tarantool.io/ru/doc/2.3/intro/
  2. https://ru.wikipedia.org/wiki/Tarantool
  3. http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf
  4. https://www.cnews.ru/news/line/2019-11-11_mailru_group_i_ibs_podpisali_soglashenie
  5. https://www.tarantool.io/ru/doc/2.2/reference/reference_rock/vshard/vshard_architecture/
  6. https://www.osp.ru/os/2017/02/13052224/

Related Entries