Armazenar imagens em cache centralmente

Armazenar imagens em cache centralmente

Aplicativo: Forneça imagens responsivas e otimizadas instantaneamente cortando/redimensionando/compactando imagens mestre

Carga atual: 10 mil solicitações por minuto, tráfego de aproximadamente 60 MBps.

Configuração atual: NginxPlus LB fica no topo. Vários servidores de aplicativos com nginx->tomcat. Em cada servidor de aplicativos, as imagens são armazenadas em cache no nginx

Problemas atuais:

  • Baixa taxa de acertos do cache, pois o cache é descentralizado, a probabilidade da mesma solicitação atingir o mesmo servidor é baixa.
  • Cache duplicado, embora isso possa ser tolerado
  • A limpeza do cache é complicada. Como o cache pode estar presente em vários servidores, para limpá-lo, ele precisa ser eliminado de todos os servidores de aplicativos

Soluções potenciais

  • Hashing consistente do Nginx Load Balancer. O problema com esta abordagem é que ela pode causar uma distribuição desigual do tráfego.

  • Introduzir uma camada intermediária de alguns servidores nginx: Uma camada de cache nginx dedicada pode ser introduzida entre LB e servidores de aplicativos. Mas digamos que eu mantenha 3 servidores nesta camada. Ainda assim, ele tem o mesmo problema de cache duplicado e dores de cabeça de limpeza, embora as magnitudes sejam menores.

  • A E/S de disco pode ser um problema no caso de nginx único

Alguém tem experiência em resolver este caso de uso? Não seja com o nginx. Sinta-se à vontade para compartilhar suas idéias.

informação relacionada