Рабочее место разработчика с Tarantool: часть 1

8 июня 2023 г.
белоцерковский_cr.png
Александр Белоцерковский
Автор статьи
21.jpg

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'

Локальная разработка

Саша: «Использую 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, DevOps
Ссылка скопирована
Поделиться

Почитать по теме

8.jpg
11 марта

Горячие и холодные данные в БД: что это и как снизить стоимость хранения

28.jpg
24 февраля

Реляционные vs нереляционные БД: как сделать правильный выбор

21.jpg
24 февраля

Как применять архитектуру HTAP в бизнесе и задачах real-time аналитики