Lección 4: Mensajería de última milla Flashcards
¿Qué es la mensajería de última milla?
- Es el Último tramo de la conexión hasta cliente final.
- Se trata de Conectar usuarios en internet a nuestros sistemas.
Dificultades.
- Clientes muy heterogéneos (dispositivo móvil, PC, tablet, …)
Características del usuario externo: Dificultades de la mensajería de última milla.
- Conexión por internet (no local)
- Distintas localizaciones
- Ancho de banda y latencias variable
- Gran cantidad de usuarios
- Redes no seguras
- Clientes no controlados
Características del protocolo HTTP.
- Protocolo de aplicación estándar para web sobre TCP.
• Basado en texto
• Soporta distintos tipos de petición, códigos de respuesta, cabeceras, …
• A la arquitectura utilizada para crear estos servicios se le llama REST
¿Qué es REST?
- REST o Representational State Transfer es un ESTILO de Arquitectura a la hora de realizar una comunicación entre cliente y servidor.
- REST es una arquitectura de desarrollo web que puede ser utilizada en cualquier cliente HTTP.
• Estilo de arquitectura software (usada para diseñar HTTP) con objetivo
de ser escalable y simple
• Arquitectura cliente-servidor con peticiones y respuestas
- “Sin-estado” – servidor no guarda contexto de clientes:
- Sistema basado en capas y en protocolos “cacheables”
- Arquitecturas REST usan estándares web (TCP, HTTP, URL, XML, JSON, …)
REST ¿Cómo funciona?
- El servidor siempre está escuchando en un socket TCP
- El cliente conecta estableciendo una sesión TCP
- Se envía una petición REST del cliente al servidor – HTTP Request (GET, POST,
PUT, DELETE) - El servidor response – HTTP Response (HTTP Status Codes)
- El cliente cierra la conexión
Beneficios de REST.
- Arquitectura conocida por todos
- Está basado en estándares (TCP, HTTP, …)
- Funciona para cualquier cliente, ya sea web o lenguaje de programación
- Al estar basado en texto es muy sencillo analizar el tráfico y su contenido
- Fácilmente ampliable
- Al no tener estado soporta conexiones no confiables
Problemas en REST
• La comunicación es bidireccional pero…
• No podemos recibir “eventos” del servidor (la comunicación la inicia el cliente)
• No soporta flujos constantes
• Es ideal para trabajar en Web, pero no tanto para mensajería bidireccional
• Para solucionar estos problemas se intentó cambiar la forma de usar REST y
aparecieron algunas soluciones no del todo estándares
¿Qué es Long Polling?
- Sirve para mantener una conexión para eventos de cliente de forma “artificial”
- Lanzamos una petición REST al servidor con un timeout “muy largo”
- Si hay algún evento del servidor, puede responder usando la conexión abierta
- Cuando hay respuesta o un timeout, el cliente abre una conexión nueva
- Requiere que el cliente y servidor estén sincronizados
Limitaciones de Long Polling.
• Reconexiones:
• Llevan tiempo, incrementan la latencia
• Por cada evento del servidor
• Por cada envío por parte del cliente
• Los firewalls y otros sistemas de seguridad intermedios pueden no
permitir “timeouts” altos
• Se pueden agrupar envíos en ambas direcciones para incrementar el
ancho de banda, incrementando la latencia
¿Qué es un socket?
Un socket de red es una estructura software dentro de un nodo de una red, que sirve de endpoint para enviar y recibir datos a través de la red.
Los sockets permiten implementar una arquitectura cliente-servidor.
Un socket es un proceso o hilo existente en la máquina cliente y en la máquina servidora, que sirve en última instancia para que el programa servidor y el cliente lean y escriban la información. Esta información será la transmitida por las diferentes capas de red.
Características de WebSockets.
• Estándar IETF para sockets bidireccionales servidor-navegador
• Se inicia como una llamada HTTP especial (Request UPGRADE) que “actualiza”
la conexión a un socket TCP bidireccional
• A diferencia de REST no está basado en HTTP, una vez establecida la conexión
los mensajes no tienen por que basarse en texto o tener formato específico
• Usa el puerto 80, compatible con la mayoría de “proxies” y “firewalls”
• ¡No es compatible por todos los navegadores en todas sus versiones!
Tipos de soluciones de última milla
Las soluciones de última milla se basan en “concentrador” con uno o varios servidores que procesan los
mensajes.
- Para clientes finales:
- Ofrecen APIs Javascript de comunicación para aplicaciones Web
- Ofrecen APIs en distintos lenguajes para aplicaciones nativas
Para servidores:
• Algunas ofrecen soluciones hardware todo en uno (Solace)
• La mayoría ofrecen aplicaciones servidor o librerías para integrarlo en nuestras propias aplicaciones de backend
- Para aplicaciones de backend:
- Ofrecen APIs en distintos lenguajes para aplicaciones nativas
¿Qué es el balanceo de carga?
- Compartir la carga de trabajo en distintas máquinas (servidores).
- Es fundamental para poder escalar.
- En cliente
- El cliente selecciona entre una lista de nodos disponibles
- Hay que cambiar el cliente para soportar mas nodos y modificar la lista
¿Qué es clustering?
- Consiste en interconectar los nodos para que puedan hablar entre sí.
- Un cluster es un conjunto de nodos interconectados.
• Podemos tener grupos de clusters para distintas regiones
• La comunicación entre ellos suele ser por TCP
• A veces utilizan mecanismos de auto-discovery
• Suelen estar basados en mecanismos de “Quorum” para evitar
“Split Brains” (lección 6)
¿Cómo se comunican los clusters entre sí?
- La comunicación entre ellos suele ser por TCP
* A veces utilizan mecanismos de auto-discovery
Usos de la persistencia y el caché.
- Desacoplar el envío y la recepción para soportar clientes lentos y rápidos
- Hacer “late join” y recuperar los últimos mensajes enviados al conectar
- Recuperar mensajes perdidos durante una caída
- Si el flujo es constante el cliente siempre va a estar retrasado
- ¡El cliente no tiene por que necesitar todos los mensajes!
¿Qué es conflation y para qué sirve?
• Agrupar cambios para limitar el número de actualizaciones a
clientes (clientes que sean lentos y no puedan obtener todas las actualizaciones)
- Casos de uso típicos:
- Precios de mercado de cualquier tipo
- Sensores de medición
- Datos de monitorización
Implementación de conflation.
- Se suele implementar con mapas de “clave-valor”
- Cada clave contiene un valor que puede cambiar con el tiempo
• Nos interesa el último dato del valor, no los cambios intermedios
• En la siguiente actualización, se crea un único mensaje con todas las
claves cuyo valor ha cambiado
Tipos de Conflation
- Por ratio de envío
* Por cliente individual