Я написал данный пост, так как чувствую, что Микрофронтенды это стало не просто модное слово, они уже начали распространятся на большие проекты.

Микрофронтенды могут быть следующей важной вехой в фронтенд разработке.

Давайте я вам расскажу почему!

Что такое микрофронтенды?

Микрофронтенды – это определенная структура архитектуры кода для фронтенд приложений. Все это берет начало из микросервисов на бэкенде.

Для понимания микрофронтендов и почему они нам нужны, в первую очередь нам необходимо узнать немного о них.

Микросервисная архитектура — вариант сервис-ориентированной архитектуры программного обеспечения, направленный на взаимодействие насколько это возможно небольших, слабо связанных и легко изменяемых модулей — микросервисов, получивший распространение в середине 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)


  1. MentalBlood
    14.04.2022 22:31

    "Микросервисная архитектура" звучит как "кирпичная архитектура"


    1. Doberman2029 Автор
      14.04.2022 22:58

      Это цитата, привёл все как есть. Да и "кирпичная архитектура", как по мне, тоже имеет место быть. А вы как бы назвали?


      1. MentalBlood
        14.04.2022 23:02

        Стиль, парадигма


  1. Aquahawk
    14.04.2022 23:04
    +5

    Именно для этого хренову тучу лет назад был придуман iframe


  1. DrPass
    15.04.2022 01:28
    +9

    Для примера, если бы у нас был интернет-магазин с микросервисами на бэкенде, в котором за каждый сервис отвечала отдельная команда, то мы могли бы иметь следующие микросервисы:
    Товары
    Категории товаров
    Отчеты
    Клиенты
    Заказы

    Это скорее контрпример. Если у вас интернет-магазин, вам не надо разделять такие тесно связанные между собой сущности, как товары, категории товаров, заказы и иже с ними между разными командами. Они должны разрабатываться в тесном контакте разработчиков, и единообразно.


  1. chuikoffru
    15.04.2022 21:27
    +1

    Спасибо за перечень минусов в конце. Особенно последние два понравились. Усложняется то, усложняется другое. Зато упрощается переписывание и поддержка. В общем то вы правы, каждый для себя должен решать, подходит это или нет.