Mostrando las entradas con la etiqueta Arquitectura. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Arquitectura. Mostrar todas las entradas

domingo, 16 de julio de 2017

El patrón arquitectónico Event-Driver

Leyendo el libro, "Software Architecture Patterns" les dejo este pequeño resumen:

El patrón arquitectónico Event-Driver se utiliza para crear arquitecturas escalables, se puede utilizar  en grandes aplicaciones como en pequeñas.

Este patrón arquitectónico tiene 2 topologías, el mediador y el broker (corredor, como es una fea traducción dejo su nombre en ingles).

La topología del mediador se utiliza comúnmente cuando se necesita orquestar múltiples pasos dentro de un evento a través de un mediador central, mientras que la topología de broker se utiliza cuando se desea encadenar sucesos sin el uso de un mediador central. Debido a que las características de la arquitectura y las estrategias de implementación difieren entre estas dos topologías, es importante entender cada una de ellas para saber cuál es la más adecuada para cada  situación particular.



La topología del mediador es útil para eventos que tienen varios pasos y requieren algún nivel de orquestación para procesar el evento.

Hay cuatro tipos principales de componentes de arquitectura dentro de la topología del mediador: colas de eventos, un mediador de eventos, canales de eventos y procesadores de eventos. El flujo de eventos comienza con un cliente que envía un evento a una cola de eventos, que se utiliza para transportar el evento al mediador de eventos. El mediador de eventos recibe el evento inicial y orquesta dicho evento enviando eventos asíncronos adicionales a los canales de eventos para ejecutar cada paso del proceso. Los procesadores de eventos, que escuchan en los canales de eventos, reciben el evento del mediador de eventos y ejecutan lógica empresarial específica para procesar el evento.

La implementación más simple y más común del mediador de eventos es a través de frameworks open source como Spring Integration, Apache Camel o Mule ESB. Los flujos de eventos en estos frameworks se implementan típicamente a través de código Java o un DSL (lenguaje específico de dominio). Para una mediación y una orquestación más sofisticadas, puede utilizar BPEL (lenguaje de ejecución de procesos empresariales) junto con un motor BPEL open source como Apache ODE. BPEL es un lenguaje XML estándar que describe los datos y los pasos necesarios para procesar un evento inicial. Para aplicaciones muy grandes que requieren una orquestación mucho más sofisticada (incluyendo pasos que involucran interacciones humanas), puede implementar el mediador de eventos utilizando un gestor de procesos empresariales (BPM) como jBPM.


La topología broker se diferencia de mediador porque no hay un mediador central y único, sino que el flujo de eventos esta distribuido a través de los componentes del procesador de eventos de una manera similar a una cadena a través de un agente de mensajes ligero (por ejemplo, ActiveMQ, HornetQ, etc.). Esta topología es útil cuando se tiene un flujo de procesamiento de eventos relativamente simple y no desea (o necesita) orquestación de eventos centrales.

Hay dos tipos principales de componentes de arquitectura dentro de la topología de intermediario: un componente de broker y un componente de procesador de sucesos. El componente de broker puede centralizarse o federarse y contiene todos los canales de eventos que se utilizan en el flujo de eventos.

El patrón de arquitectura event-driver es un patrón relativamente complejo de implementar, principalmente debido a su naturaleza asincrónica distribuida. Al implementar este patrón, debe abordar varios problemas de arquitectura distribuida, como la disponibilidad de procesos remotos, la falta de capacidad de respuesta y la lógica de reconexión de intermediarios en caso de un fallo del intermediario o mediador.

Una consideración a tener en cuenta al elegir este patrón de arquitectura es la falta de transacciones atómicas para un solo proceso de negocio. Debido a que los componentes del procesador de eventos están altamente disociados y distribuidos, es muy difícil mantener una unidad transaccional de trabajo a través de ellos. Por esta razón, al diseñar su aplicación utilizando este patrón, debe pensar continuamente sobre qué eventos pueden y no pueden ejecutarse de forma independiente y planificar la granularidad de los procesadores de sucesos en consecuencia. Si descubre que necesita dividir una sola unidad de trabajo en los procesadores de eventos, es decir, si utiliza procesadores independientes para algo que debería ser una transacción indivisa, probablemente no sea el patrón adecuado para su aplicación.

Dejo link: http://radar.oreilly.com/2015/02/variations-in-event-driven-architecture.html

sábado, 3 de junio de 2017

Realm. un sitio donde publican buenos cursos.



Quiero compartir este sitio, donde publican buenos cursos que son bastantes teóricos.

Hay de todos los temas, pero los temas más importantes:

  • Android  
  • Apple  
  • Javascript  
  • Xamarin  
  • Architecture

Y encontré muy buenos cursos sobre programación funcional.

Dejo link: http://news.realm.io/news

lunes, 20 de junio de 2016

Que es la arquitectura de software? y porque es tan importante?


Que es la arquitectura de software?

Existen muchas definiciones, pero mucha basta con chequear el conjunto de definiciones que publica el sei (Instituto de ingeniería de software) : http://www.sei.cmu.edu/architecture/start/glossary/community.cfm

Yo tengo una definición personal, la pueden criticar pero no van a poder negar que es simple: La arquitectura de software son las decisiones que tomamos para satisfacer los requerimientos no funcionales (o atributos de calidad)

Hablo de requerimientos no funcionales o atributos de calidad, que sería eso? Bueno, son requerimientos que no describen una funcionalidad, sino que definen atributos para medir la calidad. Veamos un ejemplo:

  • La aplicación no debe demorar más de 50 segundos en listar las ordenes diarias procesadas. 
  • Debe permitir que solo un usuario con permisos pueda autorizar un pedido.
  • Un usuario novato debe ser capaz de crear un pedido en 1 hora. 
  • Debe permitir agregar un campo nuevo a la pantalla en menos de 1 día. 

Como se puede ver los requerimientos no funcionales necesitan decisiones muy importantes para poder satisfacerlos. Las cuales son muy pero muy difícil cambiar luego de haberlas tomado. Por lo tanto es muy importante analizar los requerimientos no funcionales y definir la arquitectura y además documentarla.

Que quede muy claro, olvidarse un requerimiento no funcional puede ser critico y podemos perder un proyecto o atrasarnos mucho. Es decir podemos perder mucho dinero!! Por lo tanto no tomarse el tiempo de analizar la arquitectura es una irresponsabilidad.

Una buena practica es hacer un pequeño cuadro en el cual se listan los requerimientos no funcionales y las decisiones que tomamos para solucionarlos.

Además existe un proceso de desarrollo de arquitectura de software que debe ser respetado:

  • Analizar requerimientos, puff, tenemos que leer todos los requerimientos y detectar los requerimientos no funcionales que muchas veces se ocultan entre los requerimientos funcionales. Luego de encontrarlos debemos documentarlos y checkearlos con los usuarios. 
  • Diseño: Debemos diseñar la solución. 
  • Documentar: Debemos documentar la solución y luego debemos ver si es coherente, además si se entiende. Para esto se puede recurrir a las revisiones por pares. 
  • Evaluación: Esto se va ir haciendo a medida que se diseña y se documenta. A la vez juega un rol importante las revisiones por pares. 
  • Implementación: A trabajar! Pico, pala, sudor, un poco de inspiración y suerte. Debemos programar todo lo que diseñamos, y si algo falla o no se puede implementar volver al inicio de la lista :P 

Como se puede ver el rol de arquitecto de software no es fácil y necesita que los desarrolladores, funcionales y testers, lo ayuden constantemente.


miércoles, 15 de agosto de 2012

The Architecture of Open Source Applications




















The Architecture of Open Source Applications es un blog que se realizo a partir de 2 libros; que muestran arquitecturas de proyectos open source muy exitosos; la verdad que buena idea!. Con esto aprendemos de aciertos y de grandes aciertos! Entre los proyectos que se describen en estos 2 libros puedo citar: Eclipse, Git, Asterisk, Mercurial, Moodle, Nginx, etc...

A raíz de estos dos libros se creo un blog que es para promocionarlos pero de igual manera es interesante; espero que siga creciendo.

Dejo el link:
http://www.aosabook.org/blog/


domingo, 8 de noviembre de 2009

¿Quién necesita un arquitecto?

Como ya dije antes dos ideas es una pagina web muy buena, mezcla lo técnico con lo metodológico de una forma muy buena. Hoy quiero aconsejarles que lean este articulo :


Describe el rol de un arquitecto de software.