Proposta de site feita pela Genesis Innovation · conteúdo do LinkedIn de Daniel Santos

Pular para o conteúdo
Daniel Santos

Wiki Qualidade, CI/CD e custo

Otimização de custo de pipelines

Custo é máquina × tempo. Ler menos dado, usar o compute certo e não deixar nada ligado à toa resolve a maior parte da conta.

No Databricks, a conta é o preço da máquina na nuvem mais as DBUs (*Databricks Units*) consumidas por hora, que variam com o tipo de compute. Simplificando: custo ≈ número de máquinas × horas ligadas × preço por hora. Toda otimização mexe em um desses três.

Ler menos

  • Filtro que pula arquivo: partição ou clustering pela coluna mais filtrada, e o filtro escrito de um jeito que o otimizador consiga empurrar (sem função em volta da coluna).
  • Colunas: select só do que vai ser usado; Parquet/Delta são colunares.
  • Incremental em vez de completo: processar só o que chegou desde a última carga (Auto Loader, Change Data Feed, MERGE), não a tabela inteira toda noite.
  • Arquivo do tamanho certo: OPTIMIZE contra arquivos pequenos.

Rodar no compute certo

  • Job em job compute ou serverless, nunca no cluster interativo de alguém.
  • Auto termination curto nos interativos.
  • Spot nos workers de jobs que toleram reinício.
  • Tamanho medido, não chutado: dobrar os workers só ajuda até o trabalho deixar de ser paralelo.

Por que "mais máquina" nem sempre é mais caro, nem mais rápido

Se o trabalho é bem paralelo, o dobro de máquinas termina na metade do tempo e custa o mesmo. A parte que não paraleliza (driver, inicialização, uma partição enviesada) não encolhe, e a partir dela cada máquina a mais é custo puro.

PythonSaída conferida rodando Python 3 no teste do site.
def estimar(workers, horas_paralelas=8.0, horas_fixas=0.25, preco_hora_no=1.0):
    tempo = horas_fixas + horas_paralelas / workers
    custo = (workers + 1) * tempo * preco_hora_no   # +1: o driver
    return round(tempo, 2), round(custo, 2)

for w in (2, 4, 8, 16, 32):
    print(w, estimar(w))

Saída (conferida)

2 (4.25, 12.75)
4 (2.25, 11.25)
8 (1.25, 11.25)
16 (0.75, 12.75)
32 (0.5, 16.5)

É um modelo de brinquedo, com preço fictício de 1 unidade por máquina-hora, e mostra a forma da curva: o tempo cai cada vez menos, e o custo, depois de um ponto, sobe. O simulador da página inicial deixa mexer nesses números.

  • Tagueie clusters e jobs (equipe, projeto): sem saber quem gasta, não há como reduzir.
  • As tabelas de sistema do Databricks (system.billing.usage) mostram o consumo por job, com SQL.

Fontes

Conhecimento compartilhado pela Genesis Innovation.