Este principio del pilar de optimización del rendimiento del Google Cloud Framework de arquitectura 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 futura separación de componentes.
Descripción general de los principios
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 la flexibilidad y la resiliencia, independientemente de si se implementó inicialmente una arquitectura monolítica o de microservicios. Cuando se descompone el sistema en módulos independientes y bien definidos con interfaces claras, se pueden escalar componentes individuales para satisfacer demandas específicas.
La escalabilidad segmentada puede ayudar a optimizar el uso de recursos y reducir los costos de las siguientes maneras:
- Aprovisiona solo 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 la capacidad de mantenimiento. Las unidades más pequeñas y autónomas son más fáciles de entender, 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 de rendimiento. El aumento de la comunicación entre los módulos puede introducir latencia y sobrecarga. Esfuérzate por lograr un equilibrio entre modularidad y rendimiento. Es posible que un diseño altamente modular no sea adecuado para todos. Cuando el rendimiento es fundamental, puede ser apropiado un enfoque más acoplado. El diseño de sistemas es un proceso iterativo en el que revisas y perfeccionas tu diseño modular de forma continua.
Recomendaciones
Para promover 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 considerar los requisitos de disponibilidad y escalabilidad. Por ejemplo, si un componente tiene requisitos que son diferentes de los de los otros, puedes diseñarlo como un servicio independiente. Implementa un plan para fallas elegantes en subprocesos o servicios menos importantes que no afecten el tiempo de respuesta de los servicios principales.
Cómo diseñar para la simultaneidad y el paralelismo
Diseña tu aplicación para que admita varias tareas de forma simultánea, como procesar varias solicitudes del usuario 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 varias instancias de servicio puedan procesar 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:
Modularidad del equilibrio para la asignación flexible de recursos
Cuando sea posible, asegúrate de que cada componente use solo los recursos necesarios (como la memoria, el almacenamiento y la capacidad de procesamiento) para operaciones específicas. La asignación excesiva de recursos puede generar costos innecesarios, mientras que la asignación insuficiente de recursos 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, los frameworks y las bases de datos de programación para su compatibilidad con la modularidad.
Para obtener más información, consulta los siguientes recursos: