Är Drupal och PHP mindre skalbar än andra CMS på Java eller .NET?

Blogg:
Photo by Hélio Costa.

Jag fick ett mejl från journalisten Joel Åsblom på Computer Sweden. Han skrev i våras om ett enormt uppsving för öppna publiceringsverktyg. Nu håller han på med en uppföljningsartikel om de utmaningar som finns. Han bad mig säga något om vad som ställer till med problem för PHP-baserad teknik för webbplatser med mycket stor trafik. Han undrade också vad jag har att säga om att PHP-baserade sajter gärna blir databasintensivt och att det därför skalar dåligt. Jag tänkte att mitt svar kunde intressera fler, så här kommer det…

Från: Thomas Barregren thomas@nodeone.se Till: joel.asblom@idg.se Ämne: Re: [Thomas Barregren] Computer Sweden behöver input om Drupal Datum: Tue, 29 Sep 2009 01:31:11 +0200

David Strauss inledde sin föreläsning på DrupalCamp Stockholm våren 2009 med att säga: “What is the biggest challenge in using Drupal, is to get it to scale. Not because Drupal is inherently hard to scale, but because web applications take a lot of work to scale.” Här har du ett scoop: en av Drupal-gemenskapens mest respekterade och högst placerade medlemmar säger rent ut att det är en utmaning att skala Drupal. Men svaret på dina frågor är egentligen det han säger sen. Det är inte Drupal i sig som är svår att skala, utan webbapplikationer i allmänhet. Och detta gäller oavsett om webbapplikationen är utvecklad i Java, VB.NET eller PHP.

Det finns ingen väsentlig skillnad mellan de tre språken — Java, VB.NET eller PHP — som gör att kod i det ena språket går väsentligt snabbare än i det andra. Det enda man skall tänka på är att använd PHP tillsammans med en PHP accelerator. Det finns heller ingen väsentlig skillnad mellan de tre plattformarna Java, .NET och LAMP som gör att program på den ena plattformen skalar bättre än på den andra.

Så det finns, enligt min mening, inget tekniskt skäl till att tycka att det är svårare att skala PHP-program på LAMP-plattformen än att skala Java- och VB-program på Java respektive .NET. Bevisligen skalar PHP och LAMP väldigt bra, vilket bevisas av webbplatser som Facebook, Flickr, Digg och Wikipedia som alla är skrivna i PHP och kör på LAMP. Så varför upplever trots allt vissa att PHP-program på LAMP skalar sämre?

Svenska företag har i stor utsträckning valt att bygga sin IT-infrastruktur på antingen Java eller .NET. Men de sista åren har fri programvara med öppen källkod seglat upp som ett intressant alternativ. I synnerhet inom webbområdet. Varför betala 40 till 800 tusen kronor i engångsavgift och 30-40% därav i årsavgift när det finns likvärdiga, eller till och med bättre, alternativ som t.ex. Drupal? Många företag väljer därför att bygga sina webbplatser på publiceringssystemet Drupal. Men i sin iver att spara licenskostnad tycks vissa av dem glömma bort att kompetens fortfarande kostar. Det är förvånansvärt ofta som vi blir anlitade för att städa upp efter en frilansare eller reklambyrå som har skruvat ihop något utan att tänka på prestanda eller skalbarhet.

Här kommer några exempel på större Drupal-webbplatser:

Och här kommer några svenska dito:

Med vänliga hälsningar Thomas

Från: Thomas Barregren thomas@nodeone.se Till: joel.asblom@idg.se Ämne: Re: [Thomas Barregren] Computer Sweden behöver input om Drupal Datum: Tue, 29 Sep 2009 06:10:52 +0200

Godmorgon!

Insåg att jag hade missat att svara på din fråga huruvida PHP-program är mer databasintensiva än program skrivna i andra språk (eller på andra plattformar). Vilket språk man skriver ett program, eller på vilken plattform som programmet kör, har naturligtvis ingen påverkan på hur många databasfrågor som behöver göras. Det är ju uteslutande programlogiken som avgör det.

Däremot är Drupal databasintensiv. Det är ett medvetet designval. Drupal gör det möjligt att utveckla mycket sofistikerade webbplatser i huvudsak genom att konfigurera olika typer av noder (en nod är en behållare av information, t.ex. en sida) och vyer (en vy är en databasfråga vars svar formatteras). Det gör att utveckling på Drupal går mycket snabbt och kan till stor del utföras av icke-programmerare. Till exempel utvecklade vi Sony Ericsson Labs på bara 162 timmar (av sammanlagt 426 timmar) och med bara 200 rader kod. Konfigurationen av noderna, vyerna och övriga byggstenar lagras i databasen. På så sätt finns all investerad tid i tryggt förvar. När en sida skall visas bygger Drupal ihop den i flykten med hjälp av den sparade konfigurationen. Detta medför att fler databasfrågor måste ställas än om byggblocken hade funnits i kod.

Är detta då ett problem? Nej, det är inget problem eftersom Drupal lagrar resultatet av olika beräkningar i sin cache. Genom att konfigurera Drupal att använda primärminnet som cache (med hjälp av Memcached) erhålls mycket god prestanda. Denna teknik används även utanför Drupal-världen, bland annat av YouTube, Wikipedia, SourceForge, Facebook, Digg och Twitter.

Med vänliga hälsningar Thomas</thomas@nodeone.se></thomas@nodeone.se>

Kommentarer

Skriv ny kommentar

  • Webbadresser och e-postadresser görs automatiskt till länkar.
  • Lägger till typografiska justeringar.
  • Tillåtna HTML-taggar: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Rader och stycken bryts automatiskt.
  • Du kan skriva kod med <code>...</code> (generiska) eller <?php ... ?> (markerade PHP) taggar
Innehållet i detta fält är privat och kommer inte att visas publikt.
CAPTCHA
Frågan kontrollerar om du är en människa och används för att hindra spam-robotar.
Bild-CAPTCHA
Skriv in de tecken som visas i bilden.