MySpace.com har nylig passert Yahoo på rangeringen over verdens mest besøkte nettsteder, og er med sine 39,5 milliarder sidevisninger per måned i en klasse for seg. Ikke bare det - nettstedet vokser med 260.000 brukere i uken og gikk fra 64 millioner brukere i februar 2006 til 90 millioner i sommer. Hvor mange brukere de har i dag kan man bare gjette, de siste tallene jeg fant var fra juni 2006.

Da har kanskje MySpace-eier Rupert Murdoch fått rett i sine spådommer om at dotcom-alderens portalmodell er død og at fremtidens nettbrukere vil bruke mesteparten av tiden på én site og ikke surfe rundt i det uendelige. Den gjennomsnittelige MySpace-brukeren tilbringer visstnok over en time på sidene...

MIX konferansen tidlig i høst presenterte MySpace litt av teknologien bak siten. I tillegg kjenner jeg godt Carl Rabeler, konsulenten som hjalp MySpace med å oppgradere fra DTS til Integration Services på de 40 serverne MySpace bruker for å tanke data inn i datavarehuset sitt.

Litt overordnet om MySpace.com: 3 internett datasentre, 2682 webservere, 650 databaseservere, 90 cacheservere, 150 mediaservere, 60 servere i datavarehuset. 3000 disker i SAN og 17,000 mb/s total nettaksess.

MySpace kjører i dag hovedsaklig ASP.NET 2.0 på alt. Siten ble opprinnelig bygd på ColdFusion, og det henger fremdeles en del sider igjen som har .cfm filekstensjonen. Men disse er i dag mappet til BlueDragon.Net - en ASP.NET HttpHandler som parser og kjører ColdFusion syntax. Alle backend cache servere er ASP.NET baserte. I forbindelse med migreringen til ASP.NET rapporterte MySpace at de kunne redusere antall servere fra 246 til 150 på ett av datasentrene.

Versjon 1 av MySpace var en enkel tolags arkitektur med 1 databaseserver og lastbalanserte webservere, slik vi oftest ser i Norge. Liten kompleksitet og lave driftsutgifter.

Da MySpace passerte 500k brukere splittet de reads og write i flere seperate databaser, og fordelte de på flere SQL Servere med enveis transactional replikering fra en master server ut på flere read-only servere. Dette er også lett å sette opp i SQL Server og flere større nettsteder i Norge bruker samme teknikk, blant annet Oslo Børs sine nettjenester.

Transactional replikering er ikke optimal for enkelte datatyper for eksempel store bildefiler, derfor splittet MySpace opp i flere seperate servere for ulike deler av tjenesten når de passerte 1 million brukere (vertikal partisjonering).

Med 2 millioner brukere flyttet MySpace fra SCSI arrays til en sentralisert SAN basert på EMC Clarion. Resultat var bedre ytelse, oppetid og feiltoleranse.

Etter 3 millioner brukere redesignet MySpace databasen med horisontal partisjonering. De brukte en enkel modell der websidene ruter brukerne inn mot ulike SQL Servere avhengig av brukerid - de med brukerid under 1 million går mot SQL Server klynge A, de med id mellom 1 og 2 million går mot B etc.. Noe data kan ikke partisjoneres, derfor går det fremdeles en del replikering mellom databaseserverne.

Med 5 millioner brukere gikk gigabit uplinks fulle og MySpace måtte bytte til flere paralelle gigabit og 10gig links. Load balancerne gikk også i taket, og MySpace måtte lastbalansere Load balancerne, ved hjelp av enkel DNS round-robin.

Med 10 millioner brukere begynte SANet å bli lite effektivt, og MySpace gikk for en skalerbar "virtual storage" løsning fra 3Par. I praksis en løsning der et man kan kombinere diskgrupper på tvers av SAN til ett logisk volum i OSet. Det gir større fleksibilitet når du trenger å repartisjonere SAN volumer.

Etter 15 millioner brukere bygde MySpace et eget caching lag basert på ASP.NET cache arkitekturen mellom webserverne og databasene. Fremdeles i dag er alle sidene på MySpace dynamiske (ikke statisk generert innhold), men for å redusere database load til et nødvendig minimum sjekker nettsidene alltid om objekter ligger i ASP.NET cache før man gjøre SQL oppslaget.

Etter 26 millioner brukere migrerte MySpace fra SQL Server 2000 til SQL Server 2005. Nye teknologier som Peer-to-Peer replikering, Database Mirroring og Table Partitionering blir forløpende implementert for å forbedre skalerbarhet.