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ê 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:
Apenas use Upload.sum(:filesize).to_i + OptimizedImage.sum(:filesize).to_i para determinar uploads_used_bytes como fazemos para lojas externas.
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.
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.