Tarantool Выпуск 1.7.2
Total Page:16
File Type:pdf, Size:1020Kb
Tarantool Выпуск 1.7.2 мар. 14, 2019 Оглавление 1 Что нового? 1 1.1 Что нового в Tarantool 1.7?....................................1 2 Общие сведения 2 2.1 Сервер приложений + СУБД...................................2 2.2 Возможности СУБД........................................3 3 Практикум 5 3.1 Практические задания на Lua..................................5 3.2 Практическое задание на C.................................... 17 4 Руководство пользователя 21 4.1 Предисловие............................................. 21 4.2 Начало работы........................................... 22 4.3 Функционал СУБД......................................... 25 4.4 Сервер приложений........................................ 58 4.5 Администрирование серверной части.............................. 72 4.6 Коннекторы............................................. 108 4.7 Вопросы и ответы......................................... 120 5 Справочники 121 5.1 Справочник по встроенной библиотеке............................. 121 5.2 Справочник по сторонним библиотекам............................. 228 5.3 Справочник по настройке..................................... 247 6 Руководство участника проекта 257 6.1 Справочник по C API....................................... 257 6.2 Детали реализации......................................... 280 6.3 Сборка и участие в проекте.................................... 293 6.4 Соглашения по разработке.................................... 298 Lua Module Index 329 i ГЛАВА 1 Что нового? Здесь собрана информация о существенных изменениях, которые произошли в конкретных версиях Tarantool’а. Более мелкие изменения и исправления дефектов указаны в отчетах о выпущенных стабильных рели- зах (milestone = closed) на GitHub. 1.1 Что нового в Tarantool 1.7? Дисковый движок, который в более ранних версиях Tarantool’а назывался sophia и phia, заменен новым движком под названием vinyl. Добавлены новые типы индексируемых полей. Обновлена версия LuaJIT. У кластера репликации появилась возможность самонастройки, что существенно упрощает настройку нового кластера. Функция space_object:inc() объявлена устаревшей. Функция space_object:dec() объявлена устаревшей. 1 ГЛАВА 2 Общие сведения 2.1 Сервер приложений + СУБД Tarantool представляет собой сервер приложений на языке Lua, интегрированный с СУБД. В основе Tarantool лежат файберы (fibers), что позволяет нескольким Lua-приложениям работать в одном потоке (thread), при этом Tarantool-сервер может одновременно запускать другие потоки для обработки ввода- вывода данных и фоновых сервисных задач. Tarantool включает в себя LuaJIT (Just In Time) Lua- компилятор, Lua-библиотеки для решения наиболее частых задач, а также сервер баз данных Tarantool, представляющий собой NoSQL СУБД. Таким образом, Tarantool может всё то же, что node.js и Twisted, а кроме того обеспечивает сохранность данных. Tarantool — это open-source проект. Исходный код открыт для всех и распространяется бесплатно согласно лицензии BSD license. Поддерживаемые платформы: GNU / Linux, Mac OS и FreeBSD. Создателем Tarantool’а — а также его основным пользователем — является компания Mail.Ru, круп- нейшая Интернет-компания России (30 млн пользователей, 25 млн электронных писем в день, веб- сайт в списке top 40 международного Alexa-рейтинга). Tarantool используется для обработки самых "горячих"данных Mail.Ru, таких как данные пользовательских онлайн-сессий, настройки онлайн- приложений, кеширование сервисных данных, алгоритмы распределения данных и шардинга, и т.д. Tarantool также используется во всё большем количестве проектов вне стен Mail.Ru. Это, к примеру, онлайн-игры, цифровой маркетинг, социальные сети. Несмотря на то что Mail.Ru спонсирует разработ- ку Tarantool’а, весь процесс разработки, в т.ч. дальнейшие планы и база обнаруженных ошибок, явля- ется полностью открытым. В Tarantool включены патчи от большого числа сторонних разработчиков. Усилиями сообщества разработчиков Tarantool’а были написаны (и далее поддерживаются) библиоте- ки для подключения модулей на внешних языках программирования. А сообщество Lua-разработчиков предоставило сотни полезных пакетов, большинство из которых можно использовать в качестве рас- ширений для Tarantool’а. Пользователи Tarantool’а могут создавать, изменять и удалять Lua-функции прямо во время ис- полнения кода. Также они могут указывать Lua-программы, которые будут загружаться во время запуска Tarantool’а. Такие программы могут служить триггерами, выполнять фоновые задачи и вза- имодействовать с другими программами по сети. В отличие от многих популярных сред разработки приложений, которые используют "реактивный"принцип, сетевое взаимодействие в Lua устроено по- 2 Tarantool, Выпуск 1.7.2 следовательно, но очень эффективно, т.к. оно использует среду взаимной многозадачности самого Tarantool’а. Один из встраиваемых Lua-пакетов — это API для функционала СУБД. Таким образом, некоторые разработчики рассматривают Tarantool как СУБД с популярным языком для написания хранимых процедур, другие рассматривают его как Lua-интерпретатор, а третьи – как вариант замены сразу нескольких компонентов в многозвенных веб-приложениях. Производительность Tarantool’а может до- стигать сотен тысяч транзакций в секунду на ноутбуке, и ее можно наращивать "вверх"или "вширь"за счет новых серверных ферм. 2.2 Возможности СУБД Компонент "box"— серверная часть с функционалом СУБД — это важная часть Tarantool’а, хотя он может работать и без данного компонента. API для функционала СУБД позволяет хранить Lua-объекты, управлять коллекциями объектов, со- здавать и удалять вторичные ключи, делать атомарные изменения, конфигурировать и мониторить репликацию, производить контролируемое переключение при отказе (failover), а также исполнять код на Lua, который вызывается событиями в базе. А для прозрачного доступа к удаленным (remote) экземплярам баз данных разработан API для вызова удаленных процедур. В архитектуре серверной части СУБД Tarantool’а реализована концепция "движков"базы данных (storage engines), где в разных ситуациях используются разные наборы алгоритмов и структуры дан- ных. В Tarantool’е есть два встроенных движка: in-memory движок, который держит все данные и индексы в оперативной памяти, и двухуровневый движок для B-деревьев, который обрабатывает дан- ные размером в 10-1000 раз больше того, что может поместиться в оперативной памяти. Все движки в Tarantool’е поддерживают транзакции и репликацию, поскольку они используют единый механизм упреждающей записи (WAL = write ahead log). Это механизм обеспечивает согласованность и со- хранность данных при сбоях. Таким образом, изменения не считаются завершенными, пока не проходит запись в лог WAL. Подсистема логирования также поддерживает групповые коммиты. In-memory движок (memtx) хранит все данные в оперативной памяти, поэтому время ожидания при чтении у него очень мало. Также, когда пользователи запрашивают статические снимки (snapshots), этот движок создает персистентные копии данных в постоянной памяти, например на жестком диске. Если Tarantool-сервер прекращает работать и данные в оперативной памяти теряются, то при следую- щем запуске Tarantool-сервер загружает в память самую свежую копию данных с диска и применяет к ней все транзакции из лога, которые были сделаны с момента создания копии. Таким образом, данные при сбое не теряются. В штатных ситуациях in-memory движок работает без блокировок. Вместо низкоуровневых механизмов параллельной обработки данных, которые предлагает операционная система (например, mutex’ов), Tarantool использует среду взаимной многозадачности, и таким образом может работать с тысячами соединений одновременно. В Tarantool’е есть фиксированное количество независимых нитей (thread), и у них нет общего состояния. Для обмена данными между нитями используются очереди сообщений, что позволяет уменьшить накладные расходы. Такой подход накладывает ограничение на количество процессорных ядер, которые Tarantool-сервер может использовать, но в то же время он позволяет избежать конкуренции за шину памяти, а также дает запас масштабируемости по скорости доступа к памяти и производительности сети. В результате даже сильно нагруженный Tarantool-сервер в среднем использует процессор не более чем на 10%. Кроме того, Tarantool поддерживает поиск как по первичным, так и по вторичным ключам в индексах. Дисковый движок (vinyl) совмещает в себе подходы, заимствованные из современных файловых систем, журналируемых merge-деревьев (log-structured merge trees) и классических B-деревьев. Все данные в этом движке разбиты по забегам (runs), где каждый забег представляет собой файл на диске. Максимальный размер забега обычно равен 64МБ, и его можно настраивать. Каждый забег – 2.2. Возможности СУБД 3 Tarantool, Выпуск 1.7.2 это набор страниц, которые нужны для каких-то целей. Если забег полностью смержен, то диапазоны ключей на его страницах не пересекаются. Если же диапазоны ключей в забеге в какой-то момент сильно изменялись, то мы имеем дело с частично смерженным забегом. В этом случае на некоторых страницах появились новые ключи и значения, которых ранее не было в данном забеге. Дисковый движок обновляет данные по принципу дописывания в конец: новые данные никогда не затирают старые. Tarantool поддерживает работу с составными ключами в индексах. Возможные типы ключей: HASH, TREE, BITSET и RTREE. Tarantool также поддерживает асинхронную репликацию — как локальную, так и на удаленных серверах. При этом репликацию можно настроить по принципу мастер-мастер, когда несколько узлов могут не только обрабатывать входящую нагрузку, но и получать данные от других узлов. 4 Глава 2. Общие