O documento descreve o padrão arquitetural Pipes e Filtros, no qual um sistema de processamento de dados é dividido em componentes filtros que processam dados de forma incremental. Os filtros são conectados em sequência através de pipes para formar um pipeline de processamento, permitindo a recombinação flexível dos filtros.
2. Pipes e Filtros
• O padrão “Pipes e Filtros” provê uma estrutura
para sistemas que processam fluxos de dados.
• Cada passo de processamento é encapsulado
em um componente Filtro.
• Dados são passados através de pipes entre
filtros adjacentes.
• Recombinando-se filtros é possível construir-se
famílias de sistemas relacionados.
2 Livro Texto: Pattern Oriented Software 2Eduardo N. F. Zagari
Architecture - Buschmann
3. Exemplo
3 Livro Texto: Pattern Oriented Software 3Eduardo N. F. Zagari
Architecture - Buschmann
4. Contexto
• Processamento de fluxo de dados (data
stream)
4 Livro Texto: Pattern Oriented Software 4Eduardo N. F. Zagari
Architecture - Buschmann
5. Problema
• Problemas na implementação de um
sistema de processamento de fluxo de
dados com um único componente:
– Sistema pode ter que ser construído por
vários desenvolvedores
– A tarefa global do sistema pode se decompor
naturalmente em vários estágios de
processamento
– Requisitos provavelmente podem mudar
5 Livro Texto: Pattern Oriented Software 5Eduardo N. F. Zagari
Architecture - Buschmann
6. Problema
• Para se projetar um sistema de processamento
de streams que seja flexível, deve-se considerar
os seguintes aspectos:
– Devem ser possíveis futuras melhorias no sistema
pela troca de passos de processamento ou pela
recombinação de passos (mesmo por usuários)
– Pequenos passos de processamento são mais fáceis
de reusar em diferentes contextos do que os
componentes maiores
– Passos de processamento não adjacentes não
compartilham informação
6 Livro Texto: Pattern Oriented Software 6Eduardo N. F. Zagari
Architecture - Buschmann
7. Problema
– Existem diferentes fontes de dados de entrada, tais
como conexões de rede ou sensores de temperatura
– Deve ser possível armazenar ou apresentar os
resultados finais de várias formas diferentes
– Armazenamento explícito de resultados
intermediários para processamento posterior em
arquivos é susceptível a erros, se feito por usuários
– Pode-se não querer desconsiderar a possibilidade de
multi-processamento dos passos
7 Livro Texto: Pattern Oriented Software 7Eduardo N. F. Zagari
Architecture - Buschmann
8. Solução
• Dividir a tarefa em vários passos de
processamento seqüenciais.
– Os passos são conectados via o fluxo de
dados
– Cada passo é implementado por um filtro
– Filtros consomem e enviam dados
INCREMENTALMENTE (paralelismo e baixa
latência)
– Entrada: fonte de dados (p.ex., arquivo texto)
– Saída: vertedouro de dados (arq, terminal etc)
8 Livro Texto: Pattern Oriented Software 8Eduardo N. F. Zagari
Architecture - Buschmann
9. Solução
– A fonte de dados, os filtros e o vertedouro de
dados são conectados seqëncialmente via
pipes
– Cada pipe implementa o fluxo de dados entre
passos de processamento adjacentes
– A seqüência de filtros combinadas pelos pipes
é chamada de pipeline de processamento
9 Livro Texto: Pattern Oriented Software 9Eduardo N. F. Zagari
Architecture - Buschmann
10. Estrutura
• Filtros são as unidades de processamento do
pipeline
– Enriquecem
– Refinam
– Transformam os dados
• A atividade do filtro pode ser disparada:
– Pelo elemento subseqüente do pipeline puxando
dados na saída do filtro
– Pelo elemento anterior empurrando novos dados de
entrada ou
– * O filtro é um loop ativo, puxando de e empurrando
abaixo o pipeline
10 Livro Texto: Pattern Oriented Software 10Eduardo N. F. Zagari
Architecture - Buschmann
11. Estrutura
• Pipes realizam a comunicação
– Entre filtros
– Entre a fonte de dados e o primeiro filtro
– Entre o último filtro e o vertedouro de dados
• Se os 2 filtros são ativos, o pipe faz o
sincronismo deles via um buffer FIFO
• Se a atividade é controlada por um deles,
o pipe pode ser implementado pela
chamada direta do ativo para o passivo
11 Livro Texto: Pattern Oriented Software 11Eduardo N. F. Zagari
Architecture - Buschmann
12. Estrutura
• Fonte de dados: entrada do sistema
– Pode ser ativa (modelo Push)
– Pode ser passiva (modelo Pull)
• Vertedouro de dados: coleta os resultados
do fim do pipeline
– Ativo: puxa os resultados do último estágio de
processamento
– Passivo: permite o último filtro empurra ou
escrever os resultados nele
12 Livro Texto: Pattern Oriented Software 12Eduardo N. F. Zagari
Architecture - Buschmann
13. Dinâmica
• 4 cenários
– 3 cenários em que os filtros usam chamadas
diretas ao componente adjacente do pipeline
• Sem componente pipe explícito
– 1 cenário onde todos os filtros são ativos
• Pipe de sincronismo
13 Livro Texto: Pattern Oriented Software 13Eduardo N. F. Zagari
Architecture - Buschmann
14. Cenário 1
14 Livro Texto: Pattern Oriented Software 14Eduardo N. F. Zagari
Architecture - Buschmann
15. Cenário 2
15 Livro Texto: Pattern Oriented Software 15Eduardo N. F. Zagari
Architecture - Buschmann
16. Cenário 3
16 Livro Texto: Pattern Oriented Software 16Eduardo N. F. Zagari
Architecture - Buschmann
17. Cenário 4 *
17 Livro Texto: Pattern Oriented Software 17Eduardo N. F. Zagari
Architecture - Buschmann
18. Implementação
1. Dividir a tarefa do sistema em uma seqüência
de estágios de processamento
• Cada estágio deve depender somente da saída de
seu predecessor
2. Definir o formato dos dados a serem passados
ao longo de cada pipe
• Formato padrão flexibilidade
3. Decidir como implementar cada conexão pipe
• Implica em definir se os filtros adjacentes são ativos
ou passivos
18 Livro Texto: Pattern Oriented Software 18Eduardo N. F. Zagari
Architecture - Buschmann
19. Implementação
4. Projetar e implementar os filtros
• Além dos pipes, baseia-se também na tarefa que
eles devem realizar
• Passivos: funções (PULL) ou procedimentos
(PUSH)
• Ativos: processos ou threads
5. Projetar o tratamento de erro
• Difícil devido a não existência de estado global
• No mínimo, deve haver detecção de erro
• UNIX usa um canal específico (stderr)
• Se um filtro “capota” Resincronização
8. Ajustar o pipeline de processamento
19 Livro Texto: Pattern Oriented Software 19Eduardo N. F. Zagari
Architecture - Buschmann
20. Variantes
• Sistemas de pipeline Tee e Join
– Permite filtros com mais de uma entrada e/
ou mais de uma saída
20 Livro Texto: Pattern Oriented Software 20Eduardo N. F. Zagari
Architecture - Buschmann
21. Usos conhecidos
• UNIX
• CMS Pipelines (S.O. IBM)
21 Livro Texto: Pattern Oriented Software 21Eduardo N. F. Zagari
Architecture - Buschmann
22. Benefícios
• Não há a necessidade de arquivos
intermediários, mas são possíveis
• Flexibilidade pela permuta de filtros
• Flexibilidade pela recombinação
• Reuso de filtros
• Rápida prototipação de pipelines
• Eficiência devido ao processamento
paralelo
22 Livro Texto: Pattern Oriented Software 22Eduardo N. F. Zagari
Architecture - Buschmann
23. Desvantagens
• Compartilhamento de informação de
estado é cara ou inflexível
• Ganho de eficiência pelo processamento
paralelo freqüentemente é uma ilusão
– Custo de transferência de dados entre filtros
– Serialização interna a alguns filtros
– Trocas de contexto
• Overhead na transformação de dados
• Tratamento de erros
23 Livro Texto: Pattern Oriented Software 23Eduardo N. F. Zagari
Architecture - Buschmann