Principios básicos del diseño de sistemas

Last reviewed 2023-08-05 UTC

En este documento del framework de arquitectura de Google Cloud, se describen los principios básicos del diseño de sistemas. Un diseño de sistema sólido y seguro es confiable, escalable e independiente. Te permite realizar cambios iterativos y reversibles sin interrumpir el sistema, minimizar los posibles riesgos y mejorar la eficiencia operativa. Para lograr un diseño de sistema sólido, te recomendamos que sigas cuatro principios básicos.

Documenta todo

Cuando comienzas a mover las cargas de trabajo a la nube o a compilar las aplicaciones, un bloqueador importante para el éxito es la falta de documentación del sistema. La documentación es especialmente importante para visualizar de manera correcta la arquitectura de las implementaciones actuales.

Una arquitectura en la nube documentada de forma adecuada establece un lenguaje y estándares comunes, que permiten a los equipos multifuncionales comunicarse y colaborar de manera efectiva. También proporciona la información necesaria para identificar y guiar las decisiones de diseño futuras. La documentación debe escribirse con tus casos prácticos en mente, para proporcionar contexto a las decisiones de diseño.

Con el tiempo, tus decisiones de diseño evolucionarán y cambiarán. El historial de cambios proporciona el contexto que tus equipos necesitan para alinear las iniciativas, evitar la duplicación y medir los cambios de rendimiento de manera efectiva en el tiempo. Los registros de cambios son muy valiosos cuando incorporas un arquitecto de nube nuevo que aún no está familiarizado con el diseño, la estrategia o el historial de tu sistema actual.

Simplifica tu diseño y usa servicios completamente administrados

La simplicidad es fundamental para el diseño de sistemas. Si la arquitectura es demasiado compleja para comprender, será difícil implementar el diseño y administrarlo con el tiempo. Cuando sea posible, usa servicios completamente administrados para minimizar los riesgos, el tiempo y el esfuerzo asociados con la administración y el mantenimiento de los sistemas de referencia.

Si ya ejecutas las cargas de trabajo en producción, realiza pruebas con servicios administrados para ver cómo podrían ayudar a reducir las complejidades operativas. Si desarrollas cargas de trabajo nuevas, comienza de manera simple, establece un producto viable mínimo (MVP) y controla el impulso de realizar una ingeniería excesiva. Puedes identificar casos prácticos excepcionales, iterar y mejorar tus sistemas de forma incremental con el tiempo.

Separa tu arquitectura

La separación es una técnica que se usa para separar tus aplicaciones y componentes de servicio en componentes más pequeños que pueden operar de forma independiente. Por ejemplo, puedes dividir una pila de aplicaciones monolítica en componentes del servicio separados. En una arquitectura separada, una aplicación puede ejecutar sus funciones de forma independiente, sin importar las dependencias.

Una arquitectura separada te brinda mayor flexibilidad para hacer lo siguiente:

  • Aplicar actualizaciones independientes
  • Aplicar controles de seguridad específicos
  • Establecer objetivos de confiabilidad para cada subsistema.
  • Supervisar el estado
  • Controlar los parámetros de rendimiento y costos de forma detallada

Puedes comenzar a desacoplar antes en tu fase de diseño o incorporarla como parte de las actualizaciones del sistema a medida que escalas.

Usa una arquitectura sin estado

Una arquitectura sin estado puede aumentar tanto la confiabilidad como la escalabilidad de tus aplicaciones.

Las aplicaciones con estado dependen de varias dependencias para realizar tareas, como datos almacenados en caché de forma local. Las aplicaciones con estado a menudo requieren mecanismos adicionales para capturar el progreso y reiniciarse de forma correcta. Las aplicaciones sin estado pueden realizar tareas sin dependencias locales significativas mediante el uso de almacenamiento compartido o servicios almacenados en caché. Una arquitectura sin estado permite que tus aplicaciones escalen verticalmente con rapidez con dependencias de arranque mínimas. Las aplicaciones pueden resistir reinicios forzados, tener un tiempo de inactividad menor y proporcionar un mejor rendimiento a los usuarios finales.

En la categoría de diseño de sistemas, se describen las recomendaciones a fin de que las aplicaciones no tengan estado o a fin de usar funciones nativas de la nube para mejorar la captura del estado de la máquina en las aplicaciones con estado.

¿Qué sigue?