

Τελευταία ενημέρωση: Wednesday, February 4, 2009 | 17269 Views
Κάθε webmaster στοχεύει στο να έχει όσο το δυνατόν περισσότερο traffic στο site του. Ωστόσο μερικές φορές το traffic προκαλεί μεγάλα προβλήματα. Μεγάλος χρόνος απόκρισης, πεσμένοι servers μεταξύ άλλων είναι οι πονοκέφαλοι που μπορείτε να συναντήσετε όσο το site σας προχωράει στον δρόμο της επιτυχίας.
Φυσικά αυτά είναι τα ομορφότερα προβλήματα που μπορείτε να συναντήσετε σαν publisher, χωρίς αυτό να σημαίνει οτι δέν πρέπει να είμαστε προετοιμασμένοι. Παρακάτω σας περιγράφω κάποιες λύσεις που δούλεψαν για εμάς και εύχομαι να σας χρειαστούν
Apache optimization
Καταρχήν είναι πολύ σημαντικό να είναι σωστά configured ο web server σας. Στην περίπτωση που είστε σε shared hosting μάλλον δέν σας ενδιαφέρει, ωστόσο αν έχετε dedicated server μπορείτε να χρησιμοποιήσετε κάποια απο τις testing εφαρμογές για Apache που μπορούν να σας βοηθήσουν με το σωστό configuration του server.
Static vs Dynamic content
Ας δούμε λίγο πώς σερβίρει ένας web server μία σελίδα, και πιό συγκεκριμένα ο Apache. Όταν ζητάμε μία σελίδα, ουσιαστικά κάνουμε ένα request για κάθε αντικείμενο αυτής (html, τα css, τις εικόνες, κτλ) Για κάθε request ο server απασχολεί ένα process το οποίο ασχολείται με το “σερβίρισμα”. Όταν κάποιο process τελιώσει, τότε περιμένει κάποιο διάστημα, και αν δέν του ζητηθεί κάποια άλλη σελίδα τότε “πεθαίνει”.
Μέχρι εδώ όλα καλά, ωστόσο σε ένα site με μεγάλο load, υπάρχει ένα σημαντικό πρόβλημα. Ας υποθέσουμε οτι ένα process σερβίρει μία δυναμική σελίδα. Ενδεχομένως να χρησιμοποιηθούν 30mb μνήμης απο το script που παράγει την σελίδα. Όταν τελειώσει το parsing, το process δέν θα ελευθερώσει την μνήμη και ακόμα αν στο επόμενο request σερβίρει μιά εικόνα θα χρησιμοποιεί πάλι 30mb μνήμης. Σε ένα φυσιολογικό server αυτό δέν είναι πρόβλημα ωστόσο σε ένα απαιτητικό περιβάλλον δέν μπορούμε να σπαταλάμε μνήμη. Συμπληρωματικά πολλές βασικές διεργασίες του κάθε request δέν χρειάζονται για το σερβίρισμα στατικού περιεχομένου οπότε πάλι υπάρχει σπατάλη πόρων του συστήματος.
Η λύση που ανακάλυψα σε αυτό το πρόβλημα είναι η εξής. Χρησιμοποιούμε ένα web server για δυναμικό περιεχόμενο και έναν για στατικό. Έτσι – και στο ίδιο μηχάνημα – μπορούμε να βάλουμε έναν Apache με mod_rewrite, logging και ότι άλλο θέλουμε, και σε μιά άλλη ip βάζουμε έναν lighttpd με απενεργοποιημένα όλα τα modules για να σερβίρει το στατικό περιεχόμενο. Φυσικά αν όλο αυτό σας φαίνεται δύσκολο μπορείτε απλώς να χρησιμοποιήσετε μια υπηρεσία σαν το amazon ec2 για να κάνετε hosting το στατικό περιεχόμενο
Η συγκεκριμένη λύση βοήθησε το webdigity να αντέξει ένα digg/stumbleupon/reddit κύμα που δέχτηκε με 1600 online visitors χωρίς κανένα πρόβλημα (ενώ παλιότερα έτρεχα με τα restart)
MySQL
Στην MySQL όπως και σε κάθε server το πιό βασικό είναι το configuration. Ένα πολύ καλό εργαλείο που μπορεί να σας βοηθήσει είναι το MySQLTuner το οποίο βοηθάει στο στήσιμο του server. Παράλληλα κάτι που πρέπει οπωσδήποτε να βλέπετε είναι τα queries που καθυστερούν με το slow query log. Όσο αφορά τα queries το πιό βασικό που πρέπει να σας πώ είναι να αποφεύγετε τα RAND() και να χρησιμοποιείτε οπωσδήποτε την LIMIT.
PHP opcode caching
Το opcode caching μπορεί να κάνει την php πολλές φορές πιό γρήγορη και το συνιστώ ανεπιφύλαχτα. Υπάρχουν διάφορες λύσεις για opcode caching. Εγώ θα σας προτείνω την XCache που είναι stable και φυσικά open source
PHP data caching
Για να “ξεκουράζουμε” τον database server καλό είναι να κάνουμε και ένα caching των δεδομένων σε επίπεδο εφαρμογής. Αυτό μπορεί να γίνει σε αρχεία στο file system (δείτε ένα tutorial που έγραψα παλιότερα) ή με την χρήση του memcached.
Αυτά τα λίγα για server optimisation, ελπίζω να σας άρεσε το άρθρο
-
http://www.pestaola.gr Titanas
-
Νίκος Παπανώτας
-
http://www.pestaola.gr Titanas
-
http://developstories.gr/ Kostas Theodorou
-
http://blog.cherouvim.com/ cherouvim
-
http://www.adslspeed.com Makis77