Sistemas centralizados y distribuidos
-
Sistema centralizado ("monolito")
-
Todo el contenido está en una misma ubicación/distribución
-
No es una mala opción, como se suele creer
Casos aplicables:
-
Ej.: aplicaciones de escritorio (Word, Photoshop, etc.)
-
Desventajas
-
Cualquier cambio (por ej. de funcionalidad) afecta a todas las capas
-
No es posible un escalado horizontal (aumentar nº servidores que atienden a la aplicación), sí vertical (aumentar recursos del servidor, como RAM, etc.)
-
Al estar todo en un único sistema, no se pueden repartir las solicitudes en varios servidores
-
Puntos únicos de fallo: un sólo fallo puede hacer que se caiga todo el programa
-
Modelo-Vista-Controlador
-
Modelo:
-
Datos que maneja la aplicación
-
MongoDB, ElasticSearch, etc.
-
Vista:
-
Capa con la que interactúa el usuario
-
Presenta la información del modelo, a través del controlador, al usuario
-
HTML, CSS, JS, archivos (pdf)
-
Controlador:
-
Solicita información al modelo y la traslada a la vista
-
En ocasiones se dice que también realiza lógica de negocio, pero teóricamente actúa solo como dispatcher o intermediador
-
Sí que se encarga de la gestión de roles (quién puede acceder a qué información)
-
Sistema distribuido
-
Las diferentes capas de la aplicación (front, back, etc.) están separadas físicamente y conectadas a través de la red (pública (internet) o privada (subred concreta))
-
Comunicación -> paso de mensajes
-
SOAP: no tan usado ya
-
REST: comunicación síncrona
-
Colas / Topics: comunicación asíncrona
-
Ventajas
-
Concurrencia (varios procesos dentro de una máquina se producen a la vez y compiten
por los recursos del sistema operativo) real / paralelismo
-
Al haber diferentes máquinas, no hay competencia por los recursos y los hilos de ejecución son paralelos entre las máquinas
-
Escalabilidad vertical y horizontal
-
Independencia de hardware
-
Diferentes partes del sistema pueden estar alojados en diferentes hardwares y conectarse mediante REST, colas, etc.
-
Patrones
-
Cliente - Servidor
-
Dos nodos
-
Se comunican a través de
-
Síncrono
-
Cliente hace petición y espera respuesta del servidor
-
Editor - Suscriptor
-
N máquinas (ordenadores/servidores) editoras -> mandan mensajes
-
N máquinas suscriptoras -> reciben mensajes (se suscriben a un topic de un editor o a un topic de varios editores)
-
Asíncrono -> el editor manda el mensaje y "se olvida", no espera a que los sucriptores reciban el mensaje (no sabe ni quiénes son los suscriptores)
-
Ejemplos:
-
Twitter
-
Foro de Unir
-
Newsletters
-
Microservicios
-
Def.:
-
Servicio especializado en resolver un problema concreto
-
Es independiente del resto de componentes del sistema distribuido
-
Tienen total autonomía -> No afectan al resto de microservicios
-
Expone su API para que otros micros se integren con él