Pattern

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

TimeIcon

10 мин.

EyeIcon

15

scroll iconScroll

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/ТТ, так и самих разрабатываемых приложений.

t1.jpg

На данный момент TT CLI имеет базовый набор команд по управлению и взаимодействию с инстансами приложений.

Любопытным сценарием является интеграция в TT пользовательских модулей: если вы разрабатываете что-то полезное, то можете положить это как модуль к ТТ и дальше обращаться уже не к своему модулю напрямую, а через TT (интегрируется в том числе и help).

t2.jpg

А еще недавно 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 для разработчика, о либах, и попробуем узнать, чем еще пользуются наши разработчики.

Читайте также

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

Данные стали новой нефтью. Сегодня любой бизнес-процесс, любую сущность можно свести к набору данных о нем и соответствующим образом выстроить свою систему для работы с этими объектами. Однако для того, чтобы извлечь из этой нефти пользу, нужны программные системы, которые не просто умеют ее качать, но обрабатывать, хранить и делать это быстро, безопасно и отказоустойчиво.
ArrayIcon

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

Масштабирование — одна из самых важных характеристик надежности программного обеспечения. Если ваши сервисы не смогут отреагировать на рост нагрузки, это негативно повлияет на пользовательский опыт и, как следствие, приведет к потерям для бизнеса. Определить, как правильно масштабировать ПО, практически невозможно, так как нужно сразу учесть множество факторов и возможных проблем. Это бесконечный процесс, состоящий из компромиссов, соблюдения требований и постоянной модернизации компонентов системы.
ArrayIcon

Middleware для IoT и цифровых двойников

Цифровые двойники позволяют создавать точные копии физических объектов или процессов в цифровом пространстве. Этот термин известен еще с 2002 года и подразумевает создание цифровых двойников реальных объектов в виртуальном мире для оптимизации производственных процессов — например, определения оптимального расположения оборудования на заводе или оптимизации логистики.
ArrayIcon