Parte 2 - Tema 1 Flashcards
Arquitectura software
Arquitectura software
La arquitectura de un sistema software constituye un modelo relativamente pequeño e intelectualmente comprensible de cómo está estructurado dicho sistema y de cómo trabajan juntos sus componentes. Es la representación de dicho software que permite:
* Analizar la efectividad del diseño para la consecución de los requisitos fijados.
* Considerar las alternativas arquitectónicas en una etapa en la cual hacer cambios en el diseño es relativamente fácil.
* Reducir los riesgos asociados a la construcción del software
Principios
Hay 12 principios que están relacionados a la escalabilidad, disponibilidad y costo
Principio 1: N+1 Design
Para garantizar la disponibilidad de tu software, ten al menos una instancia adicional en tu esquema de despliegue.
Principio 2: Design for rollback
Para garantizar también la disponibilidad, asegúrate que todo cambio en tu software sea fácilmente revertible.
Principio 3: Design to Be Disabled
Cuando dependes de un sistema, y este no se encuentre disponible, establece un mecanismo que garantice un normal funcionamiento.
Principio 4: Design to Be Monitored
Además de monitorear cuándo el sistema no está funcionando correctamente, debes obtener indicadores que permita identificar cuándo se está desempeñando de manera diferente a lo normal.
Principio 5: Design for Multiple Live Sites
Principio 6: Use Mature Technologies
Usar una tecnología emergente se consciente que al hallar errores, la comunidad a consultar será muy pequeña. Si quieres evitar eso trata de usar tecnologías ya probadas y con una gran comunidad.
Principio 7: Asynchronous Design
Siempre que sea posible, los sistemas deben comunicarse de forma asincrónica, ya que son más tolerantes a fallas y no caen fácilmente a cargas extremas
Principio 8: Stateless Systems
Trate de evitar el estado siempre que sea posible, ya que almacenarlo requiere memoria lo que aumenta el costo de su sistema.
Principio 9: Scale Out Not Up
Escale horizontalmente en lugar de verticalmente, si el adquirir un hardware más rápido, más grande y más caro, no sea indispensable para el crecimiento de su negocio.
Principio 10: Design for at Least Two Axes of Scale
Se consideran el escalamiento en ejes, lo que se conoce como el cubo de la escalabilidad, eje x (clonación y replicación), eje y (divide componentes diferentes) y eje z (divide componentes no diferentes)
Principio 11: Buy when non core
Independientemente de lo inteligente que sea su equipo, simplemente no son los mejores en todo. Construya cosas cuando sea realmente bueno en eso y haga una diferencia significativa en su producto, plataforma o sistema. Y compre cuando no sea el caso.
Principio 12: Use Commodity Hardware
No diseñes una solución que dependa de un hardware específico.
Arquitectura Monolítica
Consiste en crear una aplicación autosuficiente que contenga absolutamente toda la funcionalidad necesaria para realizar la tarea para la cual fue diseñada, sin contar con dependencias externas que complementen su funcionalidad.
Arquitectura Monolítica Ventajas
- Fácil de desarrollar
- Fácil de escalar
- Pocos puntos de fallo
- Autónomo
- Rendimiento
- Fácil de probar
Arquitectura Monolítica Desventajas
- Anclado a un Stack tecnológico
- Escalado Monolítico
- El tamaño sí importa
- Versión tras versión
- Si falla, falla todo
- Es fácil perder el rumbo
- Puede ser abrumador
Arquitectura Cliente/Servidor
El componente servidor proporcionará servicios a múltiples componentes cliente. Los clientes solicitan servicios al servidor y éste proporciona los servicios pertinentes a dichos clientes. Además, el servidor sigue escuchando las peticiones de los clientes.
Arquitectura Cliente/Servidor Ventajas
- Administración centrada en el servidor.
- Centralización de los recursos.
- Mejora de la seguridad.
- Escalabilidad de la instalación.
Arquitectura Cliente/Servidor Desventajas
- Coste elevado.
- Dependencia del servidor.
Arquitectura en capas
Cuya base es la separación de las diferentes funcionalidades del sistema en capas o niveles, donde cada capa se encarga de un conjunto de tareas específicas y se comunica con los niveles adyacentes mediante interfaces bien definidas.
Arquitectura en capas Ventajas
- Modularidad
- Separación de responsabilidades
- Reutilización
- Escalabilidad
- Flexibilidad
Arquitectura en capas Desventajas
- Complejidad
- Tiempo y esfuerzo de desarrollo
- Consumo de recursos
- Costos
- Rendimiento
Arquitectura peer to peer
Es una red de computadoras donde todos los dispositivos conectados a la red actúan como cliente y servidor al mismo tiempo. En esta arquitectura no es necesario un servidor central que administre la red (aunque puede existir), si no que todos los nodos de la red pueden comunicarse entre sí.