Resumen Parcial Arquitectura
Resumen Parcial Arquitectura
Resumen Parcial Arquitectura
❖ Proceso de arquitectura
● Requerimientos
- Funcionales: lo que el sistema tiene que hacer. Ej: tener un buscador, y que
cuando el usuario pone una palabra y la busque, que se despliegue una lista
etc etc etc. Es lo que tiene que hacer el sistema. El QUÉ.
El requerimiento funcional responde a la lógica del negocio.
ej requerimiento funcional básico: "recibir pedido online"
❖ Atributos de calidad
Modificabilidad: capacidad del sistema para poder evolucionar (desde un punto de vista de
mantenibilidad). Poder agregarle nuevas funciones, poder escalarlo, etc.
Disponibilidad: grado de operabilidad (qué tanto tiempo tiene que estar disponible un
sistema). Ej: 24/7 los 365 días del año.
Atributos de Calidad
➔ Rendimiento
Ofrece un grado de eficiencia a la hora de responder ciertos estímulos, respetando
ciertas características de velocidad, precisión y cantidad en la concurrencia.
- Tiempo de respuesta: le vamos a pedir que cada vez que el usuario interactúa con
el sistema haya “x” tiempo de respuesta
- Rendimiento (throughput): qué cantidad de transacciones va a poder ejecutar
nuestro sistema
- Escalabilidad: cuánto tiempo le vamos a dar al sistema para que pueda tomar más
transacciones
- Carga pico
➔ Disponibilidad
Es el grado de operabilidad de un sistema o componente. Se puede medir en cómo el
sistema se recupera ante un fallo; o una vez caído, en cuánto vuelve a estar operable
Es importante diferenciar entre desperfecto/error (fault) y falla (failure)
- Desperfecto: si no es controlado, puede provocar una falla. No son observables.
- Falla: el sistema no responde en el tiempo esperado. Son observables y el cliente
final las percibe
Disponibilidad (%): Tiempo medio entre fallas / Tiempo medio entre fallas + tiempo medio de
reparación
➔ Modificabilidad
Es el grado de facilidad que tiene un sistema para ser modificado, ya sea para agregar
nuevas funcionalidades como para modificar las existentes (mantenibilidad). Tomando
facilidad como costo y tiempo
Se pueden agrupar en
- Maintainability: Relacionado con la resolución de problemas
- Extensibility: Permitir extender el software con nuevas funcionalidades
➔ Usabilidad
Es el grado de facilidad que tiene el sistema para ser operado por los usuarios.
Cómo se logra, desde el punto de vista arquitectónico, que el sistema sea intuitivo.
Tiene que ser fácil de usar y recordar ; que el diseño sea simple y consistente ; que haya
prevención de errores ; que las tareas se ejecuten eficientemente. También que haya Ayuda
disponible
➔ Testabilidad
Es el grado de facilidad que tiene un sistema para que se pruebe de forma completa, ya
sea unitariamente, integración, aceptación y regresión
El 40% del costo lo consume el testing. Cuando más fácil se puede hacer que un sistema
sea probado, se tiende a minimizar el costo y los tiempos de testeo
➔ Seguridad
Es el grado de habilidad del sistema para resistir a usos NO autorizados mientras
sigue proveyendo sus servicios a los usuarios legítimos.
Se puede caracterizar en confidencialidad e integridad de los datos, aseguramiento,
disponibilidad, auditoría.
UNIDAD 2 - DISEÑO TÉCNICO DE ARQUITECTURAS
1. Capa de presentación / Interfaz de usuario: capa que va a ser el nexo entre los
usuarios y el sistema o la solución que estemos diseñando
2. Business Logic (BL) o Lógica de Negocio: corazón del sistema, de mi solución.
Acá es donde voy a tener todo el procesamiento, transformación de los datos.
Voy a tener el modelo de dominio de mi solución. Depende del rubro las entidades
de negocio que va a tener
Van a estar todos los procesos que permiten hacer cosas con esa información, y
poder brindárselas a la capa de presentación, que va a ser la que se la da al
usuario. Se comunica para darle la información
3. Capa de acceso a datos o Persistencia: capa que realmente tiene la info a largo
plazo que se la va a presentar a la capa subyacente (BL). Para guardar algo a lo
largo del tiempo. Puede ser un archivo, un excel, una base de datos, etc.
Si la aplicación con sus datos NO es suficiente para trabajar y requiero acceder a info a otra
app que está fuera de mi dominio, aparece la 4ta capa. Ocurre cuando la App necesita algo
de otra aplicación, de un tercero
❖ Lenguajes de programación
Son lenguajes formales para crear procesos que se pueden llevar a cabo por una
computadora.
Lenguajes de programación
- Tipado: a las variables se les definen “tipos” de dato (ej, número, letras, fechas,
etc.). Si el lenguaje es tipado me da más control, y necesito datos estructurados.
No tipado es lo contrario, que da agilidad y velocidad en el desarrollo del código,
menos costoso y más fácil de hacer.
- Compilación: el lenguaje entendible por las personas se pasa a uno entendible por
las máquinas. El lenguaje compilado al tener el proceso, si bien tarda mucho, ese
proceso también optimiza el espacio que ocupan los archivos y las variables y los
datos.
Ej: Java, C, C++
- Intérprete: “motor” que se encarga de leer línea por línea el código y ejecutar los
pasos. El lenguaje interpretado cualquier cosa que escribo la ejecuta.
Ej: Python, donde la computadora entiende lo que el usuario escribe
- Transpilación: pasar de un lenguaje a otro. Ej: de TypeScript a Javascript
Alto o bajo nivel: depende de qué tan cerca estoy del sistema operativo. Bajo nivel
brinda más rendimiento porque ya se mueve por las capas más bajas, porque está más
cerca del sistema operativo. En bajo nivel, tiene que ser tipado sí o sí.
Framework vs Librería
Librería: paquetes de código que son de alguien más, y yo los puedo integrar en mi
aplicación para tener más funcionalidades. Tu código llama a una librería. La librería sólo
resuelve un problema
❖ Frontend y Presentación
3. Control de la iniciativa
A. User Initiative
- pedido-respuesta (te piden algo y vos respondés)
- orientado a eventos
B. Application Initiative
- usuario contesta preguntas
- Wizzard
- Alarmas y eventos disparados por la aplicación
C. Combinada
- interactivo, conversación
- continuation
4. Formas de navegación
A. Pantallas y formularios: Stateless ; Terminal boba / Mainframe, Web
Tradicional
B. Ventanas o diálogos: Stateful / Wizards ; Cliente - Servidor, RIA
C. Manipulación directa: objetos
Modo de distribución
Cómo voy a ordenar las 3 capas, y cómo van a estar distribuidas
A. Desktop: cliente pesado. La UI está acoplada con la lógica de negocios. Las
capas están juntas.
B. Web: la UI está separada de la lógica de negocio. UI tiene que estar distribuida, y
la lógica en un servidor central. Las responsabilidades están separadas.
C. Embebidas
D. Distribuidas: la UI está distribuida, y la lógica de negocios se encuentra en un
servidor centralizada
E. Mobile: para clientes muy livianos. Capa de cliente liviano separada de la lógica de
negocio
Concerns
Estos concerns no dependen de la lógica de negocio que estoy modelando, siempre los voy
a tener.
- Testing
- Tracing: trazabilidad. Cómo me doy cuenta por dónde pasó el usuario
- Monitoring: monitoreo. Entender cómo se comporta mi aplicación en un momento
dado
- Logging: registro de actividad.
- Authentication
- Fault injection: inyección de fallas
- Alfa/Beta testing: dos modelos de app para diferentes segmentos
- Security
- Persistence
Separation of concerns
- concerns: pieza de software (componente, clase, etc) que debe ser implementada en
el sistema
- Cross-cutting concern: funcionalidad que afecta a toda la arquitectura. Tiene que
ejecutarse para todo un conjunto de componentes, no para uno específico. Ejemplos
de estos son los que están arriba listados (Security, Logging, etc.). No son concerns
sólo para el Back-end, sino también para el Front-end
Si los concerns están metidos en el código, si cambio las reglas de negocio se vuelve
complejo cambiar esos concerns.
❖ Persistencia de datos
NoSQL
Hay diferentes tipos de bases de datos. Se usan cuando los datos son semiestructurados
o no estructurados.
Ventajas: no tienen penalización a la hora de escribir los datos, no tienen constraints, son
más rápidas. Se puede escalar.
● Documental Grafos
● Columnar
Para consultar los datos en varias
dimensiones.
Ejemplo BD columnar: Cassandra
● Clave-Valor
Me permite modelar clave y valores. La clave identifica el registro que quiero
consultar, y el valor puede ser cualquier cosa (string, nro, imagen, etc.).
Se usa para mantener la sesión de los usuarios
Almacenamiento costoso para grandes volúmenes de datos hecho para un bajo costo de almacenamiento
Agilidad poco ágil, configuración fija muy ágil, se puede configurar y reconfigurar
Distribución vs Consistencia
Cuando evaluamos una base para usar hay un teorema llamado “CAP” donde se ponen en
una balanza Consistencia, A de Disponibilidad y Particionamiento de red.
Todas las bases de datos cumplen 2 de los 3 aspectos al 100%, y el último en mucha menor
medida. Dependiendo de eso y qué priorice, elijo la base de datos.
INTEGRACIÓN DE APLICACIONES, API AS PRODUCT + MICROSERVICIOS
❖ Integración de aplicaciones
Objetivos
- consumir información de terceros
- distribuir información centralizada
- centralizar información variada y proveniente de diferentes fuentes
- resolver una problemática de forma integral
Estrategias de integración
1. User interface
Busca emular de manera automatizada las tareas manuales que implica usar
un sistema
Este mecanismo se usa en el caso de modernización de aplicaciones, o en la
búsqueda de eficiencia operativa sin necesidad de modificar profundamente los
sistemas existentes. Un robot que se encarga de hacer el scrapping (entender
la interfaz de usuario, y después interactuar).
Permite facilitar tareas para modernizar el sistema legado. Con el nuevo
front-end se le saca complejidad al legado. Es como una “máscara”
2. Transferencia de archivos
Dos roles aplicativos: el productor (genera la info a transmitir) y el consumidor (obtiene y
procesa)
El contrato es el archivo, cuestiones como el
encoding, el formato y cómo lo maneja cada
aplicación puede atentar a la interoperabilidad
Otros aspectos como frecuencia de creación y
manejo de novedades también son claves
3. DB Compartido
Se usa cuando el tiempo en la entrega es un aspecto a
cumplir si o si
Permite desacoplar de igual manera que los archivos, pero se
recomienda para los casos en donde se necesite una
integración online
Cuando mi app necesita info de una base de datos de otra aplicación. Entonces hago
queries sobre esa DB.
4. Llamada remota
Se usa para aplicaciones que necesitan trabajar en forma coordinada
Cada aplicación brinda funciones para que puedan ser aprovechadas por aplicaciones
externas
5. Orientado a mensajes
Hay 3 roles distintos
- app proveedora (responde a ese request)
- app consumidora (hace el request, recibe mensajes)
- canal (asegura la transmisión)
❖ API as Product
¿Qué es?
Es una interfaz definida explícita y deliberadamente, diseñada para ser invocada a través
de la red que permite a los desarrolladores obtener acceso programático a los datos y
la funcionalidad dentro de una organización de una manera controlada y cómoda.
Estas interfaces abstraen los detalles de la infraestructura tecnológica que los implementa.
Es una interfaz que nos permite tener una comunicación común entre todas las
aplicaciones.
Proveedores: expone las capacidades y funcionalidades de la API. Manejan el flujo que
se solicita.
Cliente: hace solicitudes
Gobernanza de API
➔ Evolución a Microservicios
Las funciones de la aplicación se componen de muchas APIs, entonces la app
es más chica y cohesiva. Cada servicio lo expone una API, y el API Gateway
maneja/rutea el tráfico que viene de dicha aplicación.
- Los sistemas se ordenaron en base a las jerarquías y dominios de negocio, y los
productos empezaron a ser digitales (no analógicos)
- Se integran recursos, no acciones
- Cada equipo es responsable de su dominio
Conceptos relacionados
- Single Responsibility Principle: cada componente de la arquitectura tiene que hacer
una sóla cosa, y hacerla BIEN. Poco acoplamiento.
- Circuit Breaker
- Separación entre componentes
- Manejo de transacciones distribuidas
- Design for failure: diseñar arquitecturas para las fallas. Diseñar aplicaciones a
prueba de fallos. Que todo puede fallar, entonces prevenirlas
➔ APIs, Gateway y Seguridad
Api Gateway: nuevo componente que permite localizar todos los microservicios (tenerlos en un
mismo punto de acceso), y rutear el tráfico que viene de la app. En caso que dichos microservicios se
modifiquen en algún aspecto, tiene que ser capaz de identificarlos y rutear el tráfico nuevamente.
Cuando recibe el tráfico, el API Gateway aplica un conjunto de reglas de seguridad y después
distribuye en cada uno de los microservicios que tiene la aplicación.
Seguridad
Se delegan las cuestiones de seguridad en un Authorization Server. Cada microservicio
va a tener que validar cuestiones mínimas de seguridad (ej quién es el usuario que usa la
API y a través de qué app). Cuando tienen que autenticarse en una plataforma
El Authorization Server puede ser el de Google, el de Instagram etc.
➔ Persistencia e integración
Persistencia
En cuanto a la persistencia, cada microservicio tiene que tener su propia base de datos.
Cada microservicio va a tener el tamaño de DB que requiera.
Integración
Puede ser sincrónica o asincrónica, dependiendo si se requiere que los microservicios estén
comunicándose en tiempo real o no (si la respuesta tiene que ser inmediata)
Conclusiones de microservicios
1. Edificio
Hay que considerar la localización geográfica donde vamos a poner nuestros recursos
computacionales. Dónde voy a ubicar el datacenter.
2. Electricidad y climatización
Para tener buena electricidad hay que tener un Sistema Redundante de Energía. Tener
mínimo dos proveedores de energía para el mismo edificio por si un servicio se
interrumpe.
Grupos electrógenos, UPSs, tableros eléctricos que se alimentan de esas UPSs.
Sistemas de enfriamiento: pasillos de aire frío y caliente, bombeo de agua helada, control
automático de la temperatura
3. Redes y seguridad
Red de Datos WAN (Wide Area Network): qué tipo de tecnología para interconectar los
edificios. Generalmente la red para interconectar nos las dan las empresas de
telecomunicaciones. Te dan enlaces entre los edificios (son cables especiales privados).
Gralmente se usan L2L (Lan to Lan).
Red de data center: los dispositivos principales son los Load Balancers y Firewall
- Firewall: analiza que la info que entra y sale del data center sea segura. Ya sea
info que viene de la red pública o que sale del data center. Impide que nos roben
info, que nos ataquen, etc.
- Load Balancers: son dispositivos de networking que nos permiten mantener una
alta disponibilidad entre los servidores
4. Hardware computacional
Hardware sizing: estimación realizada para asignar equipamiento para una aplicación
- Hay que contar con info previa al análisis: tipo de aplicación, estimar cantidad de
(usuarios, de concurrencia, transacciones, etc.). Para definir los requerimientos
mínimos del hardware para que funcione bien la infraestructura
- Para definir los recursos computacionales, hay que definir el tipo de aplicación:
página web, base de datos, OLAP, OLTP, etc.
- Definir el espacio requerido en disco, especialmente en bases de datos
❖ Virtualización
❖ Containers
Con un Docker Engine, un servidor puede tener miles de containers en una sola
máquina, teniendo un solo sistema operativo (Linux).
Beneficios
Docker file: manera repetitiva de generar una imagen, y esa imagen se puede empaquetar
y desplegar en cualquier contenedor, y por ende en cualquier servidor que soporte Linux.
- rápido aprovisionamiento: se pasa de minutos a segundos
- cambios controlados: docker file. Que las imágenes se puedan recrear las veces
que sean necesarias, en el momento que sea necesario
- uso eficiente de recursos: menos storage y mayor portabilidad
- Time To Market (TTM): tiempos de aprovisionamiento y permite utilizar
infraestructura inmutable
Plataformas más utilizadas: Docker, Linux Containers. Los containers SON PROCESOS.
Es una VM más chica / disposable (es inmutable). Es una porción del sistema operativo,
con librerías necesarias y con las librerías aplicaciones que uno quiere poner ahí
adentro. Son instancias de software y hardware más chicas.
KUBERNETES
❖ Kubernetes
¿Qué es Kubernetes?
Es un sistema de código abierto para la
automatización del despliegue, escalamiento
y manejo de aplicaciones en contenedoresque
permite adaptarse a cualquier Cloud Provider.
Kubelet: le informa al Ctrl Plane dónde poder ubicar aplicaciones para que el consumo de recursos sea
performante y distribuido, con alta disponibilidad.
❖ Principales abstracciones
Pods
El pod es la unidad de trabajo fundamental en Kubernetes, que especifica un único
contenedor o grupo de contenedores de comunicación que se despliegan juntos
- conjunto de Containers
- posee una IP interna
- puede tener volumen persistente
Deployments
Replica set: objeto que permite que haya más de una réplica
de un pod. Cada Replica set tiene su versión
Services
Deployment Pipelines
Es una implementación automatizada del proceso de creación, implementación,
prueba y lanzamiento de la aplicación.
Testing automático: que se pueda automatizar la mayor cantidad de testing posible. Más
funcional
Git
Es un software de control de las versiones del código. Lleva registro de los cambios
en archivos de computadora y coordina el trabajo que hacen los desarrolladores
Hay diferentes ramas de desarrollo: existe desarrollar en paralelo, y con diferentes features.
Continuous Delivery
La diferencia con CI es que CD agrega un paso más. Agrega un release del producto.
El objetivo del CD es probar que el resultado final es desplegable, no desplegarlo. Que
como mucho le quede un testing manual para después poder pasar a producción
- artefactos agnósticos al entorno: tener un release que soporte los diferentes
entornos
- testing strategy: que se haga un testng más integral, que se mida la capacidad
- coding metrics and analysis
- que la infraestructura sea como código
Testing strategy
Automatizar el testing permite reducir los tiempos de entrega y mejorar la calidad,
aunque no siempre genera ahorros. Hay que contemplar los diferentes niveles de testing:
Unit, Component, Contract, Integration, Performance, UX/UI, E2E (end-to-end) y Regression
Testing (repaso por todas las funcionalidades del sistema).
Automatizar todo lo posible para pasar al release final
Blue/Green Deployment
Se despliega una nueva instancia del servicio (Green), y hasta que no está probado el
Green, no se rutea ni se apaga el blue.
Es una estrategia para dos cosas:
1. Lograr automatizar lo máximo posible la salida a producción
2. Minimizar el riesgo de la salida a producción del producto
RESUMEN CI / CD / CD
Hasta donde llega cada uno.
El Continuous delivery va más allá que el CI, llegando hasta el release. No lo lanza, sino
que se encarga de que sea desplegable
El Continuous Deployment va más allá que el Delivery, desplegando el producto.
PARTE 2: SRE
DESIGN
❖ Modelos operativos
❖ SRE Intro
Devops: es una práctica que permite unificar los mundos de Dev y Ops. El objetivo de la
práctica es dar las condiciones, desde el punto de vista de infraestructura/arquitectura,
para que el equipo de desarrollo tenga esa agilidad que da el enfoque. Para que haya
entrega continua de valor
PROVISIONING
Arquitectura Provisioning
Infraestructura como código: enfoque de la automatización de la infraestructura,
basada en las prácticas del desarrollo de software. Trata que el aprovisionamiento y
cambio de sistemas y su configuración sean rutinas consistentes y repetibles
Con código, se puede hacer que se levante un Cluster de Kubernetes por ejemplo. Es
reutilizable el código, entonces es repetible. El código permite cambiar la arquitectura.
GitOps pipeline
El desarrollador sube su código al
repositorio