Cache καλαμαριών - μέρος 2

Το Squid δεν είναι μόνο υπηρεσία μεσολάβησης και προσωρινής αποθήκευσης, αλλά μπορεί να κάνει πολλά περισσότερα: διαχείριση acl (λίστες πρόσβασης), φιλτράρισμα περιεχομένου, μπορεί ακόμη και να κάνει ssl φιλτράρισμα ακόμη και σε διαφανή λειτουργία (μέθοδος διακομιστή μεσολάβησης - χωρίς να χρειάζεται να διαμορφωθεί σε ρυθμίσεις διακομιστή μεσολάβησης) από τα προγράμματα περιήγησής τους, είναι σαν ο άνθρωπος στη μέση, κανείς δεν ξέρει ότι είναι εκεί). Επομένως, συνήθως βλέπω πώς χάνεται το πλήρες δυναμικό αυτής της εφαρμογής από το να μην ξέρω πώς να ρυθμίσω κάθε ένα από τα μέρη του.

Τώρα το ενδιαφέρον που κάνει το καλαμάρι είναι η προσωρινή μνήμη (κατά τη γνώμη μου). Θα μου πείτε, γιατί cache; Ο λόγος είναι απλός, η καλύτερη διαχείριση της χρήσης της ταχύτητάς σας και το εύρος ζώνης είναι το κύριο πράγμα. Σκεφτείτε προσεκτικά, 1000 άτομα στην εταιρεία σας συμβουλεύονται κάθε 5 λεπτά, κοινές σελίδες, Google, Hotmail, Gmail κ.λπ. έτσι ώστε να κατεβάζετε εικόνες, πανό, διαφημίσεις, περιεχόμενο HTML ξανά και ξανά, όλα αυτά είναι στατικά πράγματα, όχι Αλλάζουν τόσο συχνά, καλύτερα να τα αποθηκεύουν στο τοπικό σας δίκτυο και να παραδίδουν ένα αντίγραφο που θεωρείτε πρόσφατο στις διαμορφώσεις που θεωρήσατε.

Πώς να το κάνετε; Απλό με την ακόλουθη πρόταση:

refresh_pattern [-i] regex min percent max [options]

Όπως λέω πάντα, μην πιστεύετε τα πάντα, γι' αυτό σας ενθαρρύνω να διαβάσετε από την επίσημη πηγή. Σας προτείνω να διαβάσετε το εγχειρίδιο για αυτόν τον κανόνα ΕΔΩ.

Η πρόταση refresh_pattern θα είναι πάντα η ετικέτα μας για την προσθήκη νέων παραμέτρων στην προσωρινή μνήμη.

Είναι σημαντικό, οι λίστες προσωρινής αποθήκευσης πρέπει να είναι διαδοχικές, επειδή μόλις ταιριάζει με την πρώτη που ταιριάζει με το αντικείμενο, δεν θα συνεχίσει να διαβάζει τους άλλους κανόνες σας

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

'Ελάχιστο': Αυτός είναι ο χρόνος (σε λεπτά) που ένα αντικείμενο θα θεωρείται "φρέσκο" εάν δεν έχει σαφή ετικέτα "έληξε". Από προεπιλογή, το Squid συνιστά το 0, επειδή ορισμένες δυναμικές εφαρμογές ενδέχεται να συμπεριφέρονται περίεργα. Αυτή η τιμή θα πρέπει να είναι ένας αριθμός που θεωρείτε χρήσιμος και αποτελεσματικός για τα στοιχεία που θέλετε να αποθηκεύσετε στην προσωρινή μνήμη. Για παράδειγμα, τα 1440 λεπτά (μία ημέρα) μου φαίνονται καλά για JPG. Δεν είναι ότι οι εικόνες σε μια ανάρτηση σε έναν ιστότοπο αλλάζουν κάθε 5 λεπτά.

Το «ποσοστό» είναι το ποσοστό της ηλικίας ενός αντικειμένου (από την τελευταία τροποποίηση) που θα θεωρείται «πρόσφατο» ή «φρέσκο». Για παράδειγμα, εάν επαναφορτώνετε ή ανανεώνετε συνεχώς μια ιστοσελίδα για να δείτε τις πιο πρόσφατες τροποποιήσεις, το Squid μπορεί να λάβει υπόψη ότι εάν το αντικείμενο έχει φτάσει, ας πούμε, στο 50% του χρόνου μεταξύ της ελάχιστης και της μέγιστης τιμής , θα κατεβάσει ξανά αυτό το αντικείμενο από το διαδίκτυο και θα σας δώσει ένα νέο αντίγραφο.

Το «Μέγιστο» είναι το όριο πάνω ή ίσο με το «Ελάχιστο» για το χρονικό διάστημα που ένα αντικείμενο θεωρείται «πρόσφατο ή φρέσκο». Ας υποθέσουμε ότι μια εικόνα σε μια σελίδα προβλήθηκε μόνο μία φορά από έναν χρήστη. Αυτό το αντικείμενο έχει ήδη φτάσει στον ελάχιστο χρόνο του , αλλά όχι στον μέγιστο χρόνο . Έτσι, όταν προβληθεί ξανά, θα παραδοθεί ένα αντίγραφο που είναι αποθηκευμένο στην προσωρινή μνήμη.

Options:
override-expire
override-lastmod
reload-into-ims
ignore-reload
ignore-no-store
ignore-private
max-stale=NN
refresh-ims
store-stale

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

override-expire

Επιβάλλει τον ελάχιστο χρόνο ενός αντικειμένου, ακόμα και όταν ο διακομιστής έστειλε μικρότερο χρόνο λήξης (π.χ. πράγματα όπως κεφαλίδα ή Cache-Control: max-age). Αν το κάνουμε αυτό, θα εμφανιστεί μια "προειδοποίηση" που λέει κάτι τέτοιο "ΠΑΡΑΒΕΙ το πρότυπο HTTP", αλλά αυτό είναι μόνο προειδοποιήσεις που μπορούμε να αγνοήσουμε. Τώρα, εάν ο χρόνος που στέλνει ένας διακομιστής είναι μεγαλύτερος, τότε το καλαμάρι θα πάρει τον χρόνο (λήξη) του διακομιστή

override-lastmod

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

reload-into-ims

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

ignore-reload

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

ignore-no-store

Αγνοήστε οποιονδήποτε κανόνα στις κεφαλίδες για να μην αποθηκεύονται στην κρυφή μνήμη, για παράδειγμα βίντεο

ignore-private

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

refresh-ims

Το Squid έρχεται σε επαφή με τον διακομιστή, για να εγγυηθεί εάν το αντικείμενο είναι το νεότερο. Εάν είναι τότε θα παραδώσει την προσωρινή μνήμη

store-stale

Το Squid θα αποθηκεύσει όλες αυτές τις απαντήσεις, ακόμα κι αν δεν έχουν ημερομηνία λήξης, αυτό είναι πολύ ανέφικτο, καθώς συνήθως δεν μπορούν να επαναχρησιμοποιηθούν. Εάν αποφασίσετε να το ενεργοποιήσετε, πρέπει να δηλώσετε max-stale = NN

max-stale=NN

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

Ακολουθεί ένας πίνακας για το πώς λειτουργεί η κατάσταση "FRESH" σύμφωνα με τις τιμές που έχουμε συζητήσει:

  • FRESH εάν λήξει> τώρα, αλλιώς STALE
  • ΕΚΠΤΩΣΗ εάν η ηλικία> μέγ
  • ΦΡΕΣΚΑ εάν ο συντελεστής lm <τοις εκατό, αλλιώς STALE
  • ΦΡΕΣΚΑ εάν η ηλικία <λεπτό άλλο STALE

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

refresh_pattern -i \.(3gp|7z|ace|asx|bin|deb|divx|dvr-ms|ram|rpm|exe|inc|cab|qt)$ 43200 99% 43200 ignore-no-store ignore-must-revalidate override-expire override-lastmod reload-into-ims

refresh_pattern -i \.(rar|jar|gz|tgz|bz2|iso|m1v|m2(v|p)|mo(d|v)|arj|lha|lzh|zip|tar)$ 43200 99% 43200 ignore-no-store ignore-must-revalidate override-expire override-lastmod reload-into-ims

refresh_pattern -i \.(jp(e?g|e|2)|gif|pn[pg]|bm?|tiff?|ico|swf|dat|ad|txt|dll)$ 43200 99% 43200 ignore-no-store ignore-must-revalidate override-expire override-lastmod reload-into-ims

refresh_pattern -i \.(avi|ac4|mp(e?g|a|e|1|2|3|4)|mk(a|v)|ms(i|u|p)|og(x|v|a|g)|rm|r(a|p)m|snd|vob)$ 43200 99% 43200 ignore-no-store ignore-must-revalidate override-expire override-lastmod reload-into-ims

refresh_pattern -i \.(pp(t?x)|s|t)|pdf|rtf|wax|wm(a|v)|wmx|wpl|cb(r|z|t)|xl(s?x)|do(c?x)|flv|x-flv)$ 43200 99% 43200 ignore-no-store ignore-must-revalidate override-expire override-lastmod reload-into-ims
cache_mem 8092 MB

Τώρα, η προσωρινή αποθήκευση δεν γίνεται μόνο στον σκληρό δίσκο. Μπορούμε επίσης να αποθηκεύσουμε προσωρινά στη μνήμη RAM. Αυτή η τιμή ισχύει ανά διεργασία Squid, επομένως θα πρέπει να τη λαμβάνετε υπόψη όταν χρησιμοποιείτε ανακατεύθυντες όπως το SquidGuard.

maximum_object_size_in_memory 1024 KB

Το μέγιστο μέγεθος του αντικειμένου στη μνήμη που θα αποθηκεύσει το καλαμάρι στη μνήμη RAM. Μπορείτε επίσης να δηλώσετε ένα ελάχιστο.


memory_replacement_policy heap GDSF
cache_replacement_policy heap GDSF

Όπως μπορείτε να δείτε, το ένα είναι η πολιτική για την αντικατάσταση της προσωρινής μνήμης στη μνήμη RAM και μια άλλη στον σκληρό δίσκο. Υπάρχουν 2 πολιτικές GDSF και LFUDA. Το πρώτο επιδιώκει να βελτιώσει το ποσοστό των επισκέψεων της προσωρινής μνήμης, έχοντας πολλά μικρά αντικείμενα στο χέρι, το δεύτερο αναζητά το αντίθετο, κρατά αντικείμενα στην κρυφή μνήμη ανεξάρτητα από το μέγεθός τους.

Το ερώτημα που φαντάζομαι ότι με ρωτάτε αυτή τη στιγμή είναι, τι χρήση χρησιμοποιώ; Λοιπόν, αν θεωρήσετε ότι στο περιβάλλον σας κάνουν πολλά ερωτήματα και λίγες λήψεις χρησιμοποιούν το GDSF εάν, αντίθετα, κάνουν πολλές λήψεις και λίγα ερωτήματα LFUDA. Ότι αν προτείνω το LFUDA όταν πρόκειται να το κάνετε, δεν ξέρω, η προσωρινή μνήμη σε 1 TB δίσκου, είναι πιο αποτελεσματική.

maximum_object_size 4 MB

Το μέγιστο μέγεθος που μπορεί να έχει ένα αντικείμενο να αποθηκευτεί

cache_dir aufs /media/proxy249/cache 100 16 256

Πού θα αποθηκευτεί η προσωρινή μνήμη, προσοχή εδώ, είναι σημαντικό αν χρησιμοποιείτε ufs, aufs ή diskd, και τα 3 λειτουργούν περισσότερο ή λιγότερο το ίδιο, η διαφορά είναι ότι τα aufs και diskd λειτουργούν με ξεχωριστές διαδικασίες για να κάνουν τις λειτουργίες I / O στο σκληρό δίσκο και αποφύγετε ότι οι διαδικασίες καλαμαριού κρέμονται κατά τη διάρκεια αυτών των λειτουργιών, επιπλέον μπορείτε να καθορίσετε τον αριθμό των νημάτων που θα έχετε για αυτήν την εργασία. Συνιστώ aufs εάν έχετε μια καλή ομάδα.

Μέγεθος 100 (megabyte), μπορείτε να βάλετε 100000 είναι σχεδόν 100 GB εξαρτάται από τη διαθεσιμότητά σας. Το 16 είναι ο αριθμός των φακέλων και το 256 είναι ο αριθμός των υποφακέλων. Μπορείτε να παίξετε και με τις δύο τιμές, εξαρτάται από το πόσο γρήγορα είναι οι δίσκοι σας και από πόρους που έχετε.


cache_swap_low 90
cache_swap_high 95

Αυτές οι επιλογές είναι οι τιμές αντικατάστασης των αντικειμένων, είναι η ελάχιστη και μέγιστη τιμή ως υδατογράφημα σύμφωνα με το καλαμάρι, όπου αυτοί οι αριθμοί είναι σε ποσοστό (%) και σε μια πολύ μικρή κρυφή μνήμη, θα ήταν 5% όπως αυτή τη στιγμή ας πούμε 300 αντικείμενα ανά δευτερόλεπτο, αλλά σε πολύ μεγάλες κρυφές μνήμες θα μιλούσαμε για χιλιάδες MB

Λοιπόν, αυτά είναι όλα προς το παρόν. Σχολιάστε και λάβετε υπόψη όσους μου είπαν ότι δεν μπορούσαν να αποθηκεύσουν προσωρινά και να φιλτράρουν σελίδες HTTPS (SSL) σε Squid 3.5 ή νεότερη έκδοση. Θα σας το παρουσιάσω σύντομα, οπότε μείνετε συντονισμένοι σε αυτό το ιστολόγιο.


Προσθήκη ως προτιμώμενης πηγής στην Google