Tarantool решает конкретные задачи внутри больших архитектур. Поэтому к нам поступает много вопросов о том, какие инструменты можно использовать на своем рабочем месте разработчику Lua+Tarantool.
Мы ответим, но начать все равно необходимо с установки контекста и терминов.
Разработка под Tarantool включает в себя все классические шаги и инструменты:
Установка и поддержка. Tarantool можно установить локально, внутри Docker-контейнера, на хостинге или в VK Cloud в виде сервиса.
Разработка кода приложения. Lua — простой язык, его легко выучить, у него есть множество библиотек. На Tarantool можно с небольшими затратами разработать высокопроизводительное приложение, при этом сохранив простоту кода.
Тестирование и отладка. Для этого можно использовать как внутренние тесты, которые идут в комплекте с Tarantool, так и интегрированные инструменты (IntelliJ IDEA, ZeroBrane Studio, VS Code, Sublime).
Развертывание. В Tarantool написанное Lua-приложение можно выполнять рядом с движком БД, на Application server, что удобно.
Этот обзор был бы неполон без упоминания экосистемной команды, комьюнити-инициатив и мнения наших собственных разработчиков. Команда экосистемы занимается разработкой языковых коннекторов, коннекторов к другим БД, модулей и тулингом для работы с Tarantool.
Одной из свежих разработок стала утилита TT, которая возникла из необходимости перевести опыт разработки и поддержки на совсем иной уровень.
TT yet another Tarantool CLI
TT (Tarantool CLI) — это новая утилита для управления инстансами и окружением Tarantool. По своей сути TT является эволюционным развитием двух предшествующих CLI (tarantoolctl и Cartridge CLI), используемых для разработки, деплоя и запуска приложений на Tarantool.
Идея TT была в том, чтобы, с одной стороны, унифицировать и упростить уже используемые подходы, сохранив обратную совместимость и с другой — добавить возможность пользователю и разработчику легко расширять функциональность утилиты при помощи новых модулей.
Одним из основных понятий, которые вводит ТТ, является окружение (Environment).
Root и конфигурацию окружения определяет файл конфигурации tt.yaml. При установке из репозитория при помощи пакетного менеджера (apt, rpm, ...) в комплект поставки входит системный конфиг (/etc/tarantool/tt.yaml), который формирует «системное» окружение — случай, когда ТТ идет на замену tarantoolctl. Если мы хотим сформировать локальное окружение (очень удобно при разработке), используется «локальный» tt.yaml, формируемый при помощи команды tt init. Таким образом, пользователь/разработчик может иметь в системе большое количество различных «окружений», в которых будут использоваться различные версии как Tarantool/ТТ, так и самих разрабатываемых приложений.
На данный момент TT CLI имеет базовый набор команд по управлению и взаимодействию с инстансами приложений.
Любопытным сценарием является интеграция в TT пользовательских модулей: если вы разрабатываете что-то полезное, то можете положить это как модуль к ТТ и дальше обращаться уже не к своему модулю напрямую, а через TT (интегрируется в том числе и help).
А еще недавно TT добавили в Homebrew. tt — Homebrew Formulae
TT — это только часть активностей экосистемной команды. Чтобы узнать больше, можно следить за Гитхабом либо официальной документацией.
Комьюнити-инициативы
За время своего существования вокруг Tarantool выросло большое сообщество, которое активно общается с разработчиками. Периодически мы проводим любопытные активности, одной из которых стала летняя школа студентов-разработчиков, в рамках которой было разработано несколько проектов. Один из них, EmmyLua, разработан по мотивам Tarantool Lua Debugger и уже вполне готов к использованию.
Если у вас есть обратная связь, приглашаем вас к общению на нашем GitHub.
Чем пользуются наши разработчики?
Мы спросили Влада Грубова, ведущего архитектора, и Сашу Горякина, разработчика высоконагруженных систем хранения данных, чем они пользуются, когда разрабатывают что-то или помогают партнерам.
Разработка
Влад: «Последние два года мой стек состоит из VSCode, к нему Sumneko и много-много модулей, которые я пишу для себя».
Саша: «Я тоже использую VSCode плюс Luacheck как линтер».
VSCode в представлении не нуждается, но ребята подчеркнули важность наличия возможности расширения и интеграции функциональности.
Sumneko — это плагин к VS Code, мощный автокомплит, рефакторинг для Lua. Sumneko расширяемый, и мы активно работаем над тем, чтобы добавить в него тарантульные аннотации. Будет еще удобнее.
Линтер
Линтер у обоих — luacheckrc. Влад также поделился своим сетапом.
.luacheckrc
std = "tarantool" codes = true max_line_length = 200 files = { "switchover/", "switchover.lua" } exclude_files = { "api/", ".rocks", "test", "tools", "switchover/_net_url.lua", "tmp", "lua_modules", ".luarocks", "switchover/*_test.lua", }
files["switchover/top.lua"] = { max_line_length = 300, ignore = {"211"}, }
Code coverage
Дефолтный .luacov, который дает мне code coverage.
exclude = {
"test/",
".rocks/",
"builtin/",
}
runreport = false
deletestats = false
Плюс вместе с этим интеграция с COVERALLS, дефолтным в разработческой среде, который меряет и рисует красивые графики по Сoverage.
coverage-report:
docker run -e CI_BUILD_REF_NAME=$$CI_BUILD_REF_NAME -e CI_COMMIT_SHA=$$CI_COMMIT_SHA \
-e COVERALLS_TOKEN=$$COVERALLS_TOKEN \
--rm --name switchover -v $$(pwd):/source $$SWITCHOVER_TEST_IMAGE_TAG \
/bin/sh -c 'git checkout -B "$$CI_BUILD_REF_NAME" "$$CI_COMMIT_SHA" && luacov-console /source && luacov-console -s && luacov-coveralls -v -t $$COVERALLS_TOKEN'
Полнее можно посмотреть в репозитории: Makefile · master · Vladislav Grubov / switchover · GitLab
Локальная разработка
Саша: «Использую Docker».
Влад: «Аналогично, вот типичный пример моего Tarantool».
FROM tarantool/tarantool:2.10
RUN apk add --no-cache -u curl wget zip git make cmake gcc musl-dev
WORKDIR /root
RUN tarantoolctl rocks install luatest
RUN tarantoolctl rocks install luacheck
RUN tarantoolctl rocks install luacov
RUN tarantoolctl rocks install luacov-console
RUN tarantoolctl rocks install luacov-multiple
RUN tarantoolctl rocks install luacov-coveralls
LABEL AUTHOR Vladislav Grubov vladgrubov@gmail.com
ARG VERSION=1.0.0
RUN mkdir /source && mkdir /etc/switchover
WORKDIR /source
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod a+x /docker-entrypoint.sh
ENV LUA_PATH="/source/?.lua;/source/?/init.lua;/usr/local/share/tarantool/?.lua;/root/.rocks/share/tarantool/?.lua"
ENTRYPOINT ["/docker-entrypoint.sh"]
HEALTHCHECK NONE
CMD []
«Healthcheck я отрубаю в отдельных случаях, чтобы пайплайн не ругался на тесты».
Управление кодом и удобство
Саша: «Я активно использую GitLens — это плагин для VSCode, удобный для того, чтобы быстро понять, что происходит в гите, не зарываясь и не тратя время: сравнить разные версии файлов, пробежаться по коммитам и т. д. GitGraph использую для переключения между разными ветками репы. Indent Rainbow подсвечивает отступы. OpenAPI — подсветка для Swagger».
Спасибо Владу и Саше за то, что поделились опытом.
В следующей части мы расскажем о том, что еще есть полезного в экосистеме Tarantool для разработчика, о либах, и попробуем узнать, чем еще пользуются наши разработчики.
Остались вопросы?
Расскажите о ваших задачах и узнайте больше
о реализации на платформе Tarantool
Читайте также

Как правильно приготовить «данные»? Тренды разработки 2023

Масштабирование без потери производительности
