Authcache: Και οι registered χρήστες έχουν ψυχή

1

Πρόσφατα χρειάστηκε να πειραματιστώ με ένα Drupal site στο οποίο θα έπρεπε να έχουμε την ταχύτητα που καταφέρνουμε για τους unregistered users και για τους registered χρήστες. Ως γνωστό, το boost module που χρησιμοποιείται κατά κόρον στα Drupal sites, κάνει ένα πολύ καλό caching για τους επισκέπτες των sites μας, αλλά τι γίνεται με τους χρήστες που θα μπουν και θα συνδεθούν με τα στοιχεία τους; Γιατί να μην έχουν και αυτοί καλύτερες ταχύτητες;

Η λύση

Η λύση που προτείνουμε λοιπόν, είναι ό,τι πρέπει για ένα απλό configuration δίχως απαιτητικές τεχνικές caching από πλευράς server. Αν δηλαδή ο server μας είναι ένας απλός web server δίχως Varnish, Opcache, Memcache κλπ, μπορεί να είναι μια πολύ αποδοτική λύση για γρήγορο page surfing στους logged in users. Το module λέγεται authcache και η φιλοσοφία του πλησιάζει πολύ αυτή του boost.

Την πρώτη φορά που θα αιτηθεί μια σελίδα από κάποιον, το τελικό HTML αποτέλεσμα θα αποθηκευτεί για τις επόμενες κλήσεις της. Μια ξεχωτιστή cached version της σελίδας αποθηκεύεται για κάθε user role ξεχωριστά ώστε να μπορούμε να επιτρέψουμε ή να αποκλείσουμε ανά ρόλο την χρήση του.

Όταν κληθεί μια σελίδα από την cache, σερβίρεται άμεσα ως στατική και έπειτα γίνονται επιπλέον AJAX κλήσεις “ελαφράς μορφής” στο drupal που θα εκτελούν ερωτήματα στην SQL για ενημέρωση ιστορικότητας ή/και στατιστικών του χρήστη, και επιστρέφονται προσωποποιημένα δεδομένα στην σελίδα όπως tokens για φόρμες, default values για φόρμες κλπ.

Και πού είναι τα cached αρχεία;

Ένα πλεονέκτημα έναντι του boost είναι ότι με την χρήση συνεργαζόμενων modules, το authcache μπορεί να αποθηκεύσει τις cached σελίδες του σε διάφορα σημεία και με διάφορες τεχνολογίες. Στην βάση δεδομένων, στον Varnish, στην Memcache, APC κλπ.

Εξ ορισμού, το authcache αποθηκεύει τις cached σελίδες στην βάση δεδομένων. Εκ πρώτης όψεως είναι δελεαστική και εύκολη λύση αλλά μπορεί να δημιουργηθούν προβλήματα υπορφόρτωσης της MySQL σε μεγάλη επισκεψιμότητα καθώς η MySQL θα στέλνει όλη την πληροφορία της εκάστοτε σελίδας στον apache σε κάθε κλήση. Αυτό μπορεί άμεσα να μεγαλώσει το data rate μεταξύ MySQL και Apache, καθώς και την αύξηση του όγκου της βάσης μας κάνοντάς την σε ορισμένες περιπτώσεις πιο δύσχρηστη από πλευράς συντήρησης και διαχείρισης.

Μια εύκολη και λιγότερο server side παρεμβατική λύση είναι η χρήση του File Cache. Το συγκεκριμένο module, αποθηκεύει ό,τι ήταν να αποθηκευθεί στην βάση, σε αρχεία HTML. Έτσι, στην MySQL αποθηκεύεται μόνο η ηλικία και το url της εκάστοτε cached σελίδας και ο χρήστης θα δεί την HTML που βρίσκεται στην ουσία μέσα στο sites/default/files φάκελο.

Όπως και (σχεδόν) όλα τα άλλα cached related modules που χρησιμοποιούμε, έτσι και το authcache έχει ρυθμίσεις για minimum και maximum διάρκεια ζωής της cache, triggers για cache updates, debugging modes και πολλά άλλα.

Στο δια ταύτα

Ας δούμε λίγα νούμερα. Σε συνδεδεμένο χρήστη, για μια απλή σελίδα με 2 views, 3 blocks, 2 menus κλπ κλπ, ο μέσος χρόνος για το rendering κυμαίνεται στα ~650ms. Σε ένα απλό configuration λοιπόν, ένας registered user θα περίμενε ~650ms μόνο και μόνο για να ξεκινήσει ο server να στείλει το 1ο byte της σελίδας. Με την χρήση του authcache, ο χρόνος έπεσε στα ~48ms.

Τα νούμερα αν και είναι για 64bit Windows 7 laptop με SSD και άφθονη μνήμη, δίνουν τη τάξη μεγέθους της βελτίωσης που μπορούμε να πετύχουμε με 2 απλές κινήσεις. Αν βέβαια στην διάθεσή μας έχουμε και Varnish ή και άλλες server side caching τεχνικές οι χρόνοι μπορεί να βελτιωθούν ακόμα περισσότερο. 

Το Authcache σε συνδυασμό με το σωστό στήσιμο της εγγενούς cache των views μας και του block cache alter που θα μας επιτρέψει να πειράζουμε την cache του κάθε block μας, θα μπορέσουμε με ευκολία να κάνουμε ένα αργό Drupal site, αγνώριστο!

Μιχάλης

Γράφει ο Μιχάλης

Web Developer

Σχολιάστε το άρθρο