antonio leandro

sistemas distribuídos

Pregel: A System for Large-Scale Graph Processing

paper · Grzegorz Malewicz, Matthew H. Austern, Aart J.C. Bik, et al. ·

a tese

algoritmo de grafo é iterativo, e o mapreduce cobra o grafo inteiro em disco a cada iteração — a resposta do google não foi otimizar o framework genérico, foi construir um sistema só para grafo

o que fica

  1. Grafo grande pesa pela topologia, não pelo volume: o custo está em levar o valor de um vértice até o vizinho, e isso é comunicação, não varredura.
  2. Algoritmo de grafo é iterativo por natureza, e no MapReduce cada iteração relê e reescreve o grafo inteiro — o I/O é sempre o do grafo todo, mesmo quando o trabalho útil da rodada é mínimo.
  3. O Pregel saiu seis anos depois do MapReduce e da mesma empresa: é a admissão pública de que o framework genérico de lote tem fronteira.
  4. Trocar framework genérico por sistema dedicado é decisão de operação, não de algoritmo: você ganha uma abstração melhor e herda mais um cluster para manter.
  5. O modelo do Pregel ficou conhecido como vertex-centric e é a linhagem direta do Giraph e do GraphX.

o problema

Em 2004 o Google publicou o MapReduce e resolveu de uma vez uma classe enorme de trabalho em lote: varrer um conjunto gigante de registros independentes, agregar, escrever. Contagem de termo, inversão de índice, agregação de log. O modelo funciona porque cada registro pode ser tratado sozinho e toda a comunicação entre máquinas acontece num ponto só, o shuffle.

Grafo não se comporta assim. Num grafo a unidade que importa não é o registro, é a aresta: o valor de um vértice depende dos vizinhos, que dependem dos vizinhos deles. PageRank, caminho mínimo, componente conexa — nenhum deles termina numa passada; todos repetem o mesmo cálculo até estabilizar. Encaixar isso em MapReduce significa uma rodada por iteração, e cada rodada relê o grafo inteiro do disco, reescreve o grafo inteiro no disco e paga um shuffle completo só para levar informação de um vértice ao vizinho. O trabalho útil de uma iteração pode ser minúsculo; o custo de entrada e saída é sempre o do grafo todo. Junte a isso a escala: um grafo web ou social não cabe na memória de uma máquina, então distribuir não é escolha, é ponto de partida — e quem escreve o algoritmo acaba escrevendo também particionamento, tolerância a falha e coordenação, de novo, a cada algoritmo.

a ideia

O movimento do Pregel é trocar a abstração, não afinar a existente. Em vez de descrever o algoritmo como uma sequência de passes sobre uma lista plana de registros, o sistema expõe o grafo como a coisa que você programa. A promessa embutida no título é essa: processamento de grafo em larga escala como serviço de plataforma, com a topologia sendo cidadã de primeira classe em vez de um efeito colateral do formato dos dados.

O que isso compra é a divisão de trabalho de sempre em infraestrutura, aplicada a um domínio novo. Distribuição, particionamento, comunicação entre máquinas e recuperação de falha viram responsabilidade do sistema. O programador escreve a lógica do algoritmo e para de reescrever o encanamento. É a mesma barganha do MapReduce, feita para uma classe de problema que o MapReduce servia mal.

o que isso custou

Sistema dedicado é sistema a mais. Quem adota troca uma peça que já sabe operar por outra, com seu próprio cluster, seu próprio modo de falhar e sua própria curva de aprendizado. A conta só fecha para quem tem uma família de problemas de grafo, não um. Uma organização com um PageRank por trimestre continua melhor servida pelo lote genérico, por pior que ele seja no papel.

E adotar exige reescrever. Pipelines que já existiam em MapReduce não migram sozinhos: o algoritmo precisa ser reexpresso numa abstração diferente, com outra intuição de custo.

Aqui vale o aviso: este verbete foi escrito a partir do resumo do trabalho, não do texto completo. As limitações que os próprios autores declaram — desempenho, particionamento, o que o modelo não expressa bem — estão no paper, e são exatamente o motivo para abrir o original se você está avaliando construir algo parecido.

onde isso aparece hoje

O modelo ficou conhecido como vertex-centric, ou “think like a vertex”, e virou vocabulário: descreveu-se uma geração inteira de sistemas de grafo por semelhança ou contraste com ele. Apache Giraph nasceu como reimplementação aberta da ideia, e o GraphX chegou depois como camada de grafo sobre os RDDs do Spark — sinal de que a abstração sobreviveu à máquina que a hospedava.

O padrão maior também ficou. O Pregel é um dos primeiros casos em que o Google publica um motor especializado ao lado do motor genérico, em vez de esticar o genérico. A mesma lógica reaparece no Dataflow, que assume que streaming e lote pedem um modelo próprio em vez de uma adaptação. Quando um framework de uso geral encontra uma classe de carga que ele atende mal, a saída historicamente não foi um parâmetro novo: foi outro sistema.

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