Accidentalmente Construimos un Plugin SDK para Micro Frontends

Rate this content
Bookmark

React portals + RxJs = micro frontends en esteroides.

En bettermarks, estamos migrando una aplicación de AngularJS a React usando micro frontends. Imagina un panel de control con widgets de diferentes frontends dependiendo de permisos y configuraciones sin acoplamiento.

Implementamos una solución confiable para nuestros micro frontends - ¡y sí, podemos incrustar componentes de React dentro de AngularJs!

Mostraré nuestra solución y demostraré cómo esto puede ayudarte a construir aplicaciones más robustas al intentar romper las nuestras.

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

André Bauer
André Bauer
27 min
25 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Bienvenidos a la charla sobre Microfrontends y Betamax. El orador comparte su experiencia de construir accidentalmente un plugin SDK para microfrontends. Discuten los objetivos y el proceso de arranque, enfatizando la importancia de la adaptabilidad y la separación de preocupaciones. Se explica el uso de behavior subjects y portal rendering, junto con la composición y resiliencia de los microfrontends. El orador demuestra la renderización de REC.js dentro de AngularJS y destaca los desafíos de manejar la comunicación y el despliegue. También discuten la gestión de cambios disruptivos, el desarrollo local, las pruebas y las dependencias compartidas. La charla concluye con una anécdota humorística e información de contacto para mayor interacción.

1. Introducción a Microfrontends y Betamax

Short description:

Bienvenidos a todos a la, como se mencionó, última charla de al menos esta pista. Compartiré cómo construimos accidentalmente un SDK de plugins para microfrontends, referido como microfrontends en esteroides. Una breve introducción sobre mí, mi nombre es Andre, soy ingeniero principal en Betamax. En 2008, construimos una aplicación tradicional de múltiples páginas impulsada por PHP. Más tarde, decidimos construir una aplicación de una sola página usando AngularJS. Después de nueve años, tuvimos que migrar de AngularJS a React usando un enfoque de micro frontend. Ahora ejecutamos una configuración completa de micro frontend con 58 microfrontends y contando.

Bienvenidos a todos a la, como se mencionó, última charla de al menos esta pista. Estoy, ante todo, súper emocionado de estar aquí. Una de las razones es que esta es realmente la primera vez que hablo en una conferencia, y la otra razón es que compartiré cómo construimos accidentalmente un SDK de plugins para microfrontends, al que me refiero como microfrontends en esteroides, pero la responsabilidad en mí puso la advertencia, así que realmente malo.

Una breve introducción sobre mí, mi nombre es Andre, soy ingeniero principal en Betamax, que es una empresa de tecnología educativa con sede en Berlín y resulta que ha construido los sistemas de aprendizaje y enseñanza adaptativos más avanzados del mundo para escuelas. Así que además de, como se mencionó, construir productos digitales, me encanta construir cosas reales también, así que en caso de que ya te canses de hablar sobre código, entonces contáctame y podemos hablar sobre carpintería o deportes acuáticos para el caso, pero volviendo al tema, ¿cómo llegamos allí?

Para responder a la pregunta, quiero darte un poco de contexto del problema que estamos tratando de resolver y cómo terminamos en la posición de tener que resolverlo en primer lugar. Así que soy viejo, lo cual no es la causa raíz del problema, por supuesto, pero significa que en 2008, cuando Betamax comenzó el desarrollo, yo estaba entre los primeros desarrolladores que, que nos pusieron en marcha y construimos una aplicación tradicional de múltiples páginas impulsada por PHP, lo que nos llevó bastante lejos.

De hecho, tan lejos que cuatro años y medio después, pudimos anunciar que Uruguay había elegido a Betamax para proporcionar todo el material de matemáticas para todas las escuelas, lo cual fue un gran logro en aquellos días, pero también significó que tendríamos un problema bastante pronto porque, según los datos que obtuvimos en Alemania, sabemos que esta configuración no escalaría al nivel de todo un país. Así que pensamos que sería una buena idea construir una aplicación de una sola página, lo último en aquel entonces. Por casualidad, ¿alguno de ustedes sabe cuándo React fue de código abierto? Un mes después. Así que creo que es hora de abordar el elefante en la habitación. Estamos en la conferencia de React, pero en ese momento, optamos por la única opción razonable siendo AngularJS.

Así que, de hecho, construimos la aplicación, la lanzamos y hemos construido sobre esta base desde entonces, en realidad. Pero avanzando rápido, nueve años después, lo inevitable sucedió y Google descontinuó el soporte a largo plazo para AngularJS. Quiero decir, bastante tiempo para ser justos. En ese momento, ya había regresado a Betamax, con la misión de idear un plan de cómo migrar iterativamente de AngularJS a React. Así que abogué por un enfoque de micro frontend y lo ejecutamos con un solo span, que es básicamente un enrutador de JavaScript para micro servicios en el frontend. Y se diferencia, entre otras cosas, en diferentes tipos de microfrontends, que explicaré rápidamente porque usaré la terminología en adelante.

Así que tenemos aplicaciones, por supuesto, que son como cualquier otra aplicación de una sola página, pero sin una página HTML real. Tenemos una configuración raíz que proporciona esta página HTML raíz, maneja el registro de aplicaciones, montaje, desmontaje. Así que es responsable de toda la composición de la configuración de micro frontend. Luego tenemos utilidades para compartir lógica común y como servicios o biblioteca de componentes y tenemos analizadores para compartir UI entre marcos. Esto será importante más adelante. Nuestra prueba de concepto fue bastante fácil de hacer. Así que implementamos la navegación en React y mantuvimos el área de contenido como una versión reducida de AngularJS con un proceso de arranque a medida para la aplicación, que funcionó bastante bien.

Así que pusimos a todo un equipo en ello y comenzamos a desarrollar rápidamente hasta este punto. Ahora ejecutamos una configuración completa de micro frontend donde las aplicaciones pueden renderizar partes dentro de otras aplicaciones donde actualmente tenemos 58 microfrontends y seguimos contando. Tenemos servicios, microfrontends de utilidad que proporcionan APIs compartidas, incluyendo gestión de estado global y detrás de escena, hacemos esto con RxJS bastante intensamente. Y sí, todavía tenemos algunos casos de uso en AngularJS, desafortunadamente, pero estamos llegando allí. Sí, te lo prometí. Lo sé.

2. Goals and Bootstrapping Process

Short description:

Nuestro objetivo es tener poco o ningún acoplamiento entre aplicaciones. La configuración raíz controla la composición de la aplicación. Queremos ser adaptables basados en roles, permisos, licencias, toggles de características y configuraciones. Nuestro objetivo es lograr la separación de preocupaciones, encapsulación y contexto delimitado a nivel de micro frontend. En una demostración en vivo, te mostraré Better Marks desde la perspectiva de un estudiante. Tenemos una vista odiada, la sección de tareas, y un reemplazo digital para los libros escolares de los estudiantes llamado Teaching a School Book. Usamos un toggle de características para activar contenido. El proceso de arranque implica registrar aplicaciones, como la aplicación de tareas y la aplicación de unidades de aprendizaje. El servicio de portal maneja la renderización de contenido en el nodo DOM correcto.

Um, pero primero, ¿qué estamos tratando de lograr realmente desde una perspectiva de objetivos? Así que, um, queremos tener poco o ningún acoplamiento entre aplicaciones. La configuración raíz es el único lugar que controla la composición de las aplicaciones. Queremos ser adaptables. Eso significa, um, la composición de estas aplicaciones se basa en roles, permisos, licencias, toggles de características y configuraciones para que diferentes usuarios puedan tener potencialmente diferentes experiencias de usuario. Y desde un punto de vista arquitectónico, queremos, apuntamos a la separación de preocupaciones, encapsulación y contexto delimitado a nivel de micro frontend.

Sí. Así que sin más preámbulos, pensé que sería una buena idea para tu primera charla ir con una demostración en vivo porque, ¿por qué no? Um, así que esto es Better Marks desde la perspectiva de un estudiante. Estamos viendo una de las vistas más odiadas por los estudiantes porque cuando algo aparece allí, generalmente significa tareas. Y el contenido allí es solo una de las vistas más odiadas por los estudiantes. Y el contenido allí es de nuestro producto de práctica. También tenemos otro que se llama Teaching a School Book, que es un reemplazo digital para los libros escolares físicos de los estudiantes.

Um, la línea roja en la parte superior marca un punto de extensión que llamamos ranuras de portal. Nada aparece aquí. Y te mostraré por qué, porque el toggle de características no está activo. Así que si activo este toggle de características y recargo. Así que ahora aparece contenido. Sí, justo. Así que esto es material que los profesores distribuyeron a los estudiantes para que lo vean. Y para entender nuestro enfoque, te guiaré a través del proceso de arranque de esta página. Ahora ya viste el toggle de características. Así que la configuración raíz se encarga de registrar aplicaciones, como mencioné. Así que tiene, uh, conoce al usuario. Por lo tanto, conoce las licencias potenciales y si la licencia coincide o es suficiente, también registramos la aplicación de tareas, lo que acabamos de ver, el material de tareas. Luego, para el toggle de características activado del libro escolar, también, um, registramos la aplicación de unidades de aprendizaje que proporciona el contenido distribuido, um, del producto del libro escolar, si una aplicación registrada está activa o no, se determina por señales bar para ello ejecutando la función is active para cada aplicación registrada. Y en este caso, um, la ruta para las tareas y las unidades de aprendizaje asignadas coinciden. Así que ambos están montados en esta vista. Si ahora una vista quiere ofrecer una de estas ranuras de portal, solo tienen que usar nuestra tienda de portal con la ranura deseada, lo que les dará un ref de callback. Un componente que quiere renderizar en uno de esos puntos de extensión, también conocidos como ranuras de portal, usa nuestro renderizador de portal para obtener una función create portal personalizada que se encargará de renderizar tu contenido en el nodo DOM correcto una vez que esté montado. Y la parte realmente interesante ocurre en nuestro servicio de portal.

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.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 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.
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.
De Monolito a Micro-Frontends
React Advanced 2022React Advanced 2022
22 min
De Monolito a Micro-Frontends
Top Content
Microfrontends are considered as a solution to the problems of exponential growth, code duplication, and unclear ownership in older applications. Transitioning from a monolith to microfrontends involves decoupling the system and exploring options like a modular monolith. Microfrontends enable independent deployments and runtime composition, but there is a discussion about the alternative of keeping an integrated application composed at runtime. Choosing a composition model and a router are crucial decisions in the technical plan. The Strangler pattern and the reverse Strangler pattern are used to gradually replace parts of the monolith with the new application.
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
React Summit 2022React Summit 2022
17 min
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
Top Content
Today's Talk discusses building flexible, resilient, and future-proof React components using composition and configuration approaches. The composition approach allows for flexibility without excessive conditional logic by using multiple components and passing props. The context API can be used for variant styling, allowing for appropriate styling and class specification. Adding variants and icons is made easy by consuming the variant context. The composition and configuration approaches can be combined for the best of both worlds.

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.
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.
Masterclass de alto rendimiento Next.js
React Summit 2022React Summit 2022
50 min
Masterclass de alto rendimiento Next.js
Workshop
Michele Riva
Michele Riva
Next.js es un marco convincente que facilita muchas tareas al proporcionar muchas soluciones listas para usar. Pero tan pronto como nuestra aplicación necesita escalar, es esencial mantener un alto rendimiento sin comprometer el mantenimiento y los costos del servidor. En este masterclass, veremos cómo analizar el rendimiento de Next.js, el uso de recursos, cómo escalarlo y cómo tomar las decisiones correctas al escribir la arquitectura de la aplicación.
Microfrontends con Module Federation y Angular
JSNation Live 2021JSNation Live 2021
113 min
Microfrontends con Module Federation y Angular
Workshop
Manfred Steyer
Manfred Steyer
Cada vez más empresas eligen Microfrontends. Sin embargo, no son fáciles de implementar. Afortunadamente, Module Federation introducido con webpack 5 ha iniciado un cambio crucial de dirección.
En este masterclass interactivo, aprenderás de Manfred Steyer, Angular GDE y Colaborador de Confianza en el equipo de Angular, cómo planificar e implementar arquitecturas de Microfrontend con Angular y el nuevo Module Federation de webpack. Hablaremos sobre compartir bibliotecas y conceptos avanzados como manejar desajustes de versión, Module Federation dinámico e integración en monorepos.
Después de los ejercicios individuales, tendrás un estudio de caso que podrás utilizar como plantilla para tus proyectos. Este masterclass te ayuda a evaluar las opciones individuales para tus proyectos.
Prerrequisitos:Debes tener algo de experiencia con Angular.