+1 para arquiteturas escalonáveis da Internet.
O que eu faço é sentar e ver o que está sendo executado no servidor em questão.
Eu vou assumir por enquanto que você está rodando o linux, embora você não tenha explicitamente dito isso. O que você quer olhar é verniz. É um proxy reverso de alto desempenho e um balanceador de carga. Você pode configurá-lo seguindo os exemplos on-line aqui e deve ser fácil trabalhar.
Se você tiver dois nós de verniz de três servidores, aponte 1/3 do tráfego para cada um dos servidores, organizados como uma atribuição round-robin. Esses dois servidores precisam de endereços IP públicos exclusivos e você pode definir vários registros A no DNS para fazer o DNS de RoundRobin (RRDNS).
Se o seu serviço é extremamente importante para os negócios, e a sua última interrupção custa muito dinheiro, você pode querer defender uma rede mais resiliente e redundante. Supondo que atualmente você tenha apenas um servidor, em um IP fornecido por um fornecedor, se a interrupção anterior estiver relacionada à rede, talvez você ache que aumentar a resiliência da rede melhoraria seu tempo de atividade.
Observe também o monitoramento, verifique se você está monitorando coisas no (s) servidor (es) que podem derrubar o (s) servidor (es), dados SMART nos discos rígidos, espaço livre de troca, memória livre, livre / disco espaço. Arranje Nagios e Munin. Nagios para alertar quando as condições críticas de monitoramento forem atendidas e Munin para representar graficamente esses dados.
Você provavelmente terá que fazer algumas alterações no nível do aplicativo também. Supondo que seus aplicativos sejam baseados em sessão, você precisará de alguma maneira de lidar com as solicitações do usuário nem sempre indo para o mesmo servidor. Você poderia torná-los do lado do cliente, ou do lado do servidor e pegajoso. Você provavelmente achará que o memcached irá ajudá-lo muito aqui.
Quanto às mudanças no nível do aplicativo, você pode querer perguntar no StackOverflow, pois elas são mais código-y e menos servidor-y.