SOA multiplataforma con rabbitmq y websockets

40
SOA multiplataforma Aplicaciones distribuidas con RabbitMQ y WebSockets Braulio Megias @bmegias http://bmegias.wordpress.com

description

Cómo montar una arquitectura SOA con mensajería y dirigida por eventos con RabbitMQ, y cómo llevar esas notificaciones al navegador con websockets y signalR

Transcript of SOA multiplataforma con rabbitmq y websockets

Page 1: SOA multiplataforma con rabbitmq y websockets

SOA multiplataformaAplicaciones distribuidas con RabbitMQ y WebSockets

Braulio Megias

@bmegias

http://bmegias.wordpress.com

Page 2: SOA multiplataforma con rabbitmq y websockets

Índice

Sistemas y aplicaciones distribuidas

Falacias de la computación distribuida

Acoplamiento

Patrones de Integración. Mensajería

AMQP y RabbitMQ

En el navegador: WebSockets/SignalR

Page 3: SOA multiplataforma con rabbitmq y websockets

Sistemas

Aplicación

Único ejecutable en única máquina

Usualmente con una única fuente de información

Conectiviqué?

Sistema Múltiples ejecutables en múltiples máquinas

Habitualmente con varias fuentes de información

La conectividad es una parte fundamental

Un ejecutable de un sistema != aplicación

Page 4: SOA multiplataforma con rabbitmq y websockets

Servicios

Servicio

Datos + Funcionalidad

Sólo funcionalidad

Es una función, no un servicio

Ej: Una validación

Sólo datos

Es una base de datos

Ej: Operaciones CRUD

Page 5: SOA multiplataforma con rabbitmq y websockets

Falacias computación distribuida

La red es fiable

La latencia es cero

El ancho de banda no es un problema

La red es segura

La topología no va a cambiar

El administrador sabe qué hacer

Los costes de transporte no importan

La red es homogénea

Page 6: SOA multiplataforma con rabbitmq y websockets

Más falacias

El sistema es atómico / monolítico

El sistema está acabado

La lógica de negocio puede y debe estar centralizada

Page 7: SOA multiplataforma con rabbitmq y websockets

El sistema es atómico

Problema

Si consideramos todo el sistema una unidad indivisible, el mantenimiento es una pesadilla

Si el sistema no fue diseñado para ser escalable a N máquinas, hacerlo puede en realidad sercontraproducente

Soluciones

Internamente desacoplado. Modularización

Diseñar para escalar horizontalmente

Diseñar pensando en interacciones con otros

Page 8: SOA multiplataforma con rabbitmq y websockets

El sistema está acabado

Problema

Los costes de mantenimiento son mayores a los de

desarrollo

Cómo actualizaremos el sistema? Y si sólo se ha de

actualizar una parte?

Soluciones

Diseñar para mantenimiento

Diseñar para actualizaciones. Versionado

Page 9: SOA multiplataforma con rabbitmq y websockets

La lógica debe estar centralizada

Problema

“El nombre de usuario tiene menos de 40 caracteres”

Comprobar en UI? Capa de lógica de negocio? BBDD?

Cuando esta regla cambie, dónde hay que tocar?

Soluciones

La lógica estará distribuida. Diseñemos en consecuencia

Page 10: SOA multiplataforma con rabbitmq y websockets

Acoplamiento

Plataforma

Temporal

Espacial

Page 11: SOA multiplataforma con rabbitmq y websockets

Plataforma

Problemas

Interoperabilidad

Ojo con utilizar protocolos/formatos propietarios

Soluciones

Usar protocolos estándar como http

Serializar a XML, o JSON

Page 12: SOA multiplataforma con rabbitmq y websockets

Temporal (I)

Service A Service B

Customer GetCustomerInfo(id)

Calling thread is

waiting for the

result

MakeCustomerPreferred(id)

Save customer as preferred

Page 13: SOA multiplataforma con rabbitmq y websockets

Temporal (y II)

Service A Service B

Publish updated customer infoStore data

MakeCustomerPreferred(id)

Save customer as preferred

Page 14: SOA multiplataforma con rabbitmq y websockets

Espacial

Problema

Código de aplicación ha de saber dónde están los servicios

colaboradores en la red

Solución

Delegar a “alguien” que se encargue de hacer llegar la

petición a quien corresponda

Envío de mensajes?

Page 15: SOA multiplataforma con rabbitmq y websockets

Patrones de integración

Base de datos compartida

Ficheros

RPC

Mensajería

Page 16: SOA multiplataforma con rabbitmq y websockets

Base de datos compartida

Es EL MAL

Acoplamiento absoluto

Esquema unificado

Aplicaciones externas?

Cuello de botella

Quién toca mis datos?

Page 17: SOA multiplataforma con rabbitmq y websockets

Ficheros

Ventaja

Se explicita un contrato/formato

Problemas

Cuando producir/consumir datos

Staleness/obsolescencia

Si queremos evitarla, es muy costoso de gestionar!

Acoplamiento espacial

Page 18: SOA multiplataforma con rabbitmq y websockets

Invocación remota de métodos

Ventajas

Inmediatez

Encapsulamiento

Problemas

Acoplamiento

de plataforma -> subsanable

Temporal

Espacial

Inmediatez - WTF?

Page 19: SOA multiplataforma con rabbitmq y websockets

Mensajería

Completamente desacoplado: espacial, temporal, plataforma

Page 20: SOA multiplataforma con rabbitmq y websockets

Tipos de mensajes

Comando

Enviado por N clientes a un servidor lógico

Servidor puede escalar horizontalmente

Ej: AgregarUsuario

Evento

Enviado por un servidor lógico a N suscriptores

Ej: UsuarioCreado

Tipado de mensajes simplifica enrutado

Page 21: SOA multiplataforma con rabbitmq y websockets

Ejemplo (I)

Shop Order Billing Shipping

PlaceOrder

OrderBilled

OrderShipped

ShipOrder

BillOrder

Page 22: SOA multiplataforma con rabbitmq y websockets

Ejemplo (y II)

Shop Order Billing Shipping

PlaceOrder

OrderPlaced

OrderBilled

OrderShipped

Page 23: SOA multiplataforma con rabbitmq y websockets

A considerar

Duplicar información

Orden de los mensajes

Mensajes repetidos

Page 24: SOA multiplataforma con rabbitmq y websockets

RabbitMQ

http://www.rabbitmq.com/

AMQP

Mensajes Cuerpo + Routing Key

Exchanges / Queues / Bindings Direct Fanout Topic

Page 25: SOA multiplataforma con rabbitmq y websockets

AMQP (I)

Advanced Message Queueing Protocol

http://www.amqp.org

Abierto, platform-agnostic, interoperable

Define cómo clientes y brokers interactúan

Los detalles quedan ocultos en las librerías cliente

AMQP Model

Define enrutado y almacenamiento de mensajes

Page 30: SOA multiplataforma con rabbitmq y websockets

Exchange/Queue

Cada mensaje recibido se envía a todas las colas quecorrespondan

Un mensaje enrutado a una cola no se envía más de

una vez, salvo reenvío tras fallo o rechazo

Page 31: SOA multiplataforma con rabbitmq y websockets

Enrutado simple

Direct exchange

Exchange

Unico por sistema

Routing key

Tipo del mensaje

Queue

Nombre del servicio consumidor

Page 32: SOA multiplataforma con rabbitmq y websockets

Cliente

Comandos

Llamadas AJAX

Eventos

Polling

Long-Polling / COMET

WebSockets

Page 35: SOA multiplataforma con rabbitmq y websockets

WebSockets (I) Full-duplex

Comunicación full-duplex utilizando un socket TCP

Inicio: GET

GET /chat HTTP/1.1

Connection: Upgrade

Host: example.com

Origin: http://example.com

Sec-WebSocket-Key1: 284 ^rI 2 447 8 Me1*V 8

Sec-WebSocket-Key2: 30]8N763$84 12>

Upgrade: WebSocket

64:6E:AC:0C:FD:90:8A:51

Page 36: SOA multiplataforma con rabbitmq y websockets

WebSockets (II)

Respuesta

HTTP/1.1 101 WebSocket Protocol Handshake

Upgrade: WebSocket

Connection: Upgrade

Sec-WebSocket-Origin: http://example.com

Sec-WebSocket-Location: ws://example.com/chat

79:C5:C1:29:4A:60:8B:34:66:D5:61:10:C2:0C:4F:AA

Page 38: SOA multiplataforma con rabbitmq y websockets

Implementaciones

Emulación con Flash para navegadores antiguos

Servidor

Superwebsocket

También cliente .net

http://superwebsocket.codeplex.com/

ASP.NET 4.5 + IIS 8

Requiere Windows 8 + VS11

Nuget Microsoft.websockets

Page 39: SOA multiplataforma con rabbitmq y websockets

SignalR

https://github.com/SignalR/SignalR

http://jabbr.net/

Notificaciones para aplicaciones web

Selección automática del método de conexión

Super-simple

Page 40: SOA multiplataforma con rabbitmq y websockets

Gracias por vuestra atención

Braulio Megías

@bmegias

http://bmegias.wordpress.com