Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Программист должен автоматизировать свою работу в первую очередь,
а то получится как сапожник без сапог.
Все этапы работы можно частично автоматизировать.
Рассмотрим основные, характерные этапы создания сервисов:
Проектирование базы данных
это творческая работа, которую никак не автоматизируешь. После создания, базу данных надо нарисовать в виде графической схемы. Есть много разных приложения для автоматического создания ERD-diagram, однако они все отображают стрелки связей только до таблицы, а не до нужной колонки, и не имеют возможности редактировать и обновлять отредактированную схему - поэтому пришлось создать своё приложение image_database.
Создание логгера необходимо в первую очередь т.к. оно будет использоваться во всех модулях сервиса. У нас логгер LOKI(grafana), который берёт текст логов из консоли, сохраняет к себе, и имеет интерфейс просмотра. Такой логгер прост для программиста т.к. выводить текст логов надо просто в консоль вывода, и не надо думать о том как его сохранять, просматривать и др. Мой логгер логгер использует известный logrus, имеет улучшения:
единый логгер для всех модулей (не надо думать где его хранить)
единое форматирование, добавляющее к логу: дату, время, миллисекунды, имя и номер строки исходного файла .go, имя функции, уровень (info, error и др.)
кликабельная ссылка внутри IDE Goland для перехода сразу к нужной строке кода. С такими настройками форматирования очень легко найти нужное место в коде с ошибкой и др.
Телеграм-бот с ошибками
Для своевременного обнаружения, ошибки надо автоматически находить и присылать в телеграм мессенджер, с указанием:
дата, время, текст ошибки
логин(имя) ответственного за этот микросервис
URL ссылка быстрого перехода в браузер с логами (grafana)
CRUD генератор исходного кода
У каждой таблицы базы данных должен быть свой модуль, ответственный за выполнение CRUD операций: Create + Read + Update + Delete,
а также, для выполнения этих операций по сети по протоколам GRPC или NRPC.
Для множества таблиц в базе данных такой код писать долго - поэтому нужен кодогенератор исходного кода.
Мой кодогенератор создаёт готовый микросервис на языке golang, который можно сразу запустить, создаётся код для каждой таблицы в базе данных, в том числе юнит-тесты.Подключение к внешним сервисам
Обычно используется много внешних сервисов типа Postgres SQL, Kafka, NATS, CAMUNDA и др.,
к которым надо:
загрузить настройки подключения из файла или переменных окружения
подключиться
отключиться
graceful shutdown (правильное отключение)
Чтобы не писать много кода каждый раз для выполнения этих операций, я создал свою библиотеку starter, которая легко делает все эти операции одной строчкой кода, в том числе операции указанные выше.
Пример:
postgres_gorm.StartDB()
nats.StartNats()
camunda.StartCamunda()
Документация
Хорошую документацию автоматически не сделаешь, но кое-что можно:
автоматически нарисовать граф зависимостей модулей языка golang, с отображением директорий с утилитой image_packages
автоматически нарисовать граф подключений к внешним сервисам с утилитой image_connections
Подробнее в предыдущей статье статье.
Желаю всем облегчить себе работу с помощью автоматизации.