Cálculo de espaço em disco mais rápido para instâncias de alta carga de upload

O comando ‘du’, usado para recuperar o espaço em disco usado por uploads, estava causando problemas de desempenho no meu painel de administração. Sim, temos MUITOS uploads de imagens. Em vez de desativá-lo completamente (afinal, temos o painel grafana/prometheus), decidi substituí-lo por uma aproximação muito aproximada e muito mais rápida usando ‘df’. Essa alteração é, claro, selecionável pelo administrador, sendo o padrão ‘du’.

Enviei um PR para essa alteração. É o meu primeiro PR, então, por favor, sejam gentis comigo :))

Você pode ver o PR aqui:

Você tem uma ideia aproximada de quanto tempo o du estava levando para você? Eu não estou muito inclinado a essa abordagem para resolver o problema de desempenho e acho que existem duas alternativas:

  1. Apenas use Upload.sum(:filesize).to_i + OptimizedImage.sum(:filesize).to_i para determinar uploads_used_bytes como fazemos para lojas externas.
  2. Introduza um trabalho em segundo plano que recalcula periodicamente os bytes usados por uploads e os armazene em cache no Redis.

Pessoalmente, estou mais inclinado a (1), pois é uma solução muito mais simples. Perdemos alguma precisão, mas não precisamos de 100% de precisão aqui. Ainda assim, será muito melhor do que a aproximação que obtemos de df.

2 curtidas

Obrigado pelo seu feedback.

du levava mais de um minuto no HDD e com SSD leva cerca de 20 segundos.

Meu raciocínio é que, se você tem uma instância dependente de uploads como a nossa, você já tem uma partição dedicada para uploads de qualquer maneira.

Mas sim, sua solução nº 1 parece mais elegante. Vou analisá-la e enviar um PR modificado.

PR modificado está aqui:

Obrigado pela sua consideração.

1 curtida