Microfrontends Federados a Gran Escala

Spanish audio is available in the player settings
Rate this content
Bookmark

La charla será una historia de cómo Personio pasó de renderizar a través de una arquitectura PHP monolítica, a una aplicación Next JS orientada a microfrontends, impulsada por la Federación de Módulos y la cadena de herramientas del monorepositorio NX.

This talk has been presented at React Summit 2023, check out the latest edition of this React Conference.

FAQ

Un micro-frontend federado es una arquitectura donde módulos parcialmente autónomos son consumidos por una aplicación central o controlador. Permite la independencia en el desarrollo y la implementación de módulos, que pueden ser consumidos en tiempo de ejecución por un host, facilitando la actualización y mantenimiento sin reconstruir toda la aplicación.

Personio comenzó con un monolito PHP Laravel y evolucionó hacia una arquitectura de micro-frontends. Inicialmente, estos micro-frontends estaban aún muy ligados al monolito para la obtención de datos. La iteración más reciente involucra micro-frontends federados, que son consumidos por un orquestador de frontend, mejorando la eficiencia y la independencia de los equipos de desarrollo.

Usar un monorepo NX facilita la generación de código y la gestión de dependencias compartidas, permitiendo que los equipos desarrollen y desplieguen aplicaciones de forma independiente dentro de un mismo repositorio. Esto mejora la coherencia y la eficiencia al centralizar la herramienta y las bibliotecas compartidas, optimizando el proceso de desarrollo.

Los micro-frontends en Personio resolvieron varios desafíos, incluyendo la independencia del equipo de desarrollo, la gestión de dependencias y el despliegue eficiente. La introducción de micro-frontends federados permitió una mejor compartición de estado y dependencias comunes, resultando en una mejora del rendimiento y la estabilidad de las aplicaciones.

El frontend orquestador actúa como un host y un enrutador para módulos federados. Su función principal es consumir módulos federados de manera eficiente y dirigir las solicitudes a los módulos apropiados. Es una parte central pero diseñada para ser ligera y eficaz, enfocándose en la renderización y la gestión de rutas sin involucrarse en la lógica de negocio.

En Personio, la gestión de versiones y dependencias en los micro-frontends se maneja mediante el uso de un único package.json en el monorepo NX, lo que asegura que todas las aplicaciones usen la misma versión de las dependencias. Esto simplifica las actualizaciones y mantiene la consistencia a lo largo de todos los micro-frontends.

Daniel Bolivar
Daniel Bolivar
31 min
02 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute la transición de un monolito PHP a una configuración de micro-frontends federados en Personio. Implementaron la orquestación y la federación utilizando Next.js como host y enrutador de módulos. El uso de módulos federados y la biblioteca de integración permitió un solo tiempo de ejecución mientras se construye y se despliega de forma independiente. La charla también destaca la importancia de los adoptantes tempranos y los desafíos de construir un sistema de código abierto interno.
Available in English: Federated Microfrontends at Scale

1. Introducción a los Micro-Frontends

Short description:

Hablemos de micro-frontends, del tipo federado. La arquitectura frontend de Personio ha pasado por tres momentos diferentes: monolito PHP, micro-frontends dependiendo del monolito y configuración de micro-frontend federado. El cambio fue necesario porque el monolito se convirtió en una bestia mítica, y la empresa creció más rápido que sus conceptos arquitectónicos. Así, Personia cambió a micro-frontends, con aplicaciones separadas en repositorios separados, activos almacenados en AWS S3, y una aplicación React independiente renderizada en los navegadores de los usuarios.

Hola, amigos, hablemos de micro-frontends, del tipo federado. Ya me presentaron, pero, ya saben, mi nombre es Daniel. He estado trabajando en cosas de frontend durante unos 10 años y actualmente trabajo como ingeniero líder en Personio. Puedes encontrarme allí en caso de que lo que diga sea interesante. Y estoy aquí hoy para contarles una pequeña historia. Es una historia sobre cambio, es una historia sobre evolución, pero es principalmente sobre cómo estamos ejecutando más de 60 micro-frontends propiedad de docenas de equipos y manteniendo nuestra cordura mientras lo hacemos, la mayoría de las veces.

Entonces, sí. La historia comienza, por supuesto, con cambio y lo que está cambiando en este caso es la frontend arquitectura de Personio, que en sus ocho años de existencia ha pasado por tres momentos diferentes. Entonces, el primero fue el monolito PHP, cosas muy simples, el monolito recibía solicitudes, manejaba solicitudes, entregaba cosas al cliente. Luego, el trabajo de Personio de micro-frontends, todavía muy dependiente del monolito para datos y como vehículo de renderización, y finalmente, lo que llamamos configuración de micro-frontend federado que es el punto principal de la charla de hoy. No te preocupes por el tamaño de los gráficos, los veremos más grandes más tarde. Y comencemos primero con, bueno, antes de eso, cuando hablamos de cambio, encuentro que lo más importante que decir sobre el cambio es por qué se necesitaba el cambio, ¿verdad? Porque eso también muchas veces informa por qué terminamos donde terminamos. Así que comienza con el primer momento, cómo Personia llegó a existir y por qué tuvimos que alejarnos de él. Como dije, la mayoría de la gente llamaría a esto legado. Yo lo llamo vintage, porque se aprecia con el tiempo, ya sabes, es una cosa que hace dinero. No me gusta la palabra legado, está muy cargada. Pero es una aplicación monolítica PHP Laravel, hace absolutamente todo, y las personas que construyeron Personia comenzaron el proyecto, se hizo popular, siguieron añadiendo características encima de él, y seguimos añadiendo características encima de él. Y ya sabes, miras atrás un par de años después, y tu proyecto, que comenzó bastante bien, de repente parece esto. Es una bestia mítica, muy poderosa, pero también muy inestable. Y eso es lo que le pasó a Personia, ya sabes, la empresa creció más rápido de lo que sus conceptos arquitectónicos podían. En el front-end específicamente, se veía así. Teníamos jQuery coexistiendo con Laravel y React, y desplegar cualquier cosa tomaba una hora y media o dos horas, si tenías suerte, así que algo tenía que cambiar.

Así que cambió a través de la distribución. Ahora, si estabas alrededor en la escena del front-end en 2019, la palabra de moda más ocupada era micro-front-ends. Eso es lo que hizo Personia. Construyeron micro-front-ends, y nuestro sabor de micro-front-ends parecía algo así. Teníamos aplicaciones separadas en repositorios separados bajo un solo framework que era React. En el momento de la construcción, estas aplicaciones enviarían activos a almacenamiento de archivos en un bucket de AWS S3, y también sincronizarían su última construcción con un servicio interno llamado Servicio de Artefactos. Esta cosa mantenía un mapa de aplicación a activos, algo así. Luego, cuando el monolito recibía una solicitud, preguntaba al Servicio de Artefactos, oye, qué activos debería renderizar aquí, los pasaba al cliente, luego esos serían descargados, JavaScript haría su cosa, y una aplicación React independiente sería renderizada y montada en los navegadores de los usuarios.

2. Orquestación y Federación

Short description:

Así, pasamos de un monolito a microfrontends separados, lo que inicialmente resolvió algunos problemas pero creó ineficiencias. Para abordar esto, introdujimos la orquestación, que implicaba renderizar a través de algo diferente al monolito. Implementamos la federación, donde los módulos son expuestos y consumidos por un controlador central en tiempo de ejecución, permitiendo lanzamientos de módulos separados. El orquestador de frontend sirve como un controlador ligero y actúa como un enrutador para mapear URLs a módulos.

Entonces, para darles una idea visual de cómo se veía esto, este es el tablero de Persona, y pasamos de esto, el monolito haciendo absolutamente todo, a algo como esto, donde teníamos dos aplicaciones separadas, dos microfrontends separados, eran independientes, no compartían nada. Y esto fue realmente bueno. Resolvimos parte de los problemas, que era que la gente no podía trabajar de forma independiente, teníamos un lío, todo mezclado, y el despliegue era doloroso. Pero también no era tan genial, ¿sabes? Compartir cosas como el estado, las dependencias comunes, todo era muy difícil, requería mucho de coordinación, y después de un tiempo decidimos que realmente no valía la pena el esfuerzo, para compartir estas cosas, así que cada aplicación tenía todo en ella, y era muy ineficiente. Además, estábamos depreciando el monolito, por lo que el vehículo de renderización iba a desaparecer, que es probablemente la razón principal por la que tuvimos que construir algo diferente, ¿verdad?

Ese es el tercer momento, al que llamo orquestación. Y este tercer momento tenía dos objetivos. Uno de ellos era renderizar a través de algo diferente al monolito, porque recuerda que estaba desapareciendo, y el otro era mantener las buenas partes mientras mejorábamos las limitaciones, por lo que las buenas partes incluían la independencia del equipo, y cómo podían construir y lanzar por separado. Las limitaciones eran lo que mencioné antes, era muy ineficiente, difícil de compartir cosas, y así sucesivamente. Y se veía así. Esta es una versión muy poco detallada de ello, entraremos en detalle en un segundo. Pero tenemos un NX monorepo, y luego tenemos nuestros microfrontends siendo expuestos como federados modules, consumidos por una aplicación que llamamos el frontend orquestador, y esa aplicación renderiza cosas y las envía al cliente.

Hablemos del primer aspecto de esto, que es la federación. En términos políticos, esto se trata de provincias, ya sabes, la mayoría son parcialmente independientes con un gobierno central. En nuestro mundo, en JavaScript, es muy similar. Tienes cosas parcialmente autónomas o parcialmente independientes que pueden ser consumidas por un controlador central. Así que tenemos dos aspectos principales, ¿verdad? Tenemos los modules, que son expuestos por un sistema, cualquier sistema, y cualquier cosa puede ser un módulo. Y estos son consumidos por un host. Y también los modules pueden ser hosts ellos mismos. Ahora, si miras esto, podrías preguntarte, bueno, ¿qué lo hace diferente de una instalación regular de NPM? Ya sabes, también consumo modules cuando importo un módulo de NPM, y es una cosa muy pequeña, pero también es muy grande. Lo que es que el consumo de los modules ocurre en tiempo de ejecución. Así que el host no necesita saber qué es el módulo cuando se está construyendo, sólo necesita saber dónde vive. Y luego lo buscará y lo consumirá en tiempo de ejecución. Y esto nos permite hacer algo que es muy poderoso, que es separar los lanzamientos de módulos de un lanzamiento o una reconstrucción del host principal. Cuando estamos hablando de micro frontends y queremos mantener la independencia, bueno, esto es una necesidad.

Bueno, eso es muy divertido. Ya sabes, tienes hosts, tienes modules. Los modules pueden ser hosts, pero todavía necesitas algo central para consumirlos, por lo que necesitamos un controlador central pero ligero. La palabra ligero tiene un poco de acento en ella porque, bueno, realmente queremos que el frontend orquestador, que es como llamamos a nuestro controlador central, sea realmente tonto. Ya sabes, queríamos que hiciera dos cosas. Una de esas dos cosas es que necesita ser un enrutador para poder mapear URLs a modules.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.

Workshops on related topic

IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Monorepos de Node con Nx
Node Congress 2023Node Congress 2023
160 min
Monorepos de Node con Nx
Top Content
WorkshopFree
Isaac Mann
Isaac Mann
Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.
Índice de contenidos:- Laboratorio 1 - Generar un espacio de trabajo vacío- Laboratorio 2 - Generar una api de node- Laboratorio 3 - Ejecutores- Laboratorio 4 - Migraciones- Laboratorio 5 - Generar una biblioteca de autenticación- Laboratorio 6 - Generar una biblioteca de base de datos- Laboratorio 7 - Añadir un cli de node- Laboratorio 8 - Limites de módulo- Laboratorio 9 - Plugins y Generadores - Introducción- Laboratorio 10 - Plugins y Generadores - Modificación de archivos- Laboratorio 11 - Configuración de CI- Laboratorio 12 - Caché distribuida
Construyendo una Aplicación de Shopify con React & Node
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Construyendo una Aplicación de Shopify con React & Node
Top Content
WorkshopFree
Jennifer Gray
Hanna Chen
2 authors
Los comerciantes de Shopify tienen un conjunto diverso de necesidades, y los desarrolladores tienen una oportunidad única para satisfacer esas necesidades construyendo aplicaciones. Construir una aplicación puede ser un trabajo duro, pero Shopify ha creado un conjunto de herramientas y recursos para ayudarte a construir una experiencia de aplicación sin problemas lo más rápido posible. Obtén experiencia práctica construyendo una aplicación integrada de Shopify utilizando el CLI de la aplicación Shopify, Polaris y Shopify App Bridge.Te mostraremos cómo crear una aplicación que acceda a la información de una tienda de desarrollo y pueda ejecutarse en tu entorno local.
Micro Frontends con Module Federation y React
JSNation Live 2021JSNation Live 2021
113 min
Micro Frontends con Module Federation y React
Workshop
Alex Lobera
Alex Lobera
¿Alguna vez has trabajado en una aplicación monolítica de Next.js? Yo sí, y escalar una gran aplicación de React para que muchos equipos puedan trabajar simultáneamente no es fácil. Con micro frontends, puedes dividir un monolito frontend en piezas más pequeñas para que cada equipo pueda construir e implementar de forma independiente. En este masterclass aprenderás cómo construir aplicaciones de React grandes que escalen utilizando micro frontends.