Skip to content
Latchkey

O Que É Fan-Out / Fan-In em Pipelines de CI?

Fan-out divide um estágio em muitos jobs paralelos; fan-in espera todos eles e junta os resultados. Juntos, eles permitem que o CI vá para o largo em busca de velocidade e depois estreite para um único veredito.

Fan-out/fan-in é o formato fundamental de um pipeline paralelo. É como você reduz o tempo de relógio distribuindo o trabalho entre jobs, terminando ainda assim com um único resultado agregado que serve de gate.

Fan-out

Um único ponto do pipeline se ramifica em muitos jobs independentes que rodam concorrentemente - dividindo uma suíte de testes em shards, buildando vários targets ou executando uma matrix. Cada ramo é isolado e progride em seu próprio runner.

Fan-in

Depois do trabalho paralelo, um único job depende de *todos* os jobs do fan-out e roda apenas quando eles terminam. Ele agrega as saídas - mesclando relatórios de teste, combinando coverage ou simplesmente atuando como o gate que só fica verde se todo ramo passou.

needs: collects the fan-out
jobs:
  test:
    strategy: { matrix: { shard: [1, 2, 3, 4] } }
  report:
    needs: test   # fan-in: waits for all shards

Por que usar

  • Velocidade: N shards paralelos terminam em cerca de 1/N do tempo serial.
  • Um único gate de fan-in dá um pass/fail claro para todo o estágio.
  • A agregação (coverage, relatórios) acontece em um só lugar.

Armadilhas

Fan-out multiplica os minutos faturáveis e pode inundar um pool de runners, causando enfileiramento. O job de fan-in é um ponto de sincronização - ele só é tão rápido quanto o ramo mais lento, então uma divisão desbalanceada (um shard muito mais pesado que os demais) desperdiça o paralelismo. Balanceie os shards.

Principais conclusões

  • Fan-out executa muitos jobs independentes em paralelo; fan-in junta seus resultados.
  • Ele troca mais minutos faturáveis por menos tempo de relógio.
  • O job de fan-in é um gate e um ponto de sincronização - só tão rápido quanto o ramo mais lento.
  • Balanceie os shards para que um ramo pesado não anule o paralelismo.

Guias relacionados