Kom ihåg mig?

Hårdvara för att klara mina belastningar

 
Ämnesverktyg Visningsalternativ
Oläst 2007-06-21, 16:41 #1
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Jag har förtillfället en sida som i korta drag tillhandhåller en liten bild för att räkna unika besökare. Denna bild/php-script jobbar mot en MySQL databas som ligger på samma server som webbservern.

Förtillfället anropas denna fil ca 50 gånger i sekunden och detta är inget som kommer minska utan tvärtom. Samtidigt ökar databasens storlek kontinuerligt och är idag på 1GB varav 20-30% är ip-adresser kopplade till en användare. Först tänkte jag öka mängden minne i servern men det hjälper endast läsning från databasen, skrivningarna måste fortfarande ske till disken vilket de flesta anrop till databasen rör sig om.

Serverns tillfälliga hårdvara är:
Dual Opteron 2212 Dual Core
2 x 146GB, 10K RPM SCSI/SAS Hard Drive (RAID 1)
2048 MB RAM

Belastningen på servern ökar tyvärr rätt så lavinartat så jag undrar vilken hårdvara och uppbyggnad som är det bästa. The Planet kan inte erbjuda en enkel server som presterar mycket bättre än denna så det blir att dela upp det men det har jag ingen erfarenhet av. Antingen en dedikerad mysql-server eller loadbalanced-pairs.
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-21, 17:17 #2
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
Jag skulle rekomendera dig att i första hand titta på databasstruktur och försöka optimera din kod/frågor mot databasen i största möjliga mån. Kanske byta ut apache mot en annan webbserver (lighttpd kanske). Kika även på någon form av cache, kanske xCache så slipper du lite overhead tider.
Har du gjort allt detta är du nog inne på rätt spår.
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-21, 17:39 #3
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Citat:
Originally posted by najk@Jun 21 2007, 16:17
Jag skulle rekomendera dig att i första hand titta på databasstruktur och försöka optimera din kod/frågor mot databasen i största möjliga mån. Kanske byta ut apache mot en annan webbserver (lighttpd kanske). Kika även på någon form av cache, kanske xCache så slipper du lite overhead tider.
Har du gjort allt detta är du nog inne på rätt spår.
Databas-strukturen och programmeringen är så bra som jag kan göra den. Nogrant gjord då jag visste innan jag började att stora mängder förfrågningar skulle ske.

Problemet med att tweaka en server är att man lägger ner massa arbete nu och så blir jag ändå tvungen att byta server om en månad. Detta är lite irriterande. Hittils har jag haft en ökning med nästan 100% var tredje månad så nästa serverbyte måste klara av några ökningar även om det kostar lite.
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-21, 20:21 #4
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
Citat:
Ursprungligen postat av FredrikMH
Citat:
Ursprungligen postat av najk
Jag skulle rekomendera dig att i första hand titta på databasstruktur och försöka optimera din kod/frågor mot databasen i största möjliga mån. Kanske byta ut apache mot en annan webbserver (lighttpd kanske). Kika även på någon form av cache, kanske xCache så slipper du lite overhead tider.
Har du gjort allt detta är du nog inne på rätt spår.
Databas-strukturen och programmeringen är så bra som jag kan göra den. Nogrant gjord då jag visste innan jag började att stora mängder förfrågningar skulle ske.
Jag har inte sett koden och jag vet inte vad det handlar om men jag tror inte han med "optimering" endast menar förbättring av queries samt funktionerna som du använder utan försöka komma på ett bättre sätt, om möjligt, att utföra det du gör fast på ett bättre sett som gör att mina behov minskar.

Försök att tänka i andra banor eller publicera din kod här så vi andra kan hjälpa dig om du inte känner att din kod/idé kan leda till vinstsyfte då.
eliasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-21, 22:55 #5
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Citat:
Ursprungligen postat av eliasson
Citat:
Originally posted by -FredrikMH@Jun 21 2007, 17:39
Citat:
Ursprungligen postat av najk
Jag skulle rekomendera dig att i första hand titta på databasstruktur och försöka optimera din kod/frågor mot databasen i största möjliga mån. Kanske byta ut apache mot en annan webbserver (lighttpd kanske). Kika även på någon form av cache, kanske xCache så slipper du lite overhead tider.
Har du gjort allt detta är du nog inne på rätt spår.
Databas-strukturen och programmeringen är så bra som jag kan göra den. Nogrant gjord då jag visste innan jag började att stora mängder förfrågningar skulle ske.

Jag har inte sett koden och jag vet inte vad det handlar om men jag tror inte han med "optimering" endast menar förbättring av queries samt funktionerna som du använder utan försöka komma på ett bättre sätt, om möjligt, att utföra det du gör fast på ett bättre sett som gör att mina behov minskar.

Försök att tänka i andra banor eller publicera din kod här så vi andra kan hjälpa dig om du inte känner att din kod/idé kan leda till vinstsyfte då.
php-scriptet måste köras för att registrera besökaren och allt som sparas är ett id-nummer och en ip-adress i en databas. Berätta gärna för mig hur man på ett snabbare och mer optimerat sätt sparar denna data. Det är detta lilla script som tar upp "all" kapacitet av servern. Jag är ingen amatör på detta område utan är endast ute efter serverlösningar som klarar av belastningarna.
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-21, 23:52 #6
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Varför lagra den informationen i en relationsdatabas? När, hur och varför läser du datan från loggen?
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-22, 00:18 #7
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Citat:
Originally posted by kullervo@Jun 21 2007, 22:52
Varför lagra den informationen i en relationsdatabas? När, hur och varför läser du datan från loggen?
Va?
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-22, 00:43 #8
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Min mage säger:
1. Onödigt att lagra datan i en relationsdatabas.
2. Onödig overhead med PHP.
3. Datan är oviktig. Det är inte hela världen om du sumpar ett entry eller två.
4. Du vill cruncha datan asynkront med requestsen.

Förslag på lösning:
Skippa PHP och crunch:a webbserverns logg asynkront istället. Släng på fler webbservrar vid behov. När det blir jobbigt att merga:a alla webbservrarnas loggfiler kan du låta de logga över en socket för central lagring. Använd Spread (gruppkommunikationssystem. Finns modul till apache) om du inte vill bygga socket-lösningen själv.

Å andra sidan låter det som att ditt nuvarande system borde klara bra mycket mer än 50 skrivningar per sekund. Men du har kanske massa tunga index över en enda enorm tabell? En snabblösning vore att fortsätta logga i mysql fast i en heap-tabell och dumpa över den datan till din redan befintliga tabell regelbundet, fast partitionera den först. Tänk på vilken information du verkligen vill ha kvar permanent. Dvs, du vill kanske inte veta exakt vilka IP-adresser som besökte sajten 1:a juli 1999 utan bara mängden unika besökare den dagen, den veckan och den månaden. Minska nogrannheten på äldre data låter lämpligt.


Edit: Sorry, det var visst hårdvarutips du var intresserad av. Jag rekomenderar någa billiga PC-servrar förr webbserver samt lastbalanserare och din befintliga för crunch och lagring av statsen. För övrigt berättar du inte vad flaskhalsen är i ditt nuvarande system. Disk-IO eller concurrency-problem med mysql?
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-06-26, 20:36 #9
iXam iXam är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 219
iXam iXam är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 219
Behöver väl inget phpscript per request över huvud taget. All info du behöver hamnar väl ändå i apache-loggen (ip,referer osv).
Sen så batchar du en körning en gång i timman eller hur du vill där du bearbetar loggfilen och gör det du vill med datan.

Och om du inte sparar IP-nummer som en unsigned int så är det dags att göra det.
iXam är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-06, 01:41 #10
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Har tittat vidare på lösningar för sidan och jag gjorde en liten "miss" innan jag startade denna tråden. PHP-filen som räknar besökare lagrar inte endast en ip-adress utan hämtar även ut sidans placering och skriver ut den på bilden, där av den "onödiga" overhead med php (fast jag hade kört på den lösningen ändå). Så en hel del av belastningen låg på denna SQL-fråga men det har jag löst med memcached. Även om detta drog ner load så är det inte tillräckligt, speciellt inte när sidan helt plötsligt kan få en 100% ökning. Så jag har kommit fram till något liknande det Kullvervo skrev om.

Denna Bild demonstrerar hur jag har tänkt det. I min värld borde det bli mycket bättre.

HTTP-Server - Sköter all kommunikation utåt och slipper belastningar av MySQL och statistik-uträkningar.
MySQL-Server - Sköter all lagring av datan och får RAID 10 för felkontroll och säkerhet samt 4GB minne för datan.
Log-Server - HTTP-Servern kör Remote-logging till denna maskin.

Tanken är att istället för att PHP-scriptet ska skicka INSERT med IP till MySQL så ska ett program skrivit i C++ gå igenom loggfilerna och göra detta istället. På så sätt samlas alla INSERTS in i en fråga istället för många små vilket borde borde snabba upp det mycket. Programmet ska även göra de uträkningar för användarna som idag görs via cronjobs var 15:e minut. Tanken är att dessa beräkningar som kräver kapacitet inte ska påverka sidladdningarna på sidan då en lite överbelastad webbserver skickar html-kod samt alla bilder väldigt långsamt.

Idag har jag bara HTTP-servern som kör MySQL och alla uträkningar. Det planerade kalaset kommer gå loss på ca 5900kr/mån, vilket det är värt om det hjälper mycket.

Vad tror ni om denna lösning och om utvald hårdvara (som visas på bilden)?
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:28.

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