Promueve el diseño modular

Last reviewed 2024-12-06 UTC

Este principio del pilar de optimización del rendimiento del Google Cloud Framework de Well-Architected proporciona recomendaciones para ayudarte a promover un diseño modular. Los componentes modulares y las interfaces claras pueden permitir un escalamiento flexible, actualizaciones independientes y una separación futura de los componentes.

Descripción general del principio

Comprender las dependencias entre los componentes de la aplicación y los componentes del sistema para diseñar un sistema escalable

El diseño modular permite flexibilidad y capacidad de recuperación, independientemente de si se implementó inicialmente una arquitectura monolítica o de microservicios. Si desglosas el sistema en módulos independientes y bien definidos con interfaces claras, puedes escalar los componentes individuales para satisfacer demandas específicas.

El ajuste de escala segmentado puede ayudar a optimizar la utilización de recursos y reducir los costos de las siguientes maneras:

  • Solo aprovisiona los recursos necesarios para cada componente y asigna menos recursos a los componentes menos exigentes.
  • Agrega más recursos durante los períodos de mucho tráfico para mantener la experiencia del usuario.
  • Quita los recursos infrautilizados sin comprometer el rendimiento.

La modularidad también mejora el mantenimiento. Las unidades más pequeñas y autónomas son más fáciles de comprender, depurar y actualizar, lo que puede generar ciclos de desarrollo más rápidos y reducir el riesgo.

Si bien la modularidad ofrece ventajas significativas, debes evaluar las posibles compensaciones en el rendimiento. El aumento de la comunicación entre los módulos puede generar latencia y sobrecarga. Busca un equilibrio entre modularidad y rendimiento. Un diseño muy modular podría no ser adecuado para todos los casos. Cuando el rendimiento es fundamental, podría ser adecuado un enfoque más estrechamente acoplado. El diseño del sistema es un proceso iterativo en el que revisas y perfeccionas continuamente tu diseño modular.

Recomendaciones

Para promover los diseños modulares, ten en cuenta las recomendaciones de las siguientes secciones.

Diseña para el acoplamiento bajo

Diseña una arquitectura con acoplamiento bajo. Los componentes independientes con dependencias mínimas pueden ayudarte a compilar aplicaciones escalables y resilientes. A medida que planificas los límites de tus servicios, debes tener en cuenta los requisitos de disponibilidad y escalabilidad. Por ejemplo, si un componente tiene requisitos diferentes de los demás, puedes diseñarlo como un servicio independiente. Implementa un plan para fallas controladas en subprocesos o servicios menos importantes que no afecten el tiempo de respuesta de los servicios principales.

Diseño para la simultaneidad y el paralelismo

Diseña tu aplicación para que admita varias tareas de forma simultánea, como procesar varias solicitudes de usuarios o ejecutar trabajos en segundo plano mientras los usuarios interactúan con tu sistema. Divide las tareas grandes en fragmentos más pequeños que puedan procesar varias instancias de servicio al mismo tiempo. La simultaneidad de tareas te permite usar funciones como el ajuste de escala automático para aumentar la asignación de recursos en productos como los siguientes:

Equilibra la modularidad para una asignación de recursos flexible

Cuando sea posible, asegúrate de que cada componente use solo los recursos necesarios (como memoria, almacenamiento y capacidad de procesamiento) para operaciones específicas. La asignación excesiva de recursos puede generar costos innecesarios, mientras que la asignación insuficiente puede comprometer el rendimiento.

Usa interfaces bien definidas

Asegúrate de que los componentes modulares se comuniquen de manera eficaz a través de interfaces claras y estandarizadas (como APIs y colas de mensajes) para reducir la sobrecarga de las capas de traducción o del tráfico externo.

Usa modelos sin estado

Un modelo sin estado puede ayudarte a garantizar que puedas manejar cada solicitud o interacción con el servicio independientemente de las solicitudes anteriores. Este modelo facilita la escalabilidad y la capacidad de recuperación, ya que puedes aumentar, reducir o reiniciar el servicio sin perder los datos necesarios para las solicitudes o los procesos en curso.

Elige tecnologías complementarias

Elige tecnologías que complementen el diseño modular. Evalúa los lenguajes de programación, los frameworks y las bases de datos para determinar si admiten la modularidad.

Para obtener más información, consulta los siguientes recursos: