Я знаю многое о велосипедах в Enterprise-разработке. Видел издали, катался на них, собирал сам, но наступают моменты, когда типичные задачи пора перевести на типичные решения. В статье расскажу о 4 self-hosted сервисах, которые освобождают уйму времени на действительно важные вещи.
Мы в "Искусство Автоматизации" занимаемся заказной разработкой MVP (мобильных приложений, веб-сервисов, чат-ботов) со средним сроком цикла разработки 2 месяца. Это срок, в который нужно уже запустить готовое решение для новых пользователей. Об общих подходах к стабильной разработке ИТ-продуктов рассказал в предыдущей статье, а в этой статье расскажу про инструменты.
За 4 года ведения ИТ-продакшена ярко выделись следующие однотипные запросы к проекту:
• показывать метрики, что происходит с проектом;
• мониторить доступность сервисов;
• шарить статичные файлы (отчеты, сборки);
• интегрироваться с соседними сервисами.
Итак, переходим к самим сервисам.
Metabase
Данные интересны всем. Почти все сервисы сохраняют / агрегируют сведения о нас. Наши проекты тоже не исключение. Типичные запросы на старте разработки: сколько пользователей сейчас в проекте (новых / активных), сколько сделано заказов, какие ресурсы проекта самые посещаемые etc.
Выбора становится два: либо пилить что-то кастомное, либо предоставить клиенту пульс-дашборд на готовом решении.
Вот уже два года в каждом нашем проекте мы используем BI-утилиту Metabase.
Вкратце о возможностях продукта:
• подключение к почти любым источникам данных (SQL/noSQL);
• уровень входа в продукт крайне низкий; собрать дашборд может менеджер, без привлечения программистов;
• шеринг дашбордов и показателей по ссылке, встраиваемые фреймы.
Килл-фича, о которой мало кто говорит. Metabase можно использовать как API для доступа к вашей БД. Больше не нужно писать контроллеры, поднимаем Metabase, открываем консоль хрома, копируем запросы к бэкенду и используем их в своих проектах. И это все, не написав ни строчки кода.
Из минусов Metabase:
• довольно прожорлив к серверным мощностям (Java все-таки);
• скудноватая коллекция готовых виджетов
Uptime Kuma
Про мониторинг проекта можно и не рассказывать. Важно знать о падении сервисов до того момента, пока об этом сообщит заказчик или конечный клиент. На рынке много инструментов, которые закрывают эту потребность. Мы долгое время пользовали Zabbix, но для нас он оказался тяжеловесным. Сейчас используем Uptime Kuma для:
• мониторинга доступности сервисов;
• срока действия SSL-сертификатов;
• получаем уведомления в Telegram.
Из минусов, не хватает мониторинга параметров сервера (место на диске, нагрузка). Одной из частых причин недоступности проекта может быть банально закончившееся место на диске. Надеемся, в Uptime Kuma добавится агент, который можно будет поставить на сервер.
NextCloud
В эпоху облачных хранилищ вопрос обмена файлами вроде бы решился. Но по тем или иным причинам не всем подходит размещение файлов на сторонних серверах. Причиной тому могут быть и требования по конфиденциальности данных и тарифная политика облачных сервисов. Мы на своих проектах, если нужно организовать доступ к файлам используем продукт NextCloud. Сервис запускается на сервер и вот у вас есть свой персональный Dropbox.
Из плюсов:
• шеринг файлов по ссылке;
• гибкая настройка прав доступа;
• приятный интерфейс.
Из минусов, обнаружили, что при большом количестве файлов в директории (больше 1000), интерфейс подлагивает. Видимо, не завезли lazy-load для списка объектов.
Apache NiFi
На самом деле, это не сервис, а какая-то вакцина от велосипедизма. Представим ситуацию, нужно получить объект из шины данных, выбрать нужные поля, сохранить объект в БД и отправить событие в систему нотификаций по HTTP. Уже руки чешутся написать пару классов на Java и еще пару классов для интеграционных тестов? Не спешите, вопросов много, ответ один - Apache NiFi.
По сути, это ETL-комбайн по построению data-pipelines. Из коробки 100+ коннекторов ко всем популярным источникам данных (шины, базы, HTTP etc). А если вдруг не найдется нужный, можно написать свой.
С внедрением Apache NiFi, мы значительно сократили количество интеграционного кода, а значит сократили вероятность ошибок.
Продукт хорошо согласуется с набирающим популярность NoCode трендом. Получается такой аналог Zapier, только у вас на сервере под полным контролем.
Резюме
Используя готовые self-hosted сервисы можно серьезно прокачать свой проект и добавить новую функциональность, не написав лишний код, который, конечно, будет требовать в будущем ресурсы на свою поддержку.
А какие сервисы используете вы при создании своих ИТ-продуктов?