Архитектура BFF  —  бэкенд для фронтенда

BFF  —  бэкенд для фронтенда

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

Что такое «бэкенд для фронтенда»?

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

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

  • объединяются или оркестрируются вызовы к различным сервисам;
  • подготавливаются данные в удобном для клиента формате;
  • обрабатывается конкретная, связанная к фронтендом логика.

Этим обеспечивается разделение обязанностей, упрощается оптимизация каждого бэкенда для конкретного клиентского сценария.

Принцип работы BFF

1.Клиентские запросы: клиентом  —  мобильным, веб-приложением и т. д.  —  отправляется запрос в соответствующий BFF.

2. Уровень BFF: здесь объединяются данные из микросервисов, выполняются любые преобразования или оптимизации и выдается специализированный ответ.

3. Микросервисы: BFF взаимодействует с базовыми сервисами, например пользователей, заказов и т. д.

Традиционные архитектуры против BFF

Традиционная против BFF

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

  • Адаптированных моделей данных различных клиентских приложений.
  • Специализированных оптимизаций производительности для мобильных сетей помедленнее.
  • Управления сложной оркестрацией сервисов для конкретных фронтендов.

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

Почему BFF  —  суперзвезда современной архитектуры

  • Адаптированное пользовательское взаимодействие: каждым фронтендом  —  будь то мобильное приложение, настольное или переносное устройство  —  получаются ровно те данные, которые ему нужны. Ничего лишнего, все равно что иметь костюм идеального размера на любой случай.
  • Меньше сложность: в BFF все упрощается настройкой каждого бэкенда, обеспечением плавного взаимодействия в платформах.
  • Выше производительность: BFF  —  это ускорители приложения. Сокращением ненужных API-вызовов ими ускоряются ответы, что положительно сказывается на удовлетворенности пользователей.
  • Быстрее разработка: занимаясь разными BFF для каждого фронтенда, команды движутся быстрее, не мешая друг другу. Это как если бы на кухне было несколько поваров, каждый из которых готовил собственное блюдо.
  • Выше безопасность: в BFF контролируется все взаимодействие с бэкендом, применяются строгие меры безопасности: проверка токенов и ввода, ограничение скорости. Поэтому система безопаснее.

Когда использовать BFF?

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

Оркестрация микросервисов: в микросервисной архитектуре данные извлекаются клиентами из нескольких сервисов, например пользователей, заказов, инвентаризации. BFF  —  это оркестратор, необходимые данные собираются им из различных сервисов и представляются клиенту как единый ответ.

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

Сложности и нюансы: здесь не все так просто

У BFF много преимуществ, но имеются и сложности:

1.Повышаются накладные расходы на сопровождение: необходимость сопровождения стольких бэкендов  —  по одному на каждый фронтенд  —  чревата увеличением сложности. А это дополнительные меры по отслеживанию, масштабированию и безопасности.

2. Проблемы с согласованностью: необходима тщательная проработка, иначе наличие отдельных бэкендов чревато несогласованностью данных, возвращаемых разными клиентами.

3. Узкие места производительности: уровень BFF становится ограничителем производительности, если не оптимизирован для обработки многочисленных запросов или если на нем выполняются интенсивные вычисления.

Рекомендации по реализации

При реализации архитектуры BFF рекомендуется:

1.Ограничить бизнес-логику: BFF фокусируется на оркестрации и форматировании данных для фронтенда, а не на реализации сложной бизнес-логики.

2. Использовать кеширование: для повышения производительности, особенно мобильных клиентов, на уровне BFF кешируются типичные ответы.

3. Обработка ошибок: чтобы предотвратить проблемы на клиенте, в BFF централизуются обработка ошибок и логирование.

4. Безопасность: для защиты бэкенд-сервисов обеспечивается безопасность BFF: на уровне BFF применяются аутентификация, авторизация, ограничение скорости.

Реальные истории успеха BFF

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

BFF  —  секрет безупречного пользовательского взаимодействия

Бэкенд для фронтенда  —  это революционная архитектура. С ее помощью разработчики предоставляют каждому пользовательскому интерфейсу ровно то, что нужно  —  ни больше ни меньше. Хотя управление несколькими BFF чревато добавлением сложности, это с лихвой окупается увеличением производительности и гибкости.

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Rohit S: Backend for Frontend (BFF) Architecture