WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   2 webservers och 1 databasserver (https://www.wn.se/forum/showthread.php?t=1045607)

sandstream 2010-12-29 17:09

2 webservers och 1 databasserver
 
Det här är säkert vardagsmat för många av er, men inte för mig.

I dag kör jag allt, dvs både IIS och MySQL, på samma burk.

Har märkt en del prestandaproblem när +200 besökare är inne samtidigt och vi på företaget kör lite tyngre saker i vårt affärssystem (egenutvecklat som ligger på samma burk).

Då började jag fundera på om man inte skulle ha 1 webserver för besökarna, 1 för oss själva och båda kopplade till en tredje server där MySQL-databasen ligger.

Tänker jag fel om det är bättre prestanda jag är ute efter?
Är det lätt att "bygga" en sån konfigurering, dvs med 2 webservers som går mot 1 databasserver?

Som sagt, rookie på området så var snälla mot mig ;)

emilv 2010-12-29 17:14

Börja med att klura ut var flaskhalsen är. är det databasen som är flaskhalsen är det möjligt att ni tjänar mest på att köpa en kraftfull maskin för databasen och köra webbservern för sig. Är det webbservern som är flaskhalsen kan ni tjäna på att ha två webbservrar.

Men om det är databasen så hjälper det inte att lastbalansera webbservern, och vice versa. En fördel med lastbalanserad webbserver är att man kan bygga så det går att ta ner en av dem i drift utan att det märks för besökarna (= bättre upptid), men om det inte är där flaskhalsen ligger s hjälper det inte för prestandan i övrigt.

Att lastbalansera två webbservrar är inte speciellt svårt. Det du bör tänka på är hur sessioner sparas; om de körs lokalt på varje maskin så ska lastbalanseraren kanske vara persistent så att samma besökare alltid hamnar på samma maskin. Att sedan köra två klienter mot en databas är så lätt att du inte ens behöver tänka på det; databaserna är redan byggda för att stödja flera samtidiga klienter.

pelmered 2010-12-29 23:27

Är belastningen likvärdig mellan webbservern och databasen så kan ni kanske separera dem till en dedikerad databasserver och en dedikerad webbserver.
Behöver ni verkligen en egen server för ert affärssystem?

Ett annat alternativ är se över om ni kan minska belastningen genom att optimera lite inställningar för cache och kanske implementera en minnescache för databasen med memcached.
Memcached kan ni också använda för att spara sessioner med PHP så att ni kan dela sessionerna mellan flera webbservrar som emilv sa.

Ett tredje alternativ är att uppgradera servern om det är möjligt. Mer minne till cache kan göra ganska mycket och kan vara väldigt kostnadseffektivt jämfört med att köpa en helt ny server.

Men första steget är, som emilv sa, att kolla vart flaskhalsen är så att ni vet hur ni ska gå vidare.

abergman 2010-12-29 23:37

Som en vis man en gång sa: Optimera aldrig utan att veta vad och varför.

coredev 2010-12-30 08:21

Du har fått många bra svar. Att baseline:a systemet och sedan göra förändringar utifrån det är så man skall gå till väga.

Vill bara tillägga att det är en dålig idé att dela upp webbservrarna i olika typer för olika målgrupper. Bättre att bygga generiskt med en lastbalanserare framför (NginX är en utmärkt lastbalanserare). Fördelen du får då är att om en maskin går sönder så fungerar fortfarande systemet full ut för alla, även om det är lite segt. Och att man kan ha en webserver "spare".

jonny 2010-12-30 08:40

Det kan ju också vara vettigt att flytta affärssystemet till en egen server med databas och allt. Men det är svårt att lämna vettiga rekommendationer utan att veta hur systemen och belastningen faktiskt ser ut.

sandstream 2011-01-04 14:04

Tack för svaren! :)

En följdfråga blir hur man tar reda på vart flaskhalsen ligger?
(Kör Windows 2000, jo det är sant)

coredev 2011-01-04 14:44

Citat:

Ursprungligen postat av sandstream (Inlägg 20386118)
Tack för svaren! :)

En följdfråga blir hur man tar reda på vart flaskhalsen ligger?
(Kör Windows 2000, jo det är sant)

Att börja mäta upp allt ifrån request times till databasfrågor är en bra början. Ser du att en request spenderar 80% av sin tid i databasen så bör du kolla på att optimera databasen / indexera bättre / cacha bättre. Ser du att en request spenderar 80% av sin tid i webservern så bör du kolla på att förenkla scripten, loopa mindre, prefabrisera mer statiska moduler, skala upp till fler servrar.

danjel 2011-01-04 16:35

Kolla även uppgradering av MySQL version och PHP version.
Det kan påverka prestanda ganska mycket om ni kör äldre versioner. Tex cachning av sql queries gjordes väl inte i tidiga MySQL,det kan påverka väldigt mycket
Uppgradering av win och IIS kommer förmodligen också påverka prestanda positivt..

sandstream 2011-01-05 14:25

Citat:

Ursprungligen postat av coredev (Inlägg 20386132)
Att börja mäta upp allt ifrån request times till databasfrågor är en bra början.

Hur gör jag det?
Är som sagt n00b på det här :rodnar

coredev 2011-01-05 15:32

Citat:

Ursprungligen postat av sandstream (Inlägg 20386309)
Hur gör jag det?
Är som sagt n00b på det här :rodnar

Vad jag minns så har du nog inte berättat vilket språk ni kör. Det behöver jag veta för att googla fram lite kod åt dig :-)

tlagren 2011-01-06 01:01

Citat:

Har märkt en del prestandaproblem när +200 besökare är inne samtidigt och vi på företaget kör lite tyngre saker i vårt affärssystem (egenutvecklat som ligger på samma burk).
När du ändå funderar på att bygga om kan det nog vara på sin plats att fundera på om det är lämpligt att låta besökare (som jag har antagit är externa) ansluta sig mot samma server där ni på företaget kör ert affärssystem. Utan att veta mer om systemen så verkar det vara en stor säkerhetsrisk.

/Tomas

sandstream 2011-01-10 14:48

Citat:

Ursprungligen postat av coredev (Inlägg 20386329)
Vad jag minns så har du nog inte berättat vilket språk ni kör. Det behöver jag veta för att googla fram lite kod åt dig :-)

Vi kör ASP.

pelmered 2011-01-10 20:36

Det enklaste sättet och det första steget är väl att kolla i aktivitetshanteraren efter vilka processer som drar mest CPU under peakarna och kolla så att inte minnet tar slut eller likande.

Då ser du för det första om det är CPU, RAM eller möjligen, men inte så troligt, att det är diskarna(jag antar att ni kan se IO queue på diskarna där) som är flaskhalsen.

Nästa steg är att utvärdera vad ni behöver vidta för åtgärder. Första steget då är väl att kolla vad ni kan göra för att optimera koden genom att t.ex. cacha mer innehåll eller skiva om dåliga databasfrågor(är ofta orsaken till seghet i webbsystem enligt min erfarenhet). Cache är bra eftersom det kostar mycket mindre prestanda att hämta innehållet direkt ifrån minnet än ifrån databasen/disk. Jag vet inte riktigt vad det finns i ASP-miljöer(någon kanske kan flika in med det?), men kolla på lösningar som t.ex. memcached som används för att spara information i minnet så man slipper hämta det ifrån databasen. Om det inte finns så mycket att göra med koden eller om ni inte har kompetensen bör ni gå till nästa steg.

Går det att uppgradera med mer RAM, bättre diskar, eller om det är är möjligt, bättre/fler CPU i servern om det är flaskhalsen?
Först om det inte är möjligt kan ni kolla på att antingen ta en konsult som få kolla på det om ni känner att ni inte har kompetensen själva eller köpa en till server.

I de här stegen går man från de mest kostnadseffektiva lösningarna och fortsätter ner till de dyrare om man inte kan lösa problemet. Ofta behöver man inte lägga massa pengar på att köpa massa servrar i onödan.

danjel 2011-01-11 14:11

Citat:

Ursprungligen postat av sandstream (Inlägg 20387040)
Vi kör ASP.

Lite överkurs men en omskrivning till ASP.NET skulle förbättra prestanda "automatiskt".
Har varit med om att man skriver om vissa enstaka sidor i syfte att förbättra ASP prestanda


Alla tider är GMT +2. Klockan är nu 12:26.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson