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.
Comments