Vamos começar do começo:
we currently have intel xeon quad core 2.4ghz with 4gb of ram.
Isso possivelmente é o culpado aqui. 4gb de RAM é uma piada para um quad core, especialmente se lidar com milhares de pedidos paralelos. 4096mb de RAM em 2000 pedidos (menor definição de milhares) deixa 2mb de RAM por solicitação (ignorando todo o resto).
Você definitivamente não tem um problema no MySQL SOMENTE. O principal problema é que você precisa de uma infra-estrutura completa que permita gerenciar milhares de solicitações de doswload por segundo (ou precisar de alguém esclarecendo seu post), o que significa muita banda de rede, muita largura de banda IO e um servidor com muito mais RAM do que - desculpe - uma estação de trabalho barata e desatualizada (bem assim - minha estação de trabalho de desenvolvedor tinha 4 GB aproximadamente há 3 anos, recentemente passando para 8 GB). Você também precisará de um subsistema IO para lidar com a carga, o que possivelmente significa muitos e muitos discos em um bom controlador RAID de hardware (esqueça o software aqui - você quer algo com mais recursos que o seu software raid).
-
Balanceamento de carga HTTP: facilmente dable, seja em software ou em hardware (a F5 tem algum hardware para isso). Dependendo da sua programação (sessões), você pode precisar de sessões fixas para que o mesmo cliente seja novamente colocado na mesma caixa.
-
O primeiro passo seria separar os arquivos de download do site real (sdomain / subdomain separado) e no próximo processo, convertendo-os em servidores separados. O banco de dados MySQL (bem, o banco de dados - isso não é específico do MySQL) também pode ir para um servidor separado.
-
2000 solicitações por segundo não são algo que precisa de vários servidores, a menos que as solicitações sejam complexas, o que elas provavelmente não são. A principal limitação desse desempenho é provavelmente o lado da OI. No seu caso eu aposto que você liga a RAM de 4GB com um subsistema de disco de baixo nível. Para dar uma idéia de como um servidor db pode gostar - meus próprios bancos de dados principais (armazenamento de dados financeiros) tem cerca de 10 discos de alta velocidade (Velociraptors, 10k RPM) para garantir que o banco de dados (no meu caso um SQL Server) não transformar-se no gargalo. Eu ainda tenho problemas de desempenho no lado do IO ... então vou mover algumas coisas para o SSD agora. Tecnicamente, a menos que esteja fazendo apenas o rporting na memória (o que é muito improvável com o seu barramento de 4 GB compartilhado para configuração de serviço), o subsistema de E / S é a principal limitação para bancos de dados.
No final, muito depende da sua programação. Você não encontrará uma resposta decente - isso exige muito planejamento, olhando para o seu código.