SOA multiplataformaAplicaciones distribuidas con RabbitMQ y WebSockets
Braulio Megias
@bmegias
http://bmegias.wordpress.com
Í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
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
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
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
Más falacias
El sistema es atómico / monolítico
El sistema está acabado
La lógica de negocio puede y debe estar centralizada
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
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
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
Acoplamiento
Plataforma
Temporal
Espacial
Plataforma
Problemas
Interoperabilidad
Ojo con utilizar protocolos/formatos propietarios
Soluciones
Usar protocolos estándar como http
Serializar a XML, o JSON
Temporal (I)
Service A Service B
Customer GetCustomerInfo(id)
Calling thread is
waiting for the
result
MakeCustomerPreferred(id)
Save customer as preferred
Temporal (y II)
Service A Service B
Publish updated customer infoStore data
MakeCustomerPreferred(id)
Save customer as preferred
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?
Patrones de integración
Base de datos compartida
Ficheros
RPC
Mensajería
Base de datos compartida
Es EL MAL
Acoplamiento absoluto
Esquema unificado
Aplicaciones externas?
Cuello de botella
Quién toca mis datos?
Ficheros
Ventaja
Se explicita un contrato/formato
Problemas
Cuando producir/consumir datos
Staleness/obsolescencia
Si queremos evitarla, es muy costoso de gestionar!
Acoplamiento espacial
Invocación remota de métodos
Ventajas
Inmediatez
Encapsulamiento
Problemas
Acoplamiento
de plataforma -> subsanable
Temporal
Espacial
Inmediatez - WTF?
Mensajería
Completamente desacoplado: espacial, temporal, plataforma
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
Ejemplo (I)
Shop Order Billing Shipping
PlaceOrder
OrderBilled
OrderShipped
ShipOrder
BillOrder
Ejemplo (y II)
Shop Order Billing Shipping
PlaceOrder
OrderPlaced
OrderBilled
OrderShipped
A considerar
Duplicar información
Orden de los mensajes
Mensajes repetidos
RabbitMQ
http://www.rabbitmq.com/
AMQP
Mensajes Cuerpo + Routing Key
Exchanges / Queues / Bindings Direct Fanout Topic
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
AMQP (y II)
http://docs.redhat.com/docs/en-
US/Red_Hat_Enterprise_MRG/1.3/html/Grid_Installation_Guide/index.html
Exchanges: Fanout
http://docs.redhat.com/docs/en-
US/Red_Hat_Enterprise_MRG/1.3/html/Grid_Installation_Guide/index.html
Exchanges: Direct
http://docs.redhat.com/docs/en-
US/Red_Hat_Enterprise_MRG/1.3/html/Grid_Installation_Guide/index.html
Exchanges: Topic
http://docs.redhat.com/docs/en-
US/Red_Hat_Enterprise_MRG/1.3/html/Grid_Installation_Guide/index.html
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
Enrutado simple
Direct exchange
Exchange
Unico por sistema
Routing key
Tipo del mensaje
Queue
Nombre del servicio consumidor
Cliente
Comandos
Llamadas AJAX
Eventos
Polling
Long-Polling / COMET
WebSockets
Polling
http://marakana.com/bookshelf/html5_tutorial/web_sockets.html
Long Polling
http://marakana.com/bookshelf/html5_tutorial/web_sockets.html
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
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
WebSockets (y III)
http://marakana.com/bookshelf/html5_tutorial/web_sockets.html
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
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
Gracias por vuestra atención
Braulio Megías
@bmegias
http://bmegias.wordpress.com
Top Related