Eu não posso comentar os outros comentários, mas eles soam bem. Eu procuraria levantar parte da carga dos servidores de arquivos mantendo seus arquivos mais comumente acessados (isto é, os mais populares) em um cache de memória, ou seja, ter um manipulador http que faça algo assim:
- Receber a solicitação de GIF
- Verifique se está na memória, se assim for, atenda ao cliente
- Se não, obtenha um dos servidores de arquivos (faça um round-robin aqui) e adicione ao cache de memória
- Devolver GIF ao cliente
Se você consegue uma máquina com uma porcaria de RAM, você está rindo, pois é bem provável que você consiga ajustar uma grande porcentagem de seus arquivos populares na memória.
E quando você saturar isso, adicione outro servidor de manipulador de imagens e faça um round-robin neles. Continue fazendo isso até que algo quebre, ou seja, taxa de transferência, escalabilidade, economia.
Eu fiz algo assim antes para um bom efeito.