Jag har ju lovat ett inlägg!

Jag har lovat att skriva ett inlägg ett par dagar nu, men jag tar mig aldrig riktigt för att skriva, inte för att jag inte tycker att det är roligt utan mer för att jag har så jäkla mycket att göra på jobbet. Det är mycket på gång samtidigt och jag trivs som fisken i vattnet, att ge upp studierna för att börja jobba igen visar sig såhär i efterhand ha varit ett väldigt smart drag.

För att visa hur enormt omväxlande och roligt jobb jag har så är här en kort lista på saker jag gjort senaste månaden.

- Optimerat databas, webbserver och lastbalanserare för stor bloggportal
- Sålt laptops, servrar och lagring
- Sitter mitt i ett projekt för att bygga ett datacenter
- Hjälper en kund med Microsoft System Center
- Är med och utvecklar en ny site för en stor stiftelse
- Hållt anställningsintervjuer och jobbar på att nyanställa en till tekniker (är du sugen på jobb? Maila mig på andreas@sea-ab.se!)

Som synes så är mina dagar enormt omväxlande, och i många fall blir dom långa. Men vad gör det när man har roligt på jobbet?

Det här inlägget var kanske inte sådär supertekniskt, men jag lovar att skriva klart ett påbörjat inlägg om Bare metal provisioning och få ut det under kvällen!

VK.se bytte från Squid till Varnish, rejält förbättrad laddtid.

VK.se har under en tid haft ett projekt för att bygga om sin site, och en del i det har varit att byta till WordPress och från Squid till Varnish. Imorse postade en av utvecklarna, @chredd en bild från analytics, där skillnaden mellan Squid och Varnish i laddtid syns markant, superkul tycker en varnishivrare som jag!

Som jag förstår det så har man utvecklat en egen modul för att integrera med WordPress, dock så är den inte opensourcad än, men självklart så hoppas jag på att den kommer att bli det. W3 Total Cache har annars full integration med Varnish och fungerar jättebra i största allmänhet.

Det är riktigt roligt att man på VK tar laddtid och användarupplevelsen på största allvar, att inte ha en ordenligt cache på en så stor site är inget annat än ett hån mot besökaren och ett rejält slöseri med prestanda.

Har du en site som kör Varnish, eller har du en bättre lösning? Dela gärna med dig om dina tankar i kommentarsfältet!

Bilden är skamlöst lånad av @chredd

Konfigurera Nginx och Varnish

I mitt lilla projekt om att sätta upp ett eget CDN, Content Delivery Network så har jag nu konfigurerat om Nginx samt installerat Varnish. Det funkar så att Varnish ligger som gateway på port 80 och går igenom alla inkommande requests, om någon request matchar konfigurationen i Varnish så hanterar den det enligt gällande regler. För att uppnå det måste Nginx konfigureras om för att lyssna på en annan port, jag valde för enkelhetens skull port 8080.

 Om du inte redan har installerat Nginx, så finns en guide här

Konfiguration av Nginx, ändra nedan i alla dina vhostar:

Listen 8080

Det gör att Nginx kommer att lyssna på port 8080 istället för 80, det är viktigt att ställa om det på alla vhostar, annars kommer nginx eller varnish inte starta om ordentligt. vill du kan du även skriva 127.0.0.1:8080 så kommer Nginx att bara lyssna på requests som kommer internt på maskinen och inte externt, jag väljer att inte skriva det då jag vill kunna komma åt webbservern direkt externt också, i testsyften.

Installation av Varnish

Varnish finns i Debian stabels paketförråd och installeras med:

apt-get install varnish

Sedan så är det mer eller mindre klart, varnish startas med /etc/init.d/varnish och loggdemonen med /etc/varnishlog start, med största sannolikhet är de redan startade. 

Nu börjar det roliga, men samtidigt besvärliga, vad är det jag vill cacha? Jag har ett enkelt exempel där jag bara cachar statiska filer på en viss domän:

backend default {
        set backend.host = “127.0.0.1″;
        set backend.port = “8080″;
}

sub vcl_recv {
           if (req.http.host ~ “http://cdn.sngw.se“) {
             pass;
           } else {
             if (req.request != “GET” && req.request != “HEAD”) {
                 pipe;
             }
             if (req.request == “POST”) {
                 pass;
             }
             if (req.request == “GET” && req.url ~ “\.(jpg|jpeg|gif|ico|png)$”) {
                 lookup;
             }
             if (req.request == “GET” && req.url ~ “\.(css|js)$”) {

 lookup;
             }

             if (req.request == “GET”) {
                 lookup;
             }
             lookup;
          }
        }
         sub vcl_pipe {
             pipe;
         }

         sub vcl_pass {
             pass;
         }

         sub vcl_hit {
             if (!obj.cacheable) {
                 pass;
             }
             if (req.http.Cookie) {
                pass;
             }
             deliver;
         }

         sub vcl_miss {

fetch;
         }

         sub vcl_fetch {
             if (!obj.valid) {
                 error;
             }
             if (!obj.cacheable) {
                 pass;
             }
             insert;
         }

         sub vcl_deliver {
             deliver;
         }

         sub vcl_timeout {
             discard;
         }

         sub vcl_discard {

     discard;

         }

 

De här reglerna  cache:ar bara statiska filer och gör ingenting konstigt med dem. Nu är du redo att fortsätta upptäcka mer fantastiska grejer med Varnish ocg nginx, lycka till!

Optimering med CDN (Content Delivery Network)

När man optimerar sidor jobbar man i många fall med att separera statiskt innehåll som bilder, javscript och css från dynamiska filer som .php. Eftersom de olika filtyperna har olika sätt att hanteras och olika uppdaterings/åldrigstid så väljer man ofta att leverera de olika filtyperna med olika webbservrar med olika cacheinställningar.

I många fall är det helt värdelöst att ha en dubbel uppsättning webbservrar att hålla koll på utan man väljer att lägga sina statiskafiler hos någon som kan leverera dem åt dig, ett så kallt Content Delivery Network(CDN).  Exempel på sådana är Amazon S3 och även flickr.

Ibland vill man själv ha koll på sitt innehåll och då kan det vara en idé att bygga ett eget CDN, hur man uppnår det på bästa sätt kan diskuteras men det alldra enklaste är helt enkelt att lägga dina filer på en annan server och länka in dem i dina dynamiska sidor.  För att sedan få lite kräm och hastighet på filerna bör du välja en webbserver som ärbra på statiska filer, tex nginx. Vill spara ännu mer kraft kan man även lägga en cache framför, som Varnish.

De stora CMS:erna WordPress och Drupal stöjder båda distribution av filerna till ett CDN, med häjlp av W3 Total Cache-modulen till WordPress kan du även lägga alla dina nyuppladdade filer på CDN:et mha FTP, helt sömlöst utan att dina användare och besökare märker det.

Inomkort kommer det en praktisk guide här på www.abergman.se på hur man bygger ett eget CDN, eller ett PCDN, Private CDN.

WordPress cache

Jag upplevde att  min blogg gick lite långsamt, även om så kanske inte var fallet. Så jag började fundera på hur jag skulle kunna fixa det och kom och tänka på att det kanske fanns en cacheplugin, jag har ännu inte fixat en cache för webbservern men det står på listan, så tills vidare fick jag nöja mig med att leta efter en plugin för att ordna cachen i wordpress, jag vet att det finns i drupal då jag minuterna innan hade meckat med http://www.ledigajobben.se/ för att få igång det och Boost-funktionen i drupal på Nginx, men mer om det senare.

I mitt googlande efter en cache modul så hittade jag WP-cache som verkade vettigt och enkelt att installera, det var bara att söka upp och installera pluginen samt lägga till en ‘define’ i wp-config.php på maskinen samt aktivera cachen så var det klart sen, och jag upplever att det gör en märkbar skillnad.

Mer om cache och Nginx senare, ska installera Varnish framför Nginx för att hantera cache för alla produktionssiter.