antonio leandro

sistemas distribuídos

The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing

paper · Tyler Akidau, Robert Bradshaw, Craig Chambers, Slava Chernyak, Rafael J. Fernández-Moctezuma, Reuven Lax, Sam McVeety, Daniel Mills ·

a tese

parar de tratar fluxo infinito como lote que um dia fica completo: o sistema deve assumir que nunca saberá se viu todo o dado, e entregar ao engenheiro a escolha explícita entre correção, latência e custo

o que fica

  1. Nenhum sistema otimiza correção, latência e custo ao mesmo tempo sobre entrada não limitada — o modelo não resolve essa tensão, ele a torna uma escolha declarada.
  2. O erro de projeto é supor que um dataset infinito eventualmente fica completo; a premissa correta é que dado novo sempre chega e dado antigo pode ser retratado.
  3. Ordenar por event time e janelar por características do próprio dado viraram requisitos de quem consome, não refinamento acadêmico.
  4. A ausência de uma abstração comum é o que faz uma mesma empresa manter duas implementações do mesmo cálculo, uma em lote e outra em streaming.
  5. O trabalho se defende por experiência de produção e por semântica, não por benchmark: o argumento é sobre o que dá para expressar, não sobre quantos registros por segundo.

o problema

Processamento de dados em escala nasceu com uma premissa confortável: existe um conjunto de entrada, ele tem fim, e quando o job termina a resposta está pronta. Log da web, telemetria de app, rede de sensor — nada disso tem fim. O dado chega para sempre, chega fora de ordem, e chega com atraso arbitrário: o evento aconteceu às 14h03 no celular de alguém que estava sem sinal e entrou no seu cluster às 19h40. A pergunta “já vi tudo do intervalo das 14h?” não tem resposta. Só tem palpite.

A saída prática da indústria foi fingir que a premissa ainda valia: picotar o fluxo em lotes de uma hora, rodar o pipeline de sempre, e manter em paralelo um segundo pipeline aproximado para quem não podia esperar uma hora. Duas implementações da mesma regra de negócio, duas oportunidades de divergir, duas equipes de plantão. Enquanto isso, o consumidor do dado ficou mais exigente: quer agrupar por tempo do evento e não por tempo de chegada, quer janela definida por característica do próprio dado — a sessão daquele usuário, que dura o que durar — e quer a resposta mais rápido a cada trimestre. Os autores são explícitos quanto ao limite: para esse tipo de entrada, ninguém otimiza ao mesmo tempo correção, latência e custo.

a ideia

O movimento central é uma desistência. Em vez de tentar domar o fluxo infinito até que ele vire um poço finito de informação que um dia se completa, o modelo assume de saída que a completude nunca chega. Não se sabe se todo o dado do intervalo já apareceu; sabe-se apenas que virá mais, e que parte do que já foi contado pode ser retratada depois.

Assumida essa premissa, a pergunta de engenharia muda. Deixa de ser “como espero até ter certeza” e passa a ser “que resposta eu emito agora, com que grau de correção, a que preço, e como a corrijo quando o resto chegar”. As três dimensões — correção, latência, custo — viram eixos de um plano em que o engenheiro escolhe um ponto, em vez de virem embutidas na escolha entre o sistema em lote e o sistema de streaming. O papel do modelo é oferecer abstrações que tornem essa escolha explícita e ajustável, sem trocar de sistema e sem reescrever a lógica. Resultado nunca é final: é o melhor que se tem até agora.

o que isso custou

O modelo não resolve a tensão, ele a expõe. Isso é honesto e é caro: a decisão que antes vinha de graça na arquitetura passa a ser responsabilidade de quem escreve o pipeline, caso a caso. Não existe configuração padrão que sirva — o próprio argumento do paper é que a otimização simultânea nas três dimensões é impossível, então alguém precisa dizer o que abre mão.

O segundo custo é sistêmico. Se a resposta pode ser revista, tudo o que está a jusante precisa saber lidar com revisão: o banco que recebe, o dashboard que mostra, o relatório que já foi enviado para o cliente. Um pipeline com semântica de resultado revisável descarregando em um consumidor que só sabe somar é uma inconsistência esperando data. E vale registrar o que este verbete não cobre: ele foi escrito a partir do resumo do trabalho, então não descreve as primitivas concretas do modelo nem os casos de produção que o validaram.

onde isso aparece hoje

O vocabulário venceu. Event time contra processing time, janela por sessão, resultado que se refina em vez de nascer pronto — isso hoje é conversa padrão de quem opera pipeline, e não era em 2015. O modelo virou o Apache Beam e o Google Cloud Dataflow, e a mesma semântica foi absorvida pelos motores de streaming abertos que ganharam a década seguinte.

Vale ler o trabalho junto com o que ele contradiz e com o que ele pressupõe: o mundo em lote de MapReduce, a premissa de log durável e reordenável de Kafka, e o desenho de plataformas de streaming que vieram depois, como em Kora e Real-time Data Infrastructure at Uber.

lido pelo resumo por pipeline de llm, revisado por antonio leandro antes de publicar ·