O modelo Dataflow: uma abordagem prática para equilibrar correção, latência e custo no processamento de dados ilimitados e fora de ordem em escala massiva
Título original: The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing
PublicadoProceedings of the VLDB Endowment
Saiu em uma revista, congresso ou livro, que normalmente avaliam o trabalho antes de aceitar. Mesmo assim, um único estudo nunca é a palavra final.
Resumo
Este paper não tem resumo disponível.
Análise de pesquisa
Escrita pelo Kurz, não pelos autores do paper. O resumo acima é dos próprios autores.
- Última revisão
- Versão
- 1.0
Visão geral
Muitos dados úteis nunca terminam: logs web, uso de celulares, sensores. Eles também chegam fora de ordem, porque telefones ficam offline e redes são lentas, então o momento em que um evento aconteceu (tempo de evento) é diferente do momento em que o sistema o vê (tempo de processamento). A prática mais antiga tratava esses dados como um lote que um dia estaria completo, ou usava um motor de fluxo rápido, mas aproximado, e segundo os autores as equipes acabavam com sistemas distintos para cada necessidade.
Este artigo do VLDB 2015, do Google, propõe o modelo Dataflow, uma forma de escrever essas computações que abre mão da ideia de completude e deixa quem programa escolher um ponto entre correção, latência e custo. É o modelo por trás do Google Cloud Dataflow e de seu SDK de código aberto, que depois virou o Apache Beam.
Vale conhecer antes: processamento em lote no estilo MapReduce, a diferença entre tempo de evento e tempo de processamento, e o que é uma janela (uma fatia finita de um fluxo, como os eventos de uma sessão ou de um minuto).
Contribuição
O modelo faz quatro perguntas a cada pipeline:
- O quê é calculado (as transformações e agregações).
- Onde no tempo de evento (janelas, incluindo janelas que não se alinham entre chaves, como sessões por usuário).
- Quando no tempo de processamento os resultados são produzidos (gatilhos, guiados por watermarks, contagens ou temporizadores).
- Como os resultados posteriores se relacionam com os anteriores (acumulação: descartar, acumular, ou acumular e retratar).
Em torno disso o artigo oferece uma API de janelas com janelas não alinhadas no tempo de evento, um modelo declarativo de gatilhos, suporte a atualizações e retratações e uma lista de princípios de projeto. Seu ponto de vista declarado é que motores em lote, em micro-lote e em fluxo podem dar as mesmas respostas corretas, e a escolha entre eles deve se reduzir a latência e custo.
Metodologia
O artigo é de projeto e semântica. Ele constrói o modelo com um exemplo contínuo, somar valores inteiros por chave com várias escolhas de janela, gatilho e acumulação, e mostra em figuras a saída de cada escolha sobre os mesmos dados de exemplo. Define o watermark como um limite inferior, muitas vezes heurístico, para os tempos de evento que ainda serão vistos.
A validação é por experiência e não por benchmark. O modelo foi implementado no FlumeJava com o MillWheel como motor de fluxo, com uma reimplementação externa para o Cloud Dataflow, e os autores descrevem como pipelines reais do Google (cobrança, estatísticas, detecção de abuso, recomendações) o moldaram.
Resultados
Estes são os resultados relatados pelos autores, e são qualitativos.
- Watermarks sozinhos são um sinal de completude ruim. Um watermark heurístico pode deixar passar dados atrasados, e um lento, atrasado por retardatários, segura todos os resultados. Uma equipe de cobrança teve problemas com o atraso do watermark causado por retardatários, e uma equipe sem atualizações e retratações saiu da plataforma para construir sua própria solução, que acabou parecida com o modelo descrito.
- Gatilhos permitem que os mesmos dados produzam saídas diferentes sem mudar a computação. Pipelines de estatísticas e de detecção de abuso ficam satisfeitos com um gatilho de watermark ou de watermark por percentil, porque uma resposta quase completa mais cedo vale mais que uma resposta perfeita mais tarde.
- O lote é tratado como um caso especial: ideias como encerrar antecipadamente um job longo com base no progresso viram um gatilho comum.
- Boa parte do código de janelas e gatilhos é compartilhada pelas implementações de lote e de fluxo.
Análise crítica
As ideias foram influentes, e muitos motores de fluxo de código aberto adotaram conceitos parecidos. Isso é parte do motivo para ler com algum distanciamento.
- Sem medições. O artigo não relata latência, vazão nem custo, e os detalhes de implementação ficam para artigos anteriores. A afirmação de que o modelo permite ajustar custo, latência e correção é defendida por exemplos, não demonstrada com dados.
- Autores e sistema têm o mesmo dono. As experiências vêm de equipes e produtos do Google, e o artigo também apresenta um serviço comercial. A evidência independente vem da adoção posterior fora do artigo.
- Watermarks continuam sendo heurísticas. O artigo admite que a maioria dos watermarks reais não pode ser exata. O modelo oferece ferramentas para lidar com dados atrasados (atraso permitido, retratações), mas a escolha do gatilho fica com quem programa e é fácil de errar.
- Custo das retratações. Emitir retratações e refinamentos empurra complexidade para a etapa seguinte, já que os consumidores precisam tratar atualizações, e o artigo não quantifica o estado mantido para sustentá-las.
- Declaração de princípio. Afirmações como "o futuro do processamento de dados são os dados ilimitados" são opiniões dos autores.
Pesquisas futuras
- Medir o custo de estado, gatilhos e retratações sob carga real, e comparar motores que implementam o modelo.
- Estimativa de watermark melhor, possivelmente adaptativa, e orientação para escolher gatilhos e atraso permitido.
- Questões de exatamente-uma-vez e de consistência em destinos que não aceitam retratações.
- Um relato mais profundo do runtime compartilhado de lote e fluxo, que os autores dizem merecer uma análise própria.
Discussão · 0
Entre para participar da discussãoNenhum post ainda. Seja o primeiro a iniciar a discussão.