Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

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

Αυτός είναι ο λόγος για τον οποίο το DNS σχεδιάστηκε αρχικά ως ένα πρωτόκολλο με υψηλή δυνατότητα προσωρινής αποθήκευσης. Οι διαχειριστές ζωνών ορίζουν ένα χρονικό διάστημα ζωής (TTL) για μεμονωμένες εγγραφές και οι αναλυτές χρησιμοποιούν αυτές τις πληροφορίες κατά την αποθήκευση εγγραφών στη μνήμη για να αποφύγουν την περιττή κίνηση.

Είναι αποτελεσματική η προσωρινή αποθήκευση; Πριν από μερικά χρόνια, η μικρή μου έρευνα έδειξε ότι δεν ήταν τέλειο. Ας ρίξουμε μια ματιά στην τρέχουσα κατάσταση πραγμάτων.

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

Το σύνολο δεδομένων που προκύπτει αποτελείται από 1 εγγραφές (όνομα, τύπος q, TTL, χρονική σήμανση). Εδώ είναι η συνολική κατανομή TTL (ο άξονας x είναι TTL σε δευτερόλεπτα):

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Εκτός από μια μικρή αύξηση στα 86 (κυρίως για αρχεία SOA), είναι αρκετά προφανές ότι τα TTL βρίσκονται στο χαμηλό εύρος. Ας ρίξουμε μια πιο προσεκτική ματιά:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Εντάξει, τα TTL άνω της 1 ώρας δεν είναι στατιστικά σημαντικά. Ας επικεντρωθούμε λοιπόν στο εύρος 0-3600:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Τα περισσότερα TTL είναι μεταξύ 0 και 15 λεπτών:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Η συντριπτική πλειοψηφία είναι από 0 έως 5 λεπτά:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Αυτό δεν είναι πολύ καλό.

Η αθροιστική κατανομή καθιστά το πρόβλημα ακόμη πιο προφανές:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Οι μισές από τις απαντήσεις DNS έχουν TTL 1 λεπτού ή λιγότερο και τα τρία τέταρτα έχουν TTL 5 λεπτών ή λιγότερο.

Αλλά περιμένετε, είναι στην πραγματικότητα χειρότερα. Άλλωστε, αυτό είναι TTL από έγκυρους διακομιστές. Ωστόσο, οι αναλυτές-πελάτες (π.χ. δρομολογητές, τοπικές προσωρινές μνήμες) λαμβάνουν TTL από τους αναλυτές upstream και αυτό μειώνεται κάθε δευτερόλεπτο.

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

Ίσως αυτά τα πολύ χαμηλά TTL επηρεάζουν μόνο ασυνήθιστα αιτήματα και όχι δημοφιλείς ιστότοπους και API; Ας ρίξουμε μια ματιά:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Ο άξονας X είναι το TTL, ο άξονας Y είναι η δημοτικότητα ερωτημάτων.

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

Ας κάνουμε ζουμ σε:

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Ετυμηγορία: Είναι πραγματικά άσχημο. Ήταν ήδη άσχημα πριν, αλλά έγινε ακόμη χειρότερα. Η προσωρινή αποθήκευση DNS έχει γίνει σχεδόν άχρηστη. Καθώς λιγότεροι άνθρωποι χρησιμοποιούν τον αναλυτή DNS του παρόχου υπηρεσιών Διαδικτύου (ISP) τους (για καλούς λόγους), η αύξηση της καθυστέρησης γίνεται πιο αισθητή.

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

Λάβετε επίσης υπόψη ότι το λογισμικό ενδέχεται να διαφορετικά ερμηνεύουν τα χαμηλά TTL.

Γιατί έτσι;

Γιατί οι εγγραφές DNS έχουν οριστεί σε τόσο μικρό TTL;

  • Οι παλαιότεροι εξισορροπητές φορτίου παραμένουν με τις προεπιλεγμένες ρυθμίσεις.
  • Υπάρχουν μύθοι ότι η εξισορρόπηση φορτίου DNS εξαρτάται από το TTL (αυτό δεν ισχύει - από το Netscape Navigator, οι υπολογιστές-πελάτες επιλέγουν μια τυχαία διεύθυνση IP από το σύνολο RR και δοκιμάζουν προφανώς μια άλλη αν δεν μπορούν να συνδεθούν)
  • Οι διαχειριστές θέλουν να εφαρμόζουν τις αλλαγές αμέσως, επομένως είναι πιο εύκολο να προγραμματίσουν.
  • Ο διαχειριστής ενός διακομιστή DNS ή ενός εξισορροπητή φορτίου θεωρεί την εργασία του ως αποτελεσματική ανάπτυξη της ρύθμισης παραμέτρων που ζητούν οι χρήστες και όχι ως επιτάχυνση της λειτουργίας ιστότοπων και υπηρεσιών.
  • Το χαμηλό TTL προσφέρει ηρεμία.
  • Οι άνθρωποι αρχικά ορίζουν χαμηλά TTL για δοκιμές και μετά ξεχνούν να τα αλλάξουν.

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

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

Τα χαμηλά TTL οφείλονται σε μεγάλο βαθμό στις υπηρεσίες CDN και στους εξισορροπητές φορτίου, ειδικά όταν συνδυάζουν CNAME με χαμηλά TTL και εγγραφές με εξίσου χαμηλά (αλλά ανεξάρτητα) TTL:

$ drill raw.githubusercontent.com
raw.githubusercontent.com.	9	IN	CNAME	github.map.fastly.net.
github.map.fastly.net.	20	IN	A	151.101.128.133
github.map.fastly.net.	20	IN	A	151.101.192.133
github.map.fastly.net.	20	IN	A	151.101.0.133
github.map.fastly.net.	20	IN	A	151.101.64.133

Κάθε φορά που λήγει το CNAME ή οποιαδήποτε από τις εγγραφές A, πρέπει να αποστέλλεται ένα νέο αίτημα. Και τα δύο έχουν TTL 30 δευτερολέπτων, αλλά δεν είναι το ίδιο. Ο πραγματικός μέσος χρόνος TTL θα είναι 15 δευτερόλεπτα.

Αλλά περιμένετε! Είναι ακόμη χειρότερο. Μερικοί αναλυτές συμπεριφέρονται πολύ άσχημα σε αυτήν την περίπτωση με δύο συνδεδεμένα χαμηλά TTL:

$ drill raw.githubusercontent.com @4.2.2.2 raw.githubusercontent.com. 1 ΣΤΟ CNAME github.map.fastly.net. github.map.fastly.net. 1 ΣΤΟ A 151.101.16.133

Ο αναλυτής επιπέδου 3 πιθανώς εκτελείται σε BIND. Αν συνεχίσετε να στέλνετε αυτό το αίτημα, θα επιστρέφει πάντα TTL 1. Ουσιαστικά, raw.githubusercontent.com δεν αποθηκεύτηκε ποτέ στην προσωρινή μνήμη.

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

$ drill detectportal.firefox.com @1.1.1.1
detectportal.firefox.com.	25	IN	CNAME	detectportal.prod.mozaws.net.
detectportal.prod.mozaws.net.	26	IN	CNAME	detectportal.firefox.com-v2.edgesuite.net.
detectportal.firefox.com-v2.edgesuite.net.	10668	IN	CNAME	a1089.dscd.akamai.net.
a1089.dscd.akamai.net.	10	IN	A	104.123.50.106
a1089.dscd.akamai.net.	10	IN	A	104.123.50.88

Τουλάχιστον τρεις εγγραφές CNAME. Ναι. Το ένα έχει αξιοπρεπές TTL, αλλά είναι εντελώς άχρηστο. Σε άλλα CNAME το αρχικό TTL είναι 60 δευτερόλεπτα, αλλά για domains akamai.net Το μέγιστο TTL είναι 20 δευτερόλεπτα και κανένα από αυτά δεν είναι σε φάση.

Τι γίνεται με τα domains που συνεχώς κάνουν δημοσκοπήσεις σε συσκευές Apple;

$ drill 1-courier.push.apple.com @4.2.2.2
1-courier.push.apple.com.	1253	IN	CNAME	1.courier-push-apple.com.akadns.net.
1.courier-push-apple.com.akadns.net.	1	IN	CNAME	gb-courier-4.push-apple.com.akadns.net.
gb-courier-4.push-apple.com.akadns.net.	1	IN	A	17.57.146.84
gb-courier-4.push-apple.com.akadns.net.	1	IN	A	17.57.146.85

Το ίδιο πρόβλημα με τον Firefox και το TTL που κολλάνε στο 1 δευτερόλεπτο τις περισσότερες φορές όταν χρησιμοποιείται ο αναλυτής επιπέδου 3.

Dropbox;

$ drill client.dropbox.com @8.8.8.8 client.dropbox.com. 7 ΣΤΟ CNAME client.dropbox-dns.com. client.dropbox-dns.com. 59 ΣΕ A 162.125.67.3 $ τρυπάνι client.dropbox.com @4.2.2.2 client.dropbox.com. 1 ΣΤΟ CNAME client.dropbox-dns.com. client.dropbox-dns.com. 1 ΣΤΟ A 162.125.64.3

Στην ηχογράφηση safebrowsing.googleapis.com Η τιμή TTL είναι 60 δευτερόλεπτα, όπως και για τα domains του Facebook. Και πάλι, από την άποψη του πελάτη, αυτές οι τιμές μειώνονται στο μισό.

Τι θα λέγατε να ορίσετε ένα ελάχιστο TTL;

Χρησιμοποιώντας το όνομα, τον τύπο αιτήματος, το TTL και την αρχικά αποθηκευμένη χρονική σήμανση, έγραψα ένα σενάριο για την προσομοίωση 1,5 εκατομμυρίου αιτημάτων που διέρχονται από έναν αναλυτή προσωρινής αποθήκευσης, ώστε να εκτιμηθεί ο αριθμός των επιπλέον αιτημάτων που αποστέλλονται λόγω μιας ληγμένης καταχώρησης προσωρινής αποθήκευσης.

Το 47,4% των αιτημάτων υποβλήθηκαν μετά τη λήξη του υφιστάμενου αρχείου. Αυτό είναι αδικαιολόγητα υψηλό.

Ποιες θα είναι οι επιπτώσεις στην προσωρινή αποθήκευση εάν οριστεί ένα ελάχιστο TTL;

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Ο άξονας Χ είναι οι ελάχιστες τιμές TTL. Οι εγγραφές με αρχικά TTL πάνω από αυτήν την τιμή δεν επηρεάζονται.

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

Το μερίδιο των «επιπλέον» αιτημάτων μειώνεται από 47% σε 36% απλώς ορίζοντας τον ελάχιστο χρόνο λήξης (TTL) στα 5 λεπτά. Ορίζοντας ελάχιστο χρόνο TTL 15 λεπτών, ο αριθμός αυτών των αιτημάτων μειώνεται στο 29%. Ένας ελάχιστος χρόνος TTL 1 ώρας τα μειώνει στο 17%. Σημαντική διαφορά!

Τι θα λέγατε να μην αλλάξουμε τίποτα στην πλευρά του διακομιστή, αλλά να ορίσουμε τα ελάχιστα TTL στις προσωρινές μνήμες DNS του πελάτη (δρομολογητές, τοπικοί αναλυτές);

Σταματήστε να χρησιμοποιείτε το γελοίο χαμηλό TTL για DNS

Ο αριθμός των απαιτούμενων αιτημάτων μειώνεται από 47% σε 34% όταν ορίζεται ελάχιστος χρόνος TTL 5 λεπτών, σε 25% με ελάχιστο χρόνο 15 λεπτών και σε 13% με ελάχιστο χρόνο 1 ώρας. Ίσως η βέλτιστη τιμή είναι 40 λεπτά.

Ο αντίκτυπος αυτής της ελάχιστης αλλαγής είναι τεράστιος.

Ποιες είναι οι συνέπειες;

Φυσικά, η υπηρεσία μπορεί να μετεγκατασταθεί σε έναν νέο πάροχο cloud, έναν νέο διακομιστή, ένα νέο δίκτυο, απαιτώντας από τους πελάτες να χρησιμοποιούν τις πιο πρόσφατες εγγραφές DNS. Και ένα αρκετά μικρό TTL βοηθάει ώστε μια τέτοια μετάβαση να γίνει ομαλά και ανεπαίσθητα. Αλλά με τη μετάβαση σε μια νέα υποδομή, κανείς δεν περιμένει από τους πελάτες να μεταβούν σε νέες εγγραφές DNS εντός 1 λεπτού, 5 λεπτών ή 15 λεπτών. Ο ορισμός της ελάχιστης διάρκειας ζωής σε 40 λεπτά αντί για 5 λεπτά δεν θα εμποδίσει τους χρήστες να έχουν πρόσβαση στην υπηρεσία.

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

Φυσικά, τα RFC αναφέρουν ότι το TTL πρέπει να τηρείται αυστηρά. Αλλά η πραγματικότητα είναι ότι το σύστημα DNS έχει γίνει πολύ αναποτελεσματικό.

Εάν εργάζεστε με αξιόπιστους διακομιστές DNS, ελέγξτε τα TTL σας. Χρειάζεστε πραγματικά τόσο γελοία χαμηλές τιμές;

Φυσικά, υπάρχουν βάσιμοι λόγοι για τον ορισμό μικρών TTL για εγγραφές DNS. Αλλά όχι για το 75% της κίνησης DNS που παραμένει ουσιαστικά αμετάβλητο.

Και αν για κάποιο λόγο χρειάζεται πραγματικά να χρησιμοποιήσετε χαμηλά TTL για DNS, βεβαιωθείτε επίσης ότι η προσωρινή αποθήκευση δεν είναι ενεργοποιημένη στον ιστότοπό σας. Για τους ίδιους λόγους.

Εάν έχετε εκτελεσμένη μια τοπική προσωρινή μνήμη DNS, όπως π.χ. dnscrypt-proxy, το οποίο σας επιτρέπει να ορίσετε το ελάχιστο TTL, χρησιμοποιήστε αυτήν τη συνάρτηση. Αυτό είναι εντάξει. Τίποτα κακό δεν θα συμβεί. Ρυθμίστε το ελάχιστο TTL σε περίπου 40 λεπτά (2400 δευτερόλεπτα) και 1 ώρα. Αρκετά λογικό εύρος.

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster