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í.
Arquitectura peer to peer Ventajas
Alta escalabilidad
Tolerancia a fallas
Descentralización
Privacidad
Equilibrio de carga
Arquitectura peer to peer Desventajas
- Alta complejidad
- Control
- Seguridad
- Tráfico
Arquitectura orientada a los servicios (SOA)
SOA es una arquitectura de software que estructura una aplicación como una colección de servicios interoperables que se comunican entre sí a través de una red. Cada servicio realiza una función empresarial específica y se publica, descubre y se invoca a través de una red.
Cuáles son los principales componentes de una SOA
Los componentes clave incluyen: servicios, contratos de servicio, registro de servicios, ESB (Enterprise Service Bus), y consumidores de servicios.
¿Cuál es la diferencia entre un servicio web y un servicio SOA?
Aunque todos los servicios web son servicios, no todos los servicios son servicios web. SOA es un enfoque más amplio que incluye servicios web, pero también puede utilizar otros protocolos y estándares. Los servicios SOA se centran más en los negocios y en la interoperabilidad a largo plazo.
¿Cuáles son las ventajas de SOA?
Reutilización de servicios, mayor flexibilidad, escalabilidad, agilidad, y alineación con los objetivos del negocio.
¿Cuáles son los desafíos de SOA?
Complejidad de implementación, costos de desarrollo iniciales, gestión de la gobernanza de servicios, y dependencia de una infraestructura sólida.
¿Qué es un ESB?
Un ESB es un software que actúa como intermediario entre los diferentes servicios de una SOA, facilitando la comunicación y la transformación de datos.
¿Cómo se asegura la seguridad en una SOA?
A través de mecanismos como la autenticación, la autorización, el cifrado de datos, y la gestión de identidades.
¿Cuál es la diferencia entre SOA y microservicios?
Ambos son enfoques arquitectónicos basados en servicios, pero los microservicios son más granulares y se despliegan de forma independiente. SOA suele tener un enfoque más centralizado.
Desventajas de la Arquitectura Orientada a Servicios (SOA)
- Complejidad
- Costo
- Riesgo
- Tiempo de implementación
- Curva de aprendizaje
¿Qué es un microservicio?
Un microservicio es una pequeña aplicación independiente que realiza una única función bien definida dentro de un sistema más grande.
¿Por qué utilizar microservicios?
Mayor escalabilidad, flexibilidad, facilidad de desarrollo, despliegue independiente y tecnologías heterogéneas.
¿Cómo se diseñan los microservicios?
Se diseñan en torno a dominios de negocio específicos y se comunican a través de APIs bien definidas.
¿Qué tecnologías se utilizan comúnmente para desarrollar microservicios?
Docker, Kubernetes, contenedores, API Gateway, lenguajes como Java, Node.js, Go y frameworks como Spring Boot.
¿Qué es un API Gateway?
Un API Gateway actúa como punto de entrada único para los clientes, enrutando las solicitudes a los microservicios correspondientes.
¿Cuáles son las ventajas de los microservicios sobre SOA?
Mayor escalabilidad, flexibilidad, tecnología heterogénea, despliegue independiente.
¿Cuáles son las desventajas de los microservicios?
Mayor complejidad operativa, gestión de múltiples servicios, necesidad de herramientas especializadas.
¿Cuándo es adecuado utilizar microservicios?
Para sistemas grandes y complejos que requieren alta escalabilidad y flexibilidad.
¿Cuáles son las tendencias actuales en microservicios?
Serverless, funciones como servicio, edge computing
¿Qué es un sistema en tiempo real?
Un sistema en tiempo real es aquel cuya corrección depende no solo de la lógica de los resultados computacionales, sino también de los momentos en los que se producen dichos resultados.