Как стать автором
Обновить

Переходите на микрофронтовую архитектуру

Время на прочтение 9 мин
Количество просмотров 17K

Содержание статьи

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

  2. Проблема монолитного приложения

  3. На что стоит обращать внимание при выборе архитектуры?

  4. Примеры архитектурных решений

  5. В каких ситуациях стоит использовать Module Federation?

  6. Проблемы

  7. Полезные ссылки

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

Микрофронтенд-архитектура - это подход к созданию приложений, в котором каждая часть приложения, отвечающая за определенную функциональность, представлена отдельным фронтенд-приложением. Такой подход позволяет достичь более высокой гибкости и масштабируемости приложения, так как каждый микрофронтенд может быть разработан и развернут независимо от остальных.

Как правило, микрофронтенды используются в комбинации с микросервисной архитектурой, в которой приложение состоит из набора независимых микросервисов, каждый из которых выполняет свою функцию. Микрофронтенды позволяют разработчикам разрабатывать интерфейсы для каждого микросервиса отдельно и объединять их в единое приложение, что облегчает поддержку, масштабирование и развертывание приложения.

Одним из ключевых преимуществ микрофронтендов является возможность быстрой разработки и доставки изменений пользовательского интерфейса без необходимости изменения всего приложения. Кроме того, микрофронтенды могут помочь упростить процесс разработки, улучшить переиспользуемость кода и уменьшить зависимость между различными частями фронтенд-приложения.

Полезная ссылка с подробным объяснением концепции микрофронтенда.

Проблема монолитного приложения

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

Одной из главных проблем монолитных приложений является их сложность. Разработка, тестирование и внесение изменений в такое приложение может быть трудной задачей, особенно когда разные разработчики работают над разными частями приложения. Изменения в одной части приложения могут приводить к неожиданным эффектам в других частях, что может затруднять поиск и устранение ошибок.

Кроме того, монолитное приложение может быть сложно масштабировать. При увеличении нагрузки на приложение может потребоваться увеличение мощности серверов, что может быть дорого и неэффективно. При масштабировании монолитного приложения обычно требуется масштабировать всю систему, а не только отдельные ее компоненты.

Еще одной проблемой монолитных приложений является зависимость от конкретных технологий и стеков технологий. Если приложение написано на одном языке программирования или с использованием определенного фреймворка, то это может затруднять переход на другие технологии или стеки технологий.

Чтобы решить эти проблемы, многие разработчики переходят на микросервисную архитектуру, где приложение разбито на небольшие независимые сервисы, каждый из которых выполняет свою функцию. Это позволяет легко масштабировать отдельные компоненты приложения и упрощает разработку и тестирование каждого компонента. Кроме того, микросервисы могут быть написаны с использованием разных технологий и стеков технологий, что обеспечивает гибкость и упрощает переход на другие технологии в будущем.

На что стоит обращать внимание при выборе архитектуры?

Выбор конкретного варианта реализации микрофронтенд-архитектуры зависит от многих факторов, включая размер и сложность проекта, технологические требования, уровень опыта команды разработчиков и другие факторы. Нет одного "лучшего" варианта реализации - каждый инструмент имеет свои сильные и слабые стороны, и выбор инструмента зависит от конкретных потребностей проекта.

Вот несколько факторов, которые могут повлиять на выбор инструмента для реализации микрофронтенд-архитектуры:

  1. Границы между микрофронтендами. Определение границ между микрофронтендами - это один из самых важных этапов проектирования архитектуры микрофронтенда. Необходимо определить, какие компоненты приложения будут вынесены в отдельные микрофронтенды, а какие будут оставлены в основном приложении. Необходимо найти баланс между слишком маленькими и слишком большими микрофронтендами.

  2. Коммуникация между микрофронтендами. Каким образом микрофронтенды будут общаться между собой - это тоже важный вопрос. Необходимо определить, какие протоколы будут использоваться для коммуникации, какая будет структура сообщений и как они будут обрабатываться.

  3. Архитектурный паттерн. Существует несколько архитектурных паттернов для микрофронтенда, например, паттерн модульной федерации и паттерн comand bus. Каждый из них имеет свои достоинства и недостатки, поэтому необходимо выбрать паттерн, который лучше всего подходит для вашего приложения.

  4. Инструменты и технологии. Для реализации микрофронтенда требуются специальные инструменты и технологии, такие как библиотеки для динамической загрузки модулей, системы управления состоянием и т.д. Необходимо выбрать технологии, которые наилучшим образом соответствуют вашим потребностям.

  5. Тестирование и развертывание. Микрофронтенды требуют отдельного тестирования и развертывания, что может потребовать дополнительных усилий и инструментов. Необходимо обратить внимание на тестирование и развертывание микрофронтендов, чтобы избежать проблем в процессе эксплуатации.

  6. Совместимость и безопасность. При выборе архитектуры микрофронтенда необходимо обратить внимание на совместимость и безопасность системы.

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

  8. Управление состоянием. Управление состоянием - это одна из важных частей архитектуры микрофронтенда. Необходимо определить, как состояние будет управляться между различными микрофронтендами и какие инструменты будут использоваться для управления состоянием.

  9. Удобство разработки. Необходимо обратить внимание на удобство разработки микрофронтенда. Разработка микрофронтенда должна быть удобной и интуитивно понятной для разработчиков, чтобы облегчить разработку и поддержку приложения в будущем.

  10. Надежность и отказоустойчивость. Наконец, при выборе архитектуры микрофронтенда необходимо обратить внимание на надежность и отказоустойчивость системы.

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

Примеры архитектурных решений

1. Webpack Module Federation

Webpack Module Federation - это инструмент, который позволяет создавать микрофронтенды с использованием Webpack. Он позволяет создавать отдельные фронтенд-приложения и объединять их вместе в одно приложение на стороне клиента. Например, вы можете создать отдельный микрофронтенд для каждой страницы своего приложения и объединить их вместе, чтобы получить полноценное приложение.

Пример кода для создания микрофронтенда с использованием Webpack Module Federation:

// webpack.config.js

const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  // ...
  plugins: [
    new ModuleFederationPlugin({
      name: 'my_microfrontend',
      library: { type: 'var', name: 'my_microfrontend' },
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/Button',
      },
    }),
  ],
};
// Button.js

const Button = ({ text, onClick }) => {
  return (
    <button onClick={onClick}>
      {text}
    </button>
  );
};

export default Button;

Достаточно подробно про Module Federation я рассказал в своей статье.

2. Single-SPA

Single-SPA - это инструмент для создания микрофронтендов с использованием JavaScript-фреймворков (например, React, Vue, Angular). Он позволяет создавать отдельные фронтенд-приложения и объединять их вместе в одно приложение на стороне клиента, используя маршрутизацию.

Пример кода для создания микрофронтенда с использованием Single-SPA:

// src/Button.js

import React from 'react';

const Button = ({ text, onClick }) => {
  return (
    <button onClick={onClick}>
      {text}
    </button>
  );
};

export default Button;
// src/ButtonApp.js

import React from 'react';
import ReactDOM from 'react-dom';
import singleSpaReact from 'single-spa-react';
import Button from './Button';

const ButtonApp = () => {
  return (
    <Button text="Click me" onClick={() => alert('Button clicked!')} />
  );
};

const ButtonAppWrapper = singleSpaReact({
  React,
  ReactDOM,
  rootComponent: ButtonApp,
});

export { ButtonAppWrapper };

Полезная ссылка на документацию по single-spa

3. Podium

Podium - это инструмент для создания микрофронтендов с использованием JavaScript-фреймворков (например, React, Vue, Angular). Он позволяет создавать отдельные фронтенд-приложения и объединять их вместе в одно приложение на стороне сервера, используя шаблоны.

Пример кода для создания микрофронтенда с использованием Podium:

// src/Button.js

import React from 'react';

const Button = ({ text, onClick }) => {
  return (
    <button onClick={onClick}>
      {text}
    </button>
  );
};

export default Button;
// src/ButtonApp.js

import Podium from '@podium/client';
import Button from './Button';

const podium = new Podium();

const ButtonApp = {
  name: 'button_app',
  assets: {
    js: ['http://localhost:3000/remoteEntry.js'],
  },
  template: ({ render }) => {
    const content = render('button', { text: 'Click me' });
    return `
      <html>
        <head>
          <title>Button App</title>
        </head>
        <body>
          ${content}
        </body>
      </html>
    `;
  },
};

podium.register(ButtonApp);

podium.mount('button', ({ text }) => {
  return <Button text={text} onClick={() => alert('Button clicked!')} />;
});

export default ButtonApp;

Полезная ссылка на документацию Podium

4. Open Components

Open Components - это инструмент для создания микрофронтендов с использованием любых технологий, включая HTML, CSS, JavaScript и Web Components. Он позволяет создавать отдельные фронтенд-приложения и объединять их вместе в одно приложение на стороне сервера, используя шаблоны.

Пример кода для создания микрофронтенда с использованием Open Components:

<!-- src/Button.html -->

<button>{{text}}</button>
// src/ButtonApp.js

import OpenComponents from 'oc-client';
import Button from './Button.html';

const oc = new OpenComponents();

const ButtonApp = oc.create('button_app', ({ props }) => {
  return Button(props);
});

oc.register(ButtonApp);

export default ButtonApp;

Полезная ссылка на документацию Open Components

Это не все возможные варианты реализации микрофронтенд-архитектуры, и существует множество других инструментов и подходов к ее реализации. Важно выбрать подходящий инструмент для вашего проекта и убедиться, что вы правильно настроили свою архитектуру, чтобы добиться максимальной гибкости и масштабируемости.

В каких ситуациях стоит использовать Module Federation

Давайте рассмотрим несколько причин, при которых Module Federation:

  1. Многомодульные приложения. Если у вас есть крупное многомодульное приложение, то MF может помочь вам разделить код между разными модулями и упростить поддержку и разработку приложения.

  2. Распределенная разработка. Если ваша команда разработки распределена по разным местам, MF может помочь вам снизить связность между разными микросервисами и упростить их интеграцию.

  3. Переиспользование кода. MF может помочь вам переиспользовать код и функциональность между разными приложениями и микросервисами, что может сократить время разработки и улучшить качество кода.

  4. Гибкость и масштабируемость. MF может помочь вам создать более гибкую и масштабируемую архитектуру, позволяя вам быстро добавлять и удалять приложения и микросервисы, не нарушая целостность системы.

  5. Ускорение разработки. Модульная федерация может помочь вам ускорить разработку, позволяя разным командам работать независимо друг от друга и интегрировать свой код с помощью модульной федерации.

Конечно, использование модульной федерации имеет свои недостатки и требует определенного уровня сложности и опыта в разработке, поэтому выбор технологии должен зависеть от конкретных потребностей проекта. Однако, если ваш проект удовлетворяет перечисленные выше критерии, то MF может быть хорошим выбором для вашего проекта.

Как было сказано ранее, для понимания нужно ли вам использовать Module Federation, а также, чтобы понять, как использовать эту технологию в производственной среде, вы можете обратиться к статье по данной теме.

Проблемы

У микрофронтендов есть некоторые проблемы, которые могут возникать при их использовании:

  1. Сложность интеграции: при использовании микрофронтендов необходимо реализовать механизмы для интеграции различных частей приложения в единую систему. Это может привести к сложностям при интеграции существующих и новых компонентов.

  2. Управление состоянием: при использовании микрофронтендов возникает необходимость в управлении состоянием между различными компонентами приложения. Это может привести к сложностям в отслеживании состояния и синхронизации данных между различными компонентами.

  3. Сложность тестирования: при использовании микрофронтендов возникает необходимость в тестировании отдельных компонентов и их интеграции. Это может привести к сложностям в настройке окружения тестирования и в написании тестов для различных компонентов.

  4. Сложность развертывания: при использовании микрофронтендов необходимо развертывать каждый компонент отдельно, что может привести к сложностям в управлении развертыванием и мониторингом состояния каждого компонента.

  5. Увеличение сложности кода: при использовании микрофронтендов возможно увеличение сложности кода приложения из-за необходимости реализации механизмов интеграции и управления состоянием.

Несмотря на все эти потенциальные проблемы, плюсы, которые есть у микрофронтовой архитектуры, перевешивают все недостатки.

Полезные ссылки

Теги:
Хабы:
+2
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн