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
- 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.
Algunas
consideraciones sobre el diagrama
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’
¿Por qué no son buenas para aplicaciones interactivas?
ResponderEliminar