Está en la página 1de 6

Patron Pipes and Filters

Contexto y problema
 Una aplicación debe realizar diversas tareas de complejidad variable sobre la
información que procesa. Un método sencillo pero inflexible de implementar
una aplicación es realizar este procesamiento como un módulo monolítico. Sin
embargo, este método probablemente reducirá las posibilidades de
refactorización del código
Solución
La solución propone desglosar el procesamiento en un conjunto de componentes o filtros
independientes, que cada uno realice una tarea. Al estandarizar el formato de los datos que
recibe y envía cada componente , estos filtros se pueden combinar en una canalización. Esto
contribuye a evitar la duplicación de código y facilita la eliminación, la sustitución o la
integración de componentes adicionales en caso de que cambien los requisitos de
procesamiento.
Los filtros que forman una canalización se pueden ejecutar en equipos diferentes, de forma
que se pueden escalar de manera independiente y aprovechar la elasticidad que proporcionan
muchos entornos de nube.
Un filtro que es computacionalmente intensivo puede ejecutarse en hardware de alto
rendimiento, mientras que otros filtros menos exigentes se pueden hospedar en hardware
básico menos costoso
Si la entrada y la salida de un filtro se estructuran como un flujo, se puede realizar el
procesamiento de cada filtro en paralelo. El primer filtro de la canalización puede iniciar su
trabajo y generar sus resultados, que se pasan directamente al filtro siguiente de la secuencia
antes de que el primer filtro haya completado su trabajo.
Consideración para implementación
 Complejidad. La mayor flexibilidad que proporciona este patrón también puede
presentar complejidad, especialmente si los filtros de una canalización se
distribuyen entre diferentes servidores.
 Fiabilidad. Use una infraestructura que garantice que el flujo de datos entre los
filtros de una canalización no se pierda.
 Idempotencia. Si se produce un error en un filtro de una canalización después de
recibir un mensaje y el trabajo se vuelve a programar para otra instancia del filtro,
puede que parte del trabajo ya se haya completado. Si este trabajo actualiza algún
aspecto del estado global (por ejemplo, la información almacenada en una base de
datos), se podría repetir la misma actualización.
 Mensajes repetidos. Si se produce un error en un filtro de una canalización después
de publicarse un mensaje en la siguiente fase de esta, podría ejecutarse otra
instancia del filtro y publicarse una copia del mismo mensaje en la canalización
Cuándo usar este patrón

 El procesamiento que requiera una aplicación se pueda desglosar fácilmente


en un conjunto de pasos independientes.
 Se requiere flexibilidad para permitir la reordenación de los pasos de
procesamiento que realiza una aplicación o la funcionalidad para agregar y
quitar pasos.
 El sistema puede beneficiarse de la distribución de los pasos de
procesamiento entre diferentes servidores.
Ejemplo
 Puede usar una secuencia de colas de mensajes para proporcionar la
infraestructura necesaria para implementar una canalización. Una cola de
mensajes inicial recibe mensajes no procesados. Un componente que se
implementa como una tarea de filtro escucha un mensaje en esta cola,
realiza su trabajo y, a continuación, publica el mensaje transformado en la
cola siguiente de la secuencia. Otra tarea de filtro puede escuchar mensajes
en esta cola, procesarlos, publicar los resultados en otra cola, y así
sucesivamente hasta que los datos completamente transformados aparezcan
en el mensaje final de la cola. En la ilustración siguiente se muestra cómo
implementar una canalización mediante colas de mensajes.

También podría gustarte