Я написал данный пост, так как чувствую, что Микрофронтенды это стало не просто модное слово, они уже начали распространятся на большие проекты.
Микрофронтенды могут быть следующей важной вехой в фронтенд разработке.
Давайте я вам расскажу почему!
Что такое микрофронтенды?
Микрофронтенды – это определенная структура архитектуры кода для фронтенд приложений. Все это берет начало из микросервисов на бэкенде.
Для понимания микрофронтендов и почему они нам нужны, в первую очередь нам необходимо узнать немного о них.
Микросервисная архитектура — вариант сервис-ориентированной архитектуры программного обеспечения, направленный на взаимодействие насколько это возможно небольших, слабо связанных и легко изменяемых модулей — микросервисов, получивший распространение в середине 2010-х годов в связи с развитием практик гибкой разработки и DevOps. (Википедия)
Для примера, если бы у нас был интернет-магазин с микросервисами на бэкенде, в котором за каждый сервис отвечала отдельная команда, то мы могли бы иметь следующие микросервисы:
Товары
Категории товаров
Отчеты
Клиенты
Заказы
Примечание: это упрощенный пример микросервисной архитектуры. В настоящем приложении мы могли бы иметь десятки, а то и сотни микросервисов.
В мире фронтенда, для такого типа приложения, мы могли бы разделить всё так:
Давайте отметим несколько вещей:
Каждый микрофронтенд может быть построен с использованием различных технологий.
За каждый микрофронтенд может отвечать отдельная команда.
Каждый микрофронтенд может отвечать за один микросервис.
Почему стоит выбрать микрофронтенды?
Какие преимущества это может дать? На самом деле довольно много.
Помните те времена, когда вы устраиваетесь на работу, в которой разрабатывают уже старый проект, и фронт построен на XSLT и jQuery? Переписание проекта с нуля даже не рассматривается, и вам приходится использовать эти старые технологии для добавления нового функционала и исправления багов.
Если даже у вас вышло переубедить боссов начать переписывать проект, и у вас через 1-3 года появляется полностью переписанный проект. То, что мешает, через те же 10 лет, новым технологиям стать аналогом XSLT и jQuery, и морально устареть?
Микрофронтенды дают нам:
Маленькую, более поддерживаемую кодовую базу.
Отдельный микрофронтенд может быть написан с выбором технологий на любой вкус – что также позволяет убрать лишние зависимости.
За микрофронтенд может отвечать отдельная команда – позволяет убрать взаимодействие между командами, что ведет к более быстрой разработке.
Мы можем обновить, переписать или удалить микрофронтенд когда мы посчитаем нужным.
Со стороны бизнеса, правда, нужно будет взять некоторую дополнительную ответственность. Нужно будет постоянно заменять старые микро-(сервисы/фронтенды) на новые. Что позволяет постоянно улучшать свою кодовую базу.
Пример:
Мы можем удалить старый framework.X.js микрофронтенд и полностью заменить его новым framewok.Y.js. Это уменьшает необходимость переписывания, при необходимости, всего приложения с нуля.
Различные подходы
Есть несколько разных подходов в построении микрофронтендов.
Подход 1 – Один микрофронтенд на каждый микросервис
Этот вариант удобен, когда архитектура микросервисов решает отдельный проблемы. К примеру, у нас есть микросервис, который отвечает за работу с добавлением товара в корзину. И тогда мы создаем микрофронтенд, который реализует такой же функционал.
Преимущество здесь в том, что каждому микрофронтенду нужно знать всего лишь о одном бэкенд API.
Подход 2 – Компоненты
В данное время многие UI фреймворки добавляют поддержку компонентов (Svelte очень хорош в этом).
Мы можем иметь старый UI и постоянно менять старый код на компоненты. Каждый новый компонент может быть микрофронтендом написанном на Svelte, Vue, vanilla JS, или чем-либо другом на ваш выбор.
Код каждого компонента может находится на разных серверах, так что деплой может происходить без затрагивания всей системы.
Подход 3 – использование специальных инструментов для микрофронтенда
Вы можете использовать такой инструмент, как single-spa, для подключения различных микрофронтендов.
Данное решение хорошо подходит для построений новых микрофронтенд-приложений. Если вы решили использовать single-spa, то не забудьте посмотреть их документацию, а также изучить рекомендации.
Подход 4 - Module Federation
Это особенность Webpack 5, вот некоторые подробности:
Несколько отдельных сборок должны составлять единое приложение. Эти отдельные сборки не должны иметь зависимостей друг от друга, поэтому их можно разрабатывать и развертывать по отдельности. (webpack)
Есть прекрасный пост, который объясняет это.
Примечание: вы всегда можете совмещать данные подходы для достижения той архитектуры, которая вам нужна.
Нужны ли мне микрофронтенды?
Микрофронтенды точно не нужно использовать в каждой ситуации.
Микро-(фронтенды/сервисы) решают проблемы с переписыванием и расширением программного обеспечения. Также важная особенность это независимый деплой приложений.
Все зависит от того, насколько большая у вашей компании команда разработчиков. Намного легче разрабатывать, когда не все разработчики работают с одной кодовой базой, и постоянно наступают друг другу на пятки. А вместо этого, разбиты на команды, каждая из которых работает над своей группой микро-(фронтендов/сервисов).
Проблемы с микрофронтендами
Конечно, ничего не может существовать без отрицательных сторон, давайте взглянем на эти стороны у микрофронтедов:
Тяжелое тестирование всей кодовой базы локально, когда у вас много микро-(фронтендов/сервисов).
В первую очередь должен быть разработан точный интерфейс.
Больше кода для поддержки, обновлений, а также устранений проблем безопасности.
Затраты производительности ложатся на конечного пользователя. Так как приходится скачивать каждый микрофронтенд отдельно.
Взаимодействие между микрофронтендами может быть довольно сложным.
Также инфраструктура и деплой станут более сложными.
Заключение
Надеюсь, что данный пост позволил Вам понять микрофронтены лучше. Спасибо за прочтение!
Комментарии (6)
DrPass
15.04.2022 01:28+9Для примера, если бы у нас был интернет-магазин с микросервисами на бэкенде, в котором за каждый сервис отвечала отдельная команда, то мы могли бы иметь следующие микросервисы:
Товары
Категории товаров
Отчеты
Клиенты
Заказы
Это скорее контрпример. Если у вас интернет-магазин, вам не надо разделять такие тесно связанные между собой сущности, как товары, категории товаров, заказы и иже с ними между разными командами. Они должны разрабатываться в тесном контакте разработчиков, и единообразно.
chuikoffru
15.04.2022 21:27+1Спасибо за перечень минусов в конце. Особенно последние два понравились. Усложняется то, усложняется другое. Зато упрощается переписывание и поддержка. В общем то вы правы, каждый для себя должен решать, подходит это или нет.
MentalBlood
"Микросервисная архитектура" звучит как "кирпичная архитектура"
Doberman2029 Автор
Это цитата, привёл все как есть. Да и "кирпичная архитектура", как по мне, тоже имеет место быть. А вы как бы назвали?
MentalBlood
Стиль, парадигма