Microfrontends Federados a Gran Escala

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.

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
¿Tienes un producto grande construido por muchos equipos? ¿Estás luchando para lanzar a menudo? ¿Se convirtió tu frontend en un monolito inmantenible masivo? Si, como yo, has respondido sí a cualquiera de esas preguntas, ¡esta charla es para ti! Te mostraré exactamente cómo puedes construir una arquitectura de micro frontend con Remix para resolver esos desafíos.
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
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
Remix es un marco de trabajo web que te ofrece el modelo mental simple de una aplicación de múltiples páginas (MPA) pero el poder y las capacidades de una aplicación de una sola página (SPA). Uno de los grandes desafíos de las SPA es la gestión de la red que resulta en una gran cantidad de indirecciones y código defectuoso. Esto es especialmente notable en el estado de la aplicación que Remix elimina por completo, pero también es un problema en los componentes individuales que se comunican con un punto final de backend de un solo propósito (como una búsqueda de combobox, por ejemplo).
En esta charla, Kent demostrará cómo Remix te permite construir componentes de interfaz de usuario complejos que están conectados a un backend de la manera más simple y poderosa que hayas visto. Dejándote tiempo para relajarte con tu familia o lo que sea que hagas para divertirte.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
Hemos escuchado mucho sobre la Arquitectura Fiber de React, pero parece que pocos de nosotros la entendemos en profundidad (o tenemos el tiempo para hacerlo). En esta charla, Tejas repasará su mejor intento de entender Fiber (revisado por otros expertos), y lo presentará de una manera 'explicar-como-si-tuviera-cinco años'.
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
Seamos realistas: la deuda técnica es inevitable y reescribir tu código cada 6 meses no es una opción. La refactorización es un tema complejo que no tiene una solución única para todos. Las aplicaciones de frontend son particularmente sensibles debido a los frecuentes cambios de requisitos y flujos de usuario. Nuevas abstracciones, patrones actualizados y limpieza de esas viejas funciones - todo suena genial en papel, pero a menudo falla en la práctica: los todos se acumulan, los tickets terminan pudriéndose en el backlog y el código legado aparece en cada rincón de tu base de código. Por lo tanto, un proceso de refactorización continua es la única arma que tienes contra la deuda técnica.En los últimos tres años, he estado explorando diferentes estrategias y procesos para refactorizar el código. En esta charla describiré los componentes clave de un marco para abordar la refactorización y compartiré algunos de los aprendizajes acumulados en el camino. Espero que esto te ayude en tu búsqueda de mejorar la calidad del código de tus bases de código.

Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Como desarrolladores, pasamos gran parte de nuestro tiempo depurando aplicaciones, a menudo código que ni siquiera escribimos. Lamentablemente, a pocos desarrolladores se les ha enseñado cómo abordar la depuración, es algo que la mayoría de nosotros aprendemos a través de la experiencia dolorosa. La buena noticia es que _puedes_ aprender a depurar de manera efectiva, y hay varias técnicas y herramientas clave que puedes usar para depurar aplicaciones de JS y React.

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
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.
Construye una sala de chat con Appwrite y React
JSNation 2022JSNation 2022
41 min
Construye una sala de chat con Appwrite y React
WorkshopFree
Wess Cope
Wess Cope
Las API/Backends son difíciles y necesitamos websockets. Utilizarás VS Code como tu editor, Parcel.js, Chakra-ui, React, React Icons y Appwrite. Al final de este masterclass, tendrás los conocimientos para construir una aplicación en tiempo real utilizando Appwrite y sin necesidad de desarrollar una API. ¡Sigue los pasos y tendrás una increíble aplicación de chat para presumir!