O hardware é tão barato hoje em dia que cada vez menos pessoas chegam ao ponto em que precisam de mais de uma máquina. US $ 10.000 comprarão você:
- 16 a 32 GB de RAM;
- 2 quad core Xeons;
- matriz de discos RAID5.
Esse tipo de máquina pode atender a mais de 10.000 usuários simultâneos em um site otimizado para aplicativos que exigem muitos recursos.
Basicamente, existem duas abordagens para a escalabilidade:
- Vertical: basicamente comprando a maior máquina possível para que você não precise de mais de uma;
- Horizontal: fazendo as coisas de uma forma que se presta ao paralelismo. Necessário apenas nas aplicações mais intensivas.
Veja o StackOverflow: ele basicamente é executado em um servidor Web mais um servidor de banco de dados e faz mais de 6 milhões de acessos por mês.
Dito isto, a escalabilidade consiste em encontrar e resolver o seu afunilamento.
- Se o seu banco de dados estiver atrasando as coisas, forneça mais recursos ou use alguma forma de armazenamento em cache na memória para remover a carga;
- Se a E / S do disco for problema seu, o mesmo se aplica;
- Se você estiver ficando sem memória a ponto de causar muitas falhas de página e causar um problema de E / S de disco, adicione mais memória;
- Seu aplicativo e seus dados se prestam a particionamento entre servidores? Se assim for, essa é uma maneira de dimensionar horizontalmente;
- Se a largura de banda é um problema e você está entregando arquivos grandes, talvez um CDN seja a resposta;
- E assim por diante.
Por fim, 100 mil acessos / mês não são tão grandes. Eu suspeito que nestes dias em um site típico você precisaria ir além de 10 milhões / mês antes de você ter problemas reais, assumindo que você não faz coisas mal (por exemplo, se você não indexar suas pesquisas de banco de dados, é claro que você vai ter problemas com isso, mas eles não têm nada a ver com hits / mês).
Eu diria que a redundância é uma dor de cabeça muito maior do que a escalabilidade. As questões envolvidas em ter links redundantes, monitorar processos para falhas do sistema, ter e manter um site de DR (recuperação de desastres), lidar com as questões que envolvem (como clustering de cérebro dividido), etc. são muito mais difíceis e tediosas.