Σπίτι Λογισμικό Βερνίκι: προετοιμαστείτε για να ανατραπούν!

Βερνίκι: προετοιμαστείτε για να ανατραπούν!

Πίνακας περιεχομένων:

Anonim

Όταν πρόκειται για την απόδοση του δικτυακού τόπου, το βερνίκι είναι μια καυτή τεχνολογία. Με μια απλή εγκατάσταση και διαμόρφωση, είναι δυνατό να αυξήσετε την απόδοση οποιουδήποτε ιστότοπου και να εξυπηρετήσετε μέχρι και εκατομμύριο σελίδες με μόνο ένα μικρό εικονικό ιδιωτικό διακομιστή., Θα σας δείξω τέσσερις πιθανές διαμορφώσεις που θα σας βοηθήσουν να βελτιώσετε τον χρόνο απόκρισης του ιστότοπού σας, είτε εξυπηρετείτε εκατοντάδες, χιλιάδες ή εκατομμύρια σελίδες.

Εισαγωγή στο βερνίκι

Το βερνίκι-cache είναι ένας επιταχυντής Web με στόχο την αποθήκευση στο περιεχόμενο του ιστότοπου. Πρόκειται για ένα έργο ανοιχτού κώδικα που στοχεύει στη βελτιστοποίηση και την επιτάχυνση της πρόσβασης σε δικτυακούς τόπους μη επιθετικά - χωρίς να αλλάζει τον κώδικα - και σας επιτρέπει να βάλετε τα χέρια σας στον ιστότοπό σας.


Ήταν οι δημιουργοί της Cache Βερνίκι που την αποκαλούσαν επιταχυντή Web, επειδή ο πρωταρχικός της στόχος είναι να βελτιώσει και να επιταχύνει το μπροστινό μέρος μιας ιστοσελίδας. Το βερνίκι επιτυγχάνει αυτό αποθηκεύοντας αντίγραφα των σελίδων που εξυπηρετεί ο διακομιστής Web στην κρυφή μνήμη του. Την επόμενη φορά που θα ζητηθεί η ίδια σελίδα, η Varnish θα προβάλει το αντίγραφο αντί να ζητήσει τη σελίδα από το διακομιστή Web, με αποτέλεσμα την τεράστια αύξηση της απόδοσης.


Ένα άλλο από τα βασικά χαρακτηριστικά της Cache Βερνίκι, εκτός από την απόδοσή της, είναι η ευελιξία της γλώσσας διαμόρφωσης, VCL. Το VCL καθιστά δυνατή τη σύνταξη πολιτικών σχετικά με το πώς πρέπει να αντιμετωπίζονται τα εισερχόμενα αιτήματα. Σε μια τέτοια πολιτική, μπορείτε να αποφασίσετε ποιο περιεχόμενο θέλετε να προβάλλετε, από πού θέλετε να αποκτήσετε το περιεχόμενο και πώς θα πρέπει να τροποποιηθεί το αίτημα ή η απάντηση.


Στα ακόλουθα παραδείγματα διαμόρφωσης, θα σας δείξω ποιοι VCL κανόνες πρέπει να χρησιμοποιηθούν για την επίτευξη ορισμένων στόχων, από μια απλή αποθήκευση εικόνων και στατικών αντικειμένων, στη χρήση του βερνικιού σε ένα κατανεμημένο περιβάλλον ή τη λειτουργία του ως εξισορρόπησης φορτίου.


Όλα τα παρακάτω παραδείγματα αφορούν το βερνίκι 3.x. Λάβετε υπόψη ότι το Varnish 2.x χρησιμοποιεί διαφορετική σύνταξη και κανόνες, επομένως αυτά τα παραδείγματα δεν είναι συμβατά με αυτή την έκδοση.


Ακολουθούν οι κύριες καταστάσεις του Varnish, τις οποίες θα χρησιμοποιήσουμε στο αρχείο διαμόρφωσης VCL:


recv

Αυτή είναι η πρώτη συνάρτηση που καλείται όταν λαμβάνετε ένα αίτημα. Εδώ μπορούμε να χειριστούμε το αίτημα προτού να ελέγξουμε αν υπάρχει στην κρυφή μνήμη. Εάν ένα αίτημα δεν μπορεί να τεθεί σε μια προσωρινή μνήμη, ο διακομιστής back-end στον οποίο θα αποσταλεί το αίτημα μπορεί επίσης να επιλεγεί σε αυτή τη φάση.


πέρασμα

Μπορούμε να χρησιμοποιήσουμε αυτή τη λειτουργία όταν θέλουμε να μεταβιβάσουμε την αίτηση στο διακομιστή Web και να αποθηκεύσουμε την απάντηση στο cache.


σωλήνας

Αυτή η λειτουργία παρακάμπτει το βερνίκι και στέλνει το αίτημα στον διακομιστή Web.


ψάχνω

Με μια αναζήτηση, το βερνίκι ζητά να επαληθεύσει εάν η απόκριση υπάρχει και ισχύει στην κρυφή μνήμη.


φέρω

Αυτή η λειτουργία ονομάζεται αφού η ανάκτηση του περιεχομένου από το πίσω τέλος προκαλείται από ένα περάσει ή ένα χάσμα.

Τα βασικά: Εικόνες κρυφής μνήμης

Ας δούμε λοιπόν ένα παράδειγμα διαμόρφωσης. Σε αυτό το πρώτο παράδειγμα, θα αποθηκεύουμε μόνο τις εικόνες και τα στατικά αρχεία όπως τα αρχεία CSS. Αυτή η ρύθμιση είναι πολύ χρήσιμη όταν δεν γνωρίζετε τον ιστότοπο που θέλετε να ενισχύσετε, οπότε μπορείτε να αποφασίσετε ότι όλες οι εικόνες, το CSS και το JavaScript είναι οι ίδιες για όλους τους χρήστες. Προκειμένου να γίνει διάκριση μεταξύ των χρηστών, το πρωτόκολλο HTTP χρησιμοποιεί cookies, οπότε πρέπει να τα εξαλείψουμε σε αυτό το είδος αιτήματος, ώστε να είναι όλα τα ίδια για το Varnish:

sub vcl_recv{


if(req.url ~ " * \.(png|gif|jpg|swf|css|js)"{

unset req.http.cookie;


unset req.http.Vary;

return(lookup);

}


# strip the cookie before the image is inserted into cache.

sub vcl_fetch {

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {

unset beresp.http.set-cookie;

}

Και αυτό είναι. Με αυτό το αρχείο VCL μπορείτε εύκολα να αποθηκεύσετε προσωρινά το στατικό περιεχόμενο.

Το πρότυπο: Εικόνες και σελίδες κρυφής μνήμης

Συνήθως, δεν θέλετε απλώς να αποθηκεύσετε προσωρινά το στατικό περιεχόμενο του ιστότοπού σας, αλλά θέλετε επίσης να αποθηκεύσετε προσωρινά κάποιες δυναμικές σελίδες που δημιουργούνται από τον διακομιστή ιστού σας, αλλά είναι οι ίδιοι για όλους τους χρήστες - ή τουλάχιστον για όλους τους ανώνυμους χρήστες χρήστες. Σε αυτή τη φάση, πρέπει να γνωρίζετε ποιες σελίδες μπορούν να αποθηκευτούν και ποια δεν μπορούν.


Ένα καλό παράδειγμα είναι το Wordpress, ένα από τα πιο συνηθισμένα συστήματα διαχείρισης περιεχομένου. Το Wordpress δημιουργεί ιστοσελίδες δυναμικά με PHP και ερωτήματα σε μια βάση δεδομένων MySQL. Αυτό είναι ωραίο γιατί μπορείτε εύκολα να ενημερώσετε τον ιστότοπό σας από τη διεπαφή διαχείρισης με λίγα κλικ, αλλά είναι επίσης δαπανηρό από την άποψη των πόρων που χρησιμοποιούνται. Γιατί να τρέχετε το ίδιο script PHP και το MySQL ερώτημα κάθε φορά που ένας χρήστης προσγειώνεται στην αρχική σελίδα; Μπορούμε να χρησιμοποιήσουμε το βερνίκι για να αποθηκεύσουμε τις σελίδες που επισκέπτονται περισσότερο και να επιτύχουμε απίστευτα αποτελέσματα.


Αυτοί είναι ορισμένοι κανόνες που μπορεί να είναι χρήσιμοι σε μια εγκατάσταση του Wordpress:

sub vcl_recv{

# Let's make sure we aren't compressing already compressed formats.

if (req.http.Accept-Encoding) {

if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|mp3|mp4|m4v)(\?. * |)$") {

remove req.http.Accept-Encoding;

} elsif (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} elsif (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

}


if (req.url ~ "^/$") {

unset req.http.cookie;

}


# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


}


sub vcl_miss {

if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

}

if (req.url ~ "^/+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {

unset req.http.cookie;

set req.url = regsub(req.url, "\?.$", "");

}

if (req.url ~ "^/$") {

unset req.http.cookie;

}

}

sub vcl_fetch {

if (req.url ~ "^/$") {

unset beresp.http.set-cookie;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail

if (!(req.url ~ "wp-(login| admin )")) {

unset beresp.http.set-cookie;

}

}

Μπορείτε να δείτε ότι σε αυτό το παράδειγμα αποθηκεύουμε όλες τις σελίδες από τον ιστότοπό μας, αλλά για εκείνες που έχουν "wp- admin" ή "wp-login" στη διεύθυνση url, οι συμβολοσειρές είναι "ειδικές" τοποθεσίες που χρησιμοποιούνται για να συνδεθείτε Wordpress ως διαχειριστής. Ως εκ τούτου, θέλουμε να μιλήσουμε απευθείας στο διακομιστή Web και να παρακάμψουμε την προσωρινή μνήμη βερνικιού.


Φυσικά, αν χρησιμοποιείτε το Drupal, το Joomla ή έναν εξειδικευμένο ιστότοπο, πρέπει να αλλάξετε αυτούς τους κανόνες, αλλά ο στόχος είναι πάντα ο ίδιος: Για να στείλετε όλες τις δυναμικές σελίδες και τη μνήμη cache μπορείτε να το πίσω μέρος σας.

Το πρότυπο ++: Αύξηση της ανθεκτικότητας του διακομιστή

Ορισμένοι Web servers καθυστερούν επειδή έχουν υψηλό φορτίο. Το βερνίκι μπορεί να βοηθήσει και με αυτό. Μπορούμε να χρησιμοποιήσουμε μερικές ειδικές οδηγίες για να πούμε στο Βερνίκι να αποφύγει να μιλήσει με το πίσω μέρος, αν είναι κάτω ή απαντά πολύ αργά. Για αυτές τις περιπτώσεις το βερνίκι χρησιμοποιεί την οδηγία "χάριτος".


Χάρη στο πεδίο εφαρμογής του Βερνίκι σημαίνει παράδοση αντικειμένων που έληξαν με άλλο τρόπο όταν το απαιτούν οι περιστάσεις. Αυτό μπορεί να συμβεί γιατί:

  • Ο επιλεγμένος διευθυντής back-end είναι εκτός λειτουργίας
  • Ένα άλλο νήμα έχει ήδη υποβάλει ένα αίτημα στο back end που δεν έχει ακόμη ολοκληρωθεί.
Και οι δύο περιπτώσεις χειρίζονται το ίδιο στο VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Αυτή η διαμόρφωση λέει στο Varnish να ελέγξει το πίσω άκρο και να αυξήσει την περίοδο χάριτος αν έχει κάποια προβλήματα. Το παραπάνω παράδειγμα εισάγει επίσης την οδηγία "req.backend.healthy", η οποία χρησιμοποιείται για να ελέγξει ένα πίσω μέρος. Αυτό είναι πραγματικά χρήσιμο όταν έχετε πολλαπλές πίσω άκρες, οπότε ας ρίξουμε μια ματιά σε ένα πιο προηγμένο παράδειγμα.

Προηγμένη χρήση: Δημιουργήστε έναν ελαστικό διακομιστή Web σε ένα κατανεμημένο περιβάλλον

Αυτό είναι το τελικό αρχείο διαμόρφωσης με όλες τις επιλογές που έχουμε δει μέχρι στιγμής και τον ορισμό δύο πίσω άκρων με κάποια ειδική οδηγία για τον καθετήρα. Αυτός είναι ο τρόπος με τον οποίο το βερνίκι προσδιορίζει αν ένας διακομιστής Web είναι ζωντανός ή όχι.


.url

Το βερνίκι θα κάνει τα αιτήματα στο πίσω μέρος με αυτή τη διεύθυνση URL.


.τέλος χρόνου

Καθορίζει πόσο γρήγορα πρέπει να ολοκληρωθεί ο καθετήρας. Πρέπει να ορίσετε μια μονάδα ώρας με έναν αριθμό, όπως "0, 1 s", "1230 ms" ή και "1 h".


.διάστημα

Πόσο καιρό να περιμένετε ανάμεσα στις δημοσκοπήσεις. Πρέπει επίσης να ορίσετε μια μονάδα χρόνου εδώ. Παρατηρήστε ότι αυτό δεν είναι "ποσοστό" αλλά "διάστημα". Η χαμηλότερη τιμή δημοσκόπησης είναι (.timeout + .interval).


.παράθυρο

Πόσες από τις πιο πρόσφατες δημοσκοπήσεις πρέπει να λάβετε υπόψη όταν αποφασίζετε εάν η πίσω πλευρά είναι υγιής.


.κατώφλι

Πόσες από τις τελευταίες δημοσκοπήσεις του .window πρέπει να είναι ωφέλιμες για το πίσω μέρος να κηρυχθεί υγιές.


Τώρα μπορούμε να χρησιμοποιήσουμε την οδηγία "req.backend.healthy" και να πάρουμε ένα Boolean αποτέλεσμα που μας λέει αν τα back end (s) είναι ζωντανά ή όχι.

#

# Customized VCL file for serving up a Wordpress site with multiple back-ends.

#


# Define the internal network subnet.

# These are used below to allow internal access to certain files while not

# allowing access from the public internet .

acl internal {

"10.100.0.0"/24;

}


# Define the list of our backends (web servers), they Listen on port 8080


backend web1 { .host = "10.100.0.1"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}

backend web2 { .host = "10.100.0.2"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}


# Define the director that determines how to distribute incoming requests.

director default_director round-robin {

{ .backend = web1; }

{ .backend = web2; }

}


# Respond to incoming requests.

sub vcl_recv {


set req.backend = default_director;

# Use anonymous, cached pages if all backends are down.

if (!req.backend.healthy) {

unset req.http.Cookie;

set req.grace = 6h;

} else {

set req.grace = 30s;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


# Always cache the following file types for all users.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

unset req.http.Cookie;

}


}


# Code determining what to do when serving items from the web servers.

sub vcl_fetch {

# Don't allow static files to set cookies.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

# beresp == Back-end response from the web server.

unset beresp.http.set-cookie;

}


# Allow items to be stale if needed.

set beresp.grace = 6h;

}

Ένα ισχυρό εργαλείο

Αυτά είναι μερικά παραδείγματα που μπορούν να σας βοηθήσουν να ξεκινήσετε τη χρήση του βερνικιού. Αυτό το εργαλείο είναι πραγματικά ισχυρό και μπορεί να σας βοηθήσει να επιτύχετε εξαιρετική ώθηση στην απόδοση χωρίς να αγοράσετε περισσότερο υλικό ή εικονικές μηχανές. Για πολλούς διαχειριστές ιστότοπων, αυτό είναι ένα πραγματικό όφελος.

Βερνίκι: προετοιμαστείτε για να ανατραπούν!