jueves, 3 de abril de 2014

Pipes and Filters

Sistema de Mensajes
 Pipes and Filters

Utilizar la arquitectura Pipes and Filters, nos ofrece una estructura de procesamiento de flujo de datos. Cada de procesamiento está encapsulado en un componente filtro y los datos son transportados mediante tubos (pipes) que están entre filtros. Cada componente tiene un conjunto de entradas (inputs) y un conjunto de salidas (outputs). Un componente lee flujo de datos en sus entradas y produce flujos de datos sobre sus salidas. La transformación interna comienza a producir salidas antes de que se consuma toda la entrada.


Invariantes
  • Los filtros deben ser entidades independientes. 
  • No deben compartir estado con otros filtros. 
  • Los filtros no conocen la identidad de sus filtros de entrada ni de salida. 
  • Pueden restringir qué debe aparecer en las entradas, o garantizar qué saldrá por sus salidas. 
  • La corrección de la salida de una red pipe-and-filter no depende (en general) del orden en el cual los filtros realizan el procesamiento incremental.
Especializaciones
  • Pipelines: Restringen la topología a una secuencia lineal
  • Pipe limitados: Restringen la cantidad de datos que puede residir sobre un pipe
  • Pipes Tipificados: Restringen que los datos en los pipes sean de un tipo bien definido
  • Sistemas Batch secuencial: Un filtro procesa todos sus datos de entrada como una entidad simple.
Ejemplos
  • Programas escritos en Unix shell
  • ps -ef | grep amsn; ls -l | more
  • Compiladores tradicionales
  • Dominios de procesamiento de señales
  • Programación Paralela
  • Programación funcional
  • Sistema distribuido
Ventajas
  • Permite comprender el comportamiento de entrada / salida de un sistema como la composición del comportamiento de los filtros individuales.
  • Soportan reutilización
  • Facilita el mantenimiento y crecimiento
  • Permiten realizar análisis de ‘deadlock’ y rendimiento
  • Soporte de ejecución concurrente
Desventajas

  • Frecuentemente tienden a una organización de procesamiento batch
  • No son buenos para aplicaciones interactivas.
  • Pueden complicarse al tener que mantener dos flujos separados pero relacionados.
  • Puede ser necesario agregar a los filtros conversión de datos de entrada y salida
  • Pérdida de performance e incremento de complejidad de los filtros.

Ejemplo:
“Capitalize”: transforma un ‘stream’ de caracteres pasando a mayúsculas y minúsculas caracteres alternativamente.
Una solución pipe-filter:
Filtro ‘Split’: divide el stream de entrada.
Filtros ‘Upper’ y ‘Lower’: manipulan cada substring resultante en forma separada.
Filtro ‘Merge’: une nuevamente los substrings transformados.
Algunas consideraciones sobre el diagrama
  •      Las relaciones de interacción están resaltadas.
  •           Las dependencias de implementación son suprimidas
  •      Claramente resalta el diseño arquitectónico


Una Representación Alternativa:


Algunas consideraciones sobre el segundo diagrama

  • Este diagrama falla para capturar la composición arquitectónica
  • Indica los módulos que están presentes en el sistema, y qué módulos se refieren a la implementación.
  • No muestra los ‘pipes’

1 comentario: