Gestionar las dependencias para problemas transversales - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Gestionar las dependencias para problemas transversales

La gestión consciente de las dependencias es crucial para el éxito de una arquitectura distribuida, como las microinterfaces. La gestión de las dependencias es una de las partes más desafiantes del desarrollo de las microinterfaces.

En una arquitectura de microinterfaz, dos aspectos importantes de la gestión de las dependencias son la reducción del rendimiento que supone la transferencia de grandes fragmentos de código al cliente y la sobrecarga de los recursos informáticos. Lo ideal es que su organización determine cómo se mantienen las dependencias en una arquitectura de interfaz distribuida.

Tres estrategias viables para exigir el mantenimiento de las dependencias son no compartir nada, utilizando estándares web como la importación de mapas y la federación de módulos. Otros enfoques son contrarios a los patrones porque violan los principios básicos de las arquitecturas distribuidas.

No compartas nada, siempre que sea posible

El enfoque de no compartir nada postula que no se deben compartir en absoluto las dependencias entre artefactos de software independientes, o al menos no durante la integración o el tiempo de ejecución. Esto significa que si dos microinterfaces dependen de la misma biblioteca, cada una debe estar integrada en la biblioteca en el momento de la compilación y enviarla por separado. Además, cada microinterfaz debe validar que la biblioteca no contamine los espacios de nombres globales ni los recursos compartidos.

Esto lleva a redundancias, pero se trata de una compensación consciente con la máxima agilidad. Al no compartir dependencias de tiempo de ejecución, los equipos disponen de la máxima flexibilidad para desarrollar el software de la forma que consideren útil, siempre y cuando lo hagan dentro del ámbito de su solución y no rompan ningún contrato de interfaz.

En una plataforma en la que las microinterfaces siguen el principio de no compartir nada, es importante que las microinterfaces sean lo más ligeras posible. Requiere desarrolladores que sean expertos y diligentes a la hora de optimizar sus microinterfaces para mejorar el rendimiento y que no sacrifiquen la experiencia del usuario por la del desarrollador.

Cuando compartes código

Cuando tomas la decisión de compartir algún código, puedes compartirlo como bibliotecas o módulos de tiempo de ejecución. Por ejemplo, el equipo central de frontend ofrece bibliotecas para el consumo de microinterfaces. CDNs Los equipos de valor empresarial pueden cargar las bibliotecas en tiempo de ejecución o pueden utilizar los repositorios de paquetes para publicar sus bibliotecas. Los equipos con microinterfaz pueden desarrollar aplicaciones basadas en una versión específica de la biblioteca empaquetada en el momento de la compilación, de forma similar a las aplicaciones móviles que utilizan marcos híbridos.

Una tercera opción es utilizar un registro de paquetes privado para permitir la integración de bibliotecas comunes en el momento de la compilación. Esto reduce el riesgo de que un cambio importante en el contrato de la biblioteca provoque errores durante el tiempo de ejecución. Sin embargo, este enfoque más conservador requiere una mayor gobernanza para sincronizar todas las microinterfaces con las versiones más recientes de la biblioteca.

Para mejorar los tiempos de carga de la página, las microinterfaces pueden externalizar las dependencias de la biblioteca para cargarlas desde fragmentos en caché desde una CDN como Amazon. CloudFront

Para gestionar las dependencias del tiempo de ejecución, las microinterfaces pueden utilizar mapas de importación (o bibliotecas, por ejemploSystem.js) para especificar desde dónde se carga cada módulo en tiempo de ejecución. La federación de módulos de webpack es otro enfoque para seleccionar una versión alojada de un módulo remoto y resolver las dependencias comunes entre microinterfaces independientes.

Otro enfoque consiste en facilitar la carga dinámica de los mapas de importación con una solicitud inicial a un punto final de detección.

Estado compartido

Para reducir el acoplamiento de las microinterfaces, es importante evitar una gestión del estado global accesible desde todas las microinterfaces desde la misma vista, similar a las arquitecturas monolíticas. Por ejemplo, disponer de una tienda global de Redux accesible desde todas las microinterfaces aumenta el acoplamiento.

Un patrón para eliminar el estado compartido es encapsularlo en microinterfaces y comunicarse con mensajes asíncronos, como se ha explicado anteriormente.

Cuando sea absolutamente necesario, introduzca interfaces bien definidas para el estado global y opte por compartir en modo de solo lectura para evitar comportamientos inesperados:

  • Cuando hay una división vertical, puede utilizar los componentes de la URL y el almacenamiento del navegador para acceder a la información del entorno anfitrión.

  • Si tiene una división mixta, también puede utilizar JavaScript bibliotecas o eventos personalizados estándar del DOM, como emisores de eventos o transmisiones bidireccionales, para pasar información a las microinterfaces.

Si necesitas compartir varios datos entre las microinterfaces, te recomendamos revisar los límites de las microinterfaces. La necesidad de compartir puede deberse a la evolución empresarial o a un diseño inicial deficiente.

También es posible utilizar sesiones del lado del servidor, en las que cada microinterfaz obtiene los datos necesarios mediante un identificador de sesión. Para reducir el acoplamiento, es importante eliminar el estado compartido y mantener separados los datos de sesión específicos de la microinterfaz.