2011-11-07

Spela in nätverkstrafik på en Virtuell Maskin? Eller: "hur får man info om hur applikationen funkar?" (del 1)

Detta är del 1 i en serie av blogginlägg. Här går vi igenom bakgrunden kring miljön, och så sätter vi upp en ny Virtuell XenApp maskin som skall användas för delar av prestandamätningarna
I del 2 spelar vi in trafiken på nätverket
I del 3 så analyserar vi sedan trafiken.


En mening man fått höra ett par gånger är "Citrix är långsamt".
Jag vill inte säga att den som säger så har helt fel, men samtidigt måste man sätta det i ett perspektiv. :)

Det är få applikationer som arbetar på en server eller klient helt utan att påverkan från andra saker. Just när det gäller en applikation som körs på en Citrix-server så är detta ännu mer sant.

De mest uppenbara sakerna som påverkar den upplevda prestandan för en slutanvändare är (utan inbördes ordning):
- Lasten på användarens dator
- Vilken Citix Reciever som används
- Nätverksprestanda i slutanvändarens nät
- Nätverksprestanda i eventuellt nät mellan servernät och användarens nät (typ 3G nät eller liknande)
- CPU-last på Citrix-servern
- Hur applikationen är byggd
osv
I bilden ovan är det inte helt säkert att Användare 1 och användare 2 kommer att få samma upplevelse, vilket kan bero på att den ena kör över ett trådlöst nätverk...

Nåja. Vad jag tänkte skriva om här är ett exempel där feedbacken från användarna var att det går långsamt i applikationen, Tyvärr var applikationen inte riktigt lika enkel som i exemplet ovan.
En till utmaning var att applikationen i sin tur snackar med an ruskig massa olika servrar när den arbetar, men det var inte riktigt dokumenterat med vilka servrar, hur mycket och när.

Så målet jag hade var att ta reda på hur applikationen arbetar undertiden som den körs.

Till vår fördel här så körs citrix-servarna (=XenApp servrarna) som provisionerade servrar och att de är virtualiserade på XenServer.

Förberedelser.
När jag gör mina mätningar vill jag veta att det inte sker en massa saker på servarna som jag inte har kontroll över.
Optimalt är alltså om jag kan göra mina mätnignar på en server som ser precis ut som en produktionsserver, men där jag är enda användaren.

Jag skrev ju tidigare att det var provisionerade servrar på XenServer så vi börjar med att skapa en ny Virtuell Server i XenServer och attachar den Image som används på de andra produktionsservarna.
Där efter tar jag en kopia på den publicerade applikationen och ändrar denna kopia så att den bara pekar på min nya server och att min användare är den enda som har behörighet att se applikationen i webb-gränssnittet.

Nu har jag en helt egen server som ligger i produktionsmiljön där jag kan testa att logga in som en vanlig användare och se vad applikationen gör.
Klart på ett par minuter. (jag gillar verkligen möjligherna man får i virtualiserade miljöer! :))

Så nu har vi en separerad miljö. vad nu?
Till att börja med så skall det sägas att det inte är en separerad miljö... Inte helt. Den virtuella miljön använder samma processorer och samma SAN.
Även applikationen är samma, eftersom att det är samma image som används. Detta i sin tur betyder att det även är samma SQL-server och exakt samma databas som används.
Så om man gör en förändring i databasen (exempelvis raderar en massa saker av misstag) så kommer de att försvinna även i produktionsapplikationen.
Kikar vi på bara själva servernätet så ser det ut ungefär så här:
Ja bilden är något förenklad. Men det är ingen idé att rita ut alla provisioning servrar, alla XenServer servrar, Virtuella XenApp servrar eller MS SQL-servrar. Det blir liksom inte bättre för det. :)

En sak som några har reagerat på är hur det kan komma sig att Provisioning-servrarna har lågprestanda disk.. Det är så att varje provisioningserver har fått 32GB internminne, detta gör att de cachar stora delar av serverimagarna och det behövs helt enkelt inte mer än lågprestanda disk...
En annan sak som är rätt viktig att påpeka är att samtliga XenApp servrar har 20GB minne och 4vCPUer tilldelat sig. Själva hostarna har 4 fysiska CPUer med 12cores vardera och 256GB minne.
Vad jag vill påpeka med detta är att varken minne eller CPU är överallokerat utan varje VM får de resurser de behöver.

Självklart är Cachedisken RAID-10 på 15k diskar.

Vi har tidigare gjort mätningar på alla möjliga ställen i denna miljö för att se vart vi kan tänkas ha flaskhalsar. Men ingenting uppenbart har dykt upp och det är därför jag bestämde mig för att försöka se vad applikationen egentligen håller på med... Detta för att se om det är nått vi missat.

Nästa steg är att spela in vad som händer på nätverket, vilket kommer i nästa del. (denna post börjar bli lång som den är)

Inga kommentarer:

Skicka en kommentar

Related Posts Plugin for WordPress, Blogger...