Сегодня речь пойдёт про шаблоны, которые позволяют нашим командам создавать новые микросервисы буквально за несколько минут. Рассказываем, как он устроен и почему эта история не только про автоматизацию ручного труда, но про эффективность разработки как таковой.
В том или ином виде шаблоны используют многие разработчики. Чаще всего, чтобы сэкономить время, они копируют код из старых проектов. С нашей точки зрения, у такой практики есть сразу несколько недостатков:
1. Можно выбрать неудачный микросервис для копирования - с недостающими элементами, некорректными настройками и т.д.
2. Если у разработчиков нет эталона, повышается риск дополнительных ошибок. Значит, кому-то придётся потратить лишнее время, чтобы их исправить.
3. Всегда есть риск проглядеть важные элементы, не заметить недостающий пайплайн, использовать старую версию библиотеки, указать неверные настройки авторизации или логирования.
В целом, если операция повторяется из раза в раз, она уже достойна того, чтобы ее автоматизировать. Но экономия времени – далеко не главное преимущество внедрения шаблона.
Что даёт шаблон микросервиса
Шаблон микросервиса – это кирпичик программного продукта, конструктивный элемент, который можно переиспользовать от проекта к проекту.
С его помощью вы обеспечиваете командам общую технологическую базу – все работают по одному образцу, который по умолчанию включает все элементы, которые нужны в проекте (о составе шаблона подробнее рассказываем ниже). Разработчики освобождаются и от копирования кода, и от необходимости его лишний раз проверять.
А с точки зрения бизнеса это возможность лучше распоряжаться своими ресурсами, чтобы конвейер разработки двигался быстрее и более гладко:
Использование шаблонов обеспечивает разработчикам стабильное качество с меньшими затратами ресурсов. Достаточно один раз потратить время на подбор нужных элементов - и после этого у всех разработчиков сразу будет под рукой готовый инструментарий.
Чем меньше времени уходит на лишние действия, тем меньше time-to-market. Релизы поставляются чаще, продукт развивается быстрее.
Шаблон помогает выполнять стандарты Production Ready. Это включает в себя не только архитектурные элементы, которые должны быть в каждом продукте, но и другие важные вещи вроде средств работы с метриками и Feature Flags, базовых тестов.
Возможность распространить лучший опыт сразу на все команды помогает качественно повысить уровень их работы. Вы избавляетесь от влияния «субъективных» факторов – один разработчик пишет так, другой эдак, третий недавно пришёл в компанию и пока не разобрался, какие библиотеки нужно использовать. Шаблоны убирают путаницу и упрощают ревью.
С шаблонами вы получаете возможность быстро и централизованно обновлять набор библиотек, настраивать пайплайны, накатывать политики на репозитории и т.д. Коллеги исследовали новую технологию, рассказали о ней на митапе, все оценили – и в кратчайшие сроки она быстро появляется у всех в рабочем инструментарии.
Развитие микросервисной архитектуры - чем проще создавать микросервисы, тем больше ими пользуются разработчики. У команд больше нет накладных расходов на создание скелета микросервиса, сделать один микросервис или разбить логику на пять – практически не имеет значения. Поэтому шаблон является драйвером развития настоящей микросервисной архитектуры.
Что фиксируется в шаблоне
Структура папок и базовые классы необходимые для любого микросервиса
Настройки Rest API, баз данных, авторизации, брокеров сообщений
Правильные версии базовых библиотек
Наши внутренние наработки и настройки
Библиотеки собственной разработки
Пайплайны сборки и поставки (CI/CD)
То, что называется Observability, а именно логирование, трассировка, health check monitoring
Помимо самого кода, мы стандартизуем всю экосистему для нашего будущего микросервиса: настраиваем политики работы Git репозитория, пайплайны Jenkins/Gitlab.
Как выглядит наш шаблон микросервиса для .Net
Наш базовый микросервис является расширением Microsoft Visual Studio и объединяет в себе пять компонентов:
Web API Project - бэк-сервис, который отвечает на HTTP-запросы.
Data base project – база данных микросервиса.
HTTP Service client project – позволяет вызывать методы в сервисе бэка
MassTransit consumers project – обеспечивает получение сообщений из RabbitMQ.
Job Project – применяется для выполнения каких-либо действий по расписанию.
Модули можно добавить в проект сразу все разом или по отдельности. Выбор сделан на основе простого UI, где достаточно галочками прощёлкать нужные компоненты:
Готовый шаблон помещается в маркетплейс Visual Studio или другой репозиторий, который позволит вам автоматически обновлять его содержимое.
Итоги
Мы уже опробовали практику в одном из проектов, поняли, что метод использования шаблонов удобный и масштабируемый. Эффект налицо: вместо того, чтобы по нескольку часов копировать и проверять код из старых проектов, разработчики буквально за несколько минут получают из коробки готовое к работе решение. Можно сразу переходить к делу – писать бизнес-логику, строить интеграции и т.д.
Что дальше? – Мы будем тиражировать этот опыт на другие команды. Мы хотим максимально сохранить целостность шаблона и при этом сделать его универсальным для использования в разных проектах. Мы будем создавать шаблоны для всех платформ. Так мы обеспечим себе единый уровень качества и единый набор лучших практик вне зависимости от условий в каждом конкретном случае.
gecube
cookiecutter'ом тиражируете шаблон?
Или как-то в самом MSVS плагином создаете?
Как дистрибьютите новые шаблоны?
Потому что с кукикатером — все понятно ) Тупо меняешь git репозиторий с шаблоном и новые микросервисы уже будут инстанцированы из нового шаблона
true_engineering Автор
спасибо за наводку на cookiecutter — изучим
мы используем стандартные функции Visual Studio для создания шаблонов с помощью текстовых шаблонов T4. распространение через маркетплейс утилит для Visual Studio — создаем VSIX-расширение, устанавливаем шаблон прямо в VS. у нас приватный репозиторий, при желании можно загрузить прямо в маркетплейс Microsoft — https://docs.microsoft.com/en-us/visualstudio/extensibility/walkthrough-publishing-a-visual-studio-extension?view=vs-2019