REL04-BP02 Implemente dependencias débilmente acopladas - AWS Marco Well-Architected

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.

REL04-BP02 Implemente dependencias débilmente acopladas

Las dependencias, como los sistemas de colas, los sistemas de transmisión, los flujos de trabajo y los equilibradores de carga, tienen un acoplamiento débil. El acoplamiento débil ayuda a aislar el comportamiento de un componente de otros componentes que dependen de él, lo que aumenta la resiliencia y la agilidad.

El desacoplamiento de las dependencias, como los sistemas de colas, los sistemas de transmisión y los flujos de trabajo, ayuda a minimizar el impacto de los cambios o los errores en un sistema. Esta separación aísla el comportamiento de un componente para que no afecte a otros que dependan de él, lo que mejora la resiliencia y la agilidad.

En sistemas de acoplamiento ajustado, los cambios en un componente pueden requerir cambios en otros componentes que dependan de él, lo que reduce el rendimiento de todos los componentes. El acoplamiento débil elimina esta dependencia, de forma que los componentes dependientes solo necesitan conocer la interfaz publicada y con control de versiones. La implementación de un acoplamiento débil entre las dependencias aísla un error en una de ellas para que no afecte a otra.

El acoplamiento débil permite modificar el código o agregar características a un componente y, al mismo tiempo, minimizar el riesgo para otros componentes que dependan de él. También permite una resiliencia granular de los componentes, lo que permite escalar horizontalmente o incluso cambiar la implementación subyacente de la dependencia.

Para mejorar aún más la resiliencia mediante el acoplamiento débil, haga que las interacciones entre componentes sean asincrónicas siempre que sea posible. Este modelo es adecuado para cualquier interacción que no necesite una respuesta inmediata y en la que baste con el reconocimiento de que una solicitud se ha registrado. Consta de un componente que genera eventos y de otro que los consume. Los dos componentes no se integran mediante una point-to-point interacción directa, sino normalmente a través de una capa de almacenamiento duradera intermedia, como una SQS cola de Amazon, una plataforma de transmisión de datos como Amazon Kinesis, o. AWS Step Functions

Diagrama que muestra dependencias, como los sistemas de colas y los balanceadores de carga, que tienen un acoplamiento débil

Figura 4: Las dependencias, como los sistemas de colas y los balanceadores de carga, tienen un acoplamiento débil

Amazon SQS hace cola y AWS Step Functions son solo dos formas de añadir una capa intermedia para un acoplamiento suelto. Las arquitecturas basadas en eventos también se pueden crear con Nube de AWS Amazon EventBridge, que puede separar a los clientes (productores de eventos) de los servicios en los que confían (consumidores de eventos). Amazon Simple Notification Service (AmazonSNS) es una solución eficaz cuando necesita mensajería push de alto rendimiento. many-to-many Al utilizar SNS los temas de Amazon, los sistemas de publicación pueden distribuir los mensajes a un gran número de puntos de conexión de suscriptores para su procesamiento paralelo.

Aunque las colas ofrecen varias ventajas, en la mayoría de sistemas en tiempo real estricto, las solicitudes que superan un umbral temporal (que suele ser de segundos) se consideran obsoletas (el cliente ha desistido y ya no espera una respuesta), por lo que no se procesan. De esta manera, se pueden procesar las solicitudes más recientes (y probablemente aún válidas) en su lugar.

Resultado deseado: la implementación de dependencias con un acoplamiento débil permite minimizar la superficie de posibles errores a nivel del componente, lo que ayuda a diagnosticar y resolver problemas. También simplifica los ciclos de desarrollo, lo que permite a los equipos implementar cambios a nivel modular sin que eso afecte al rendimiento de otros componentes que dependan de él. Este enfoque ofrece la capacidad de escalar horizontalmente a nivel de componente en función de los recursos que sean necesarios, así como de utilizar un componente que contribuye a ahorrar costos.

Patrones comunes de uso no recomendados:

  • Implementar una carga de trabajo monolítica.

  • Invoca directamente APIs entre niveles de carga de trabajo sin posibilidad de conmutación por error o procesamiento asíncrono de la solicitud.

  • Utilizar un acoplamiento ajustado con datos compartidos. Los sistemas de acoplamiento débil no deben compartir datos a través de bases de datos compartidas u otras formas de almacenamiento de datos de acoplamiento ajustado, que pueden reintroducir el acoplamiento ajustado y dificultar la escalabilidad.

  • Ignorar la contrapresión. La carga de trabajo debe tener la capacidad de ralentizar o detener los datos entrantes cuando un componente no pueda procesarlos al mismo ritmo.

Beneficios de establecer esta práctica recomendada: el acoplamiento débil ayuda a aislar el comportamiento de un componente de otros que dependen de él, lo que aumenta la resiliencia y la agilidad. Un error en un componente está aislado de los demás componentes.

Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto

Guía para la implementación

Implemente dependencias con acoplamiento débil. Existen varias soluciones que permiten crear aplicaciones con un acoplamiento débil. Estos incluyen servicios para implementar colas totalmente gestionadas, flujos de trabajo automatizados, reacción ante eventos y, APIs entre otros, que pueden ayudar a aislar el comportamiento de los componentes del resto de componentes y, por lo tanto, aumentar la resiliencia y la agilidad.

  • Cree arquitecturas impulsadas por eventos: Amazon le EventBridge ayuda a crear arquitecturas impulsadas por eventos distribuidas y acopladas de forma flexible.

  • Implemente colas en sistemas distribuidos: puede utilizar Amazon Simple Queue Service SQS (Amazon) para integrar y desacoplar sistemas distribuidos.

  • Containeriza los componentes como microservicios: los microservicios permiten a los equipos crear aplicaciones compuestas por pequeños componentes independientes que se comunican a través de una definición bien definida. APIs Amazon Elastic Container Service (AmazonECS) y Amazon Elastic Kubernetes Service (EKSAmazon) pueden ayudarle a empezar más rápido con los contenedores.

  • Gestione los flujos de trabajo con Step Functions: Step Functions le ayuda a coordinar varios AWS servicios en flujos de trabajo flexibles.

  • Aproveche las arquitecturas de mensajería de publicación-suscripción (pub/sub): Amazon Simple Notification Service (AmazonSNS) proporciona la entrega de mensajes de los editores a los suscriptores (también conocidos como productores y consumidores).

Pasos para la implementación

Recursos

Documentos relacionados:

Videos relacionados: