Upload
nicola-zagari
View
1.659
Download
2
Embed Size (px)
DESCRIPTION
Padrões Arquiteturais. Padrão Estrutural. Pipes e Filtros.
Citation preview
Padrões Arquiteturais
Estruturais: Pipes e Filtros
2 Livro Texto: Pattern Oriented Software Architecture - Buschmann
2Eduardo N. F. Zagari
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.
3 Livro Texto: Pattern Oriented Software Architecture - Buschmann
3Eduardo N. F. Zagari
Exemplo
4 Livro Texto: Pattern Oriented Software Architecture - Buschmann
4Eduardo N. F. Zagari
Contexto
• Processamento de fluxo de dados (data stream)
5 Livro Texto: Pattern Oriented Software Architecture - Buschmann
5Eduardo N. F. Zagari
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
6 Livro Texto: Pattern Oriented Software Architecture - Buschmann
6Eduardo N. F. Zagari
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
7 Livro Texto: Pattern Oriented Software Architecture - Buschmann
7Eduardo N. F. Zagari
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
8 Livro Texto: Pattern Oriented Software Architecture - Buschmann
8Eduardo N. F. Zagari
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)
9 Livro Texto: Pattern Oriented Software Architecture - Buschmann
9Eduardo N. F. Zagari
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
10 Livro Texto: Pattern Oriented Software Architecture - Buschmann
10Eduardo N. F. Zagari
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
11 Livro Texto: Pattern Oriented Software Architecture - Buschmann
11Eduardo N. F. Zagari
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
12 Livro Texto: Pattern Oriented Software Architecture - Buschmann
12Eduardo N. F. Zagari
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
13 Livro Texto: Pattern Oriented Software Architecture - Buschmann
13Eduardo N. F. Zagari
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
14 Livro Texto: Pattern Oriented Software Architecture - Buschmann
14Eduardo N. F. Zagari
Cenário 1
15 Livro Texto: Pattern Oriented Software Architecture - Buschmann
15Eduardo N. F. Zagari
Cenário 2
16 Livro Texto: Pattern Oriented Software Architecture - Buschmann
16Eduardo N. F. Zagari
Cenário 3
17 Livro Texto: Pattern Oriented Software Architecture - Buschmann
17Eduardo N. F. Zagari
Cenário 4 *
18 Livro Texto: Pattern Oriented Software Architecture - Buschmann
18Eduardo N. F. Zagari
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
19 Livro Texto: Pattern Oriented Software Architecture - Buschmann
19Eduardo N. F. Zagari
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
20 Livro Texto: Pattern Oriented Software Architecture - Buschmann
20Eduardo N. F. Zagari
Variantes
• Sistemas de pipeline Tee e Join – Permite filtros com mais de uma entrada e/
ou mais de uma saída
21 Livro Texto: Pattern Oriented Software Architecture - Buschmann
21Eduardo N. F. Zagari
Usos conhecidos
• UNIX • CMS Pipelines (S.O. IBM)
22 Livro Texto: Pattern Oriented Software Architecture - Buschmann
22Eduardo N. F. Zagari
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
23 Livro Texto: Pattern Oriented Software Architecture - Buschmann
23Eduardo N. F. Zagari
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