Noen ideer for å unngå kapasitetsproblemer:
Vurdér å kutte Apache og bruke NodeJS. En node-server er lynrask og kan kjøre nærmest ubegrensa antall tilkoblinger asynkront, altså uten trafikkork.
http://en.wikipedia.org/wiki/Node.js
Lager du selve applikasjonen stateless (lagrer ikke sessions, bruker web tokens på ulike måter) vil du enklere kunne spre belastningen på så mange servere du vil (load balancing) og fyre opp nye cloud-servere ved økt behov.
Kanskje du kan bli inspirert av Facebooks asynkrone MySQL-klient som er åpen kildekode, og gjør de i stand til å håndtere verdens største MySQL-installasjon:
http://www.percona.com/live/mysql-c...chronous-mysql-how-facebook-queries-databases.
Selv om node kan brukes som en webserver er det ikke noen god ide å bygge en vanlig web-applikasjon i Node for å oppnå bedre ytelse. Den er anveldelig til veldig mye, men det er ikke en erstatter for niginx, apache eller lighttpd. Webserveren er så og si aldri flaskehalsen heller. Det vil bare skape flere problemer enn det løser.
Hvis mesteparten av trafikken din er anonym kan du bare legge Varnish foran og så er du på lang vei sikra.
Hvis ikke så blir det verre. Nøkkelen til skalering er å bygge med distibuerbare teknologier, altså ting som er designet for å kunne kjøre på flere maskiner samtidig, kjent som horisontal skalering.
Webservere er distribuerbare, memcached er distribuerbart, men de fleste sql databasene er ikke det, og byr dermed på mest hodebry av alle komponentene in stacken. Du kan kjøre master-master repliklering, men da bør du være veldig kyndig med databasen du bruker, og du vil sansynligvis ende opp med å måtte route spørringer i appliksjonen din. Uten at jeg kan si sikkert hvorfor altinn kræsjet, så er det nærliggende å tro at det var noe slikt som skjedde. Et datalager som ikke skalerte effektivt.
Så hvis du vet, eller har svært god grunn til å tro at du vil få en såpass stor mengde trafikk at en enkelt databaseserver ikke vil holde, typisk flere tusen aktive innloggede brukere, så kan du se på alternative databaseteknologier. Hvis du ikke er helt sikker, så bare bruk "vanlige" databaser, og ta sorgen med migrering hvis og når du må. Da har du forhåpentligvis råd til hjelp også.
Hvis du alikevel velger å ta sorgen nå og vil bygge noe helt distribuerbart, så er MonogDB lett å skalere og jobbe med hvis du føler deg trygg med å jobbe i NoSQL verdenen. Et annet alternativ er NuoDB, som skal være en distribuerbar sql database. Jeg titta på denne i fjor, men da var den i min mening ikke klar til produksjon.
Andre tips er bruk caching(!) og memcached, profiler applikasjonen din for å finne flaskehalser, og kjør alltid databaser på ssd disker. Jo raskere serveren kan behandle en request, desto flere klarer den å behandle.
Lykke til!