Translate

jueves, 24 de julio de 2014

Parte 1 - Introducción y objetivos



Indice

Parte 1 - Introducción y objetivos 
Parte 2 - Introducción a RabbitMQ
Parte 3 - Entorno de desarrollo utilizado
Parte 4 - Descripción técnica del servicio 
Parte 5 - Caso de uso (Demo)  




Código del ejemplo

https://github.com/davsuapas/QueueService



Introducción


Cada vez más en el mundo de software y más concretamente el mundo de software empresarial, se necesitan patrones que permiten conectar diferentes plataformas heterogéneas, ya no solo entre diferentes compañías, sino entre diferentes productos de la misma compañía. Un ejemplo sería la necesidad de comunicar los procesos de negocios de productos tan heterogéneos como son: un sistema e-commerce y los procesos de negocio del ERP. Por no decir, que la incorporación de los ERP en la nube provoca que estos mismos procesos sean atacados masivamente desde cualquier dispositivo, (anteriormente impensable), como aplicaciones móviles, almacenes inteligentes, etc.

Esto provoca que el software lo tengamos que imaginar como un conjunto de flujos de procesos que no se conocen (desacoplados), y que para comunicarse entre ellos, más que una pila de llamadas, utilicen mensajes que permitan pensar en entrega de datos no bloqueantes, utilizando mecanismos de publicación y subscripción a través de colas. Esto permite, no solo de disponer de procesos desacoplados, sino que permite una escalabilidad mayor, ya que una de las cualidades de estos mensajes es que son asíncronos y existe una separación total de los procesos que envían el mensaje y los procesos que lo reciben.

En esta misma línea el factor de escalabilidad es crítico, pensemos que con la llegada de internet, ya no se puede pensar en pequeño, recientemente el termino big data está impresionando, en un mundo globalizado, todo es grande. Cuando empezamos a diseñar una aplicación, hoy en día, tenemos casi que pensar en diseñar arquitecturas que en poco tiempo, nos permitan escalar de una forma exponencial. Pensemos en Facebook, su curva de crecimiento ha sido exponencial en muy poco tiempo. Si sus ingenieros no hubieran pensado de esta forma, seguramente Facebook siendo una gran idea, hubiera desaparecido. El cliente cada vez es más sabio respecto a las tecnologías, como consecuencia, más exigente. Como decía el dramaturgo Friedrich Durrrenmat, “el mundo no ha cambiado por la política, sino por la tecnología”.

El ejemplo  que voy a desarrollar puede servir como base para crear un servicio de procesos de alto rendimiento que funcionen como un procesador de lógica de negocio desatendido que se encuentre disponible 24 horas al día

Objetivos del ejemplo


  • El servicio debe ser independiente del host (Windows services) donde va a ser alojado.
  • Debe ser fácilmente configurable a través de un fichero xml de configuración.
  • La arquitectura debe ser modular para sustituir fácilmente diferentes partes del servicio.
  • Debe ser multi-conexión a diferentes servidores de colas.
  • Los procesos de negocio deben ser activados por mensajes de un servidor de colas.
  • Se deben poder ejecutar diferentes procesos de negocio independientes unos de otros.
  • Los procesos de negocio deben ser independientes del servicio de procesos. De tal forma, que deben ser descubiertos automáticamente por el servicio.
  • El servicio debe gestionar eficientemente los mensajes sin sobrecargar el servidor de colas, a través del patrón publicación/subscripción.
  • Los procesos deben ejecutarse de forma paralela aprovechando eficientemente los núcleos de la máquina.
  • La escalabilidad no solo deber ser vertical sino también horizontal.
  • El servicio debe ser tolerante a fallos.
  • El servicio debe poseer características de cierre ordenado.


Parte 2 - Introducción a RabbitMQ

No hay comentarios:

Publicar un comentario