Πιθανώς έχετε διαβάσει ότι το HTTPS ανοίγει νέα σύνδεση TCP και νέα χειραψία TLS για κάθε αίτημα API, οπότε ένα τούνελ που μένει ανοιχτό για μία ώρα φαίνεται φθηνότερο. Το πρώτο μισό αυτού είναι συνήθως λάθος. Ένας υποστηριζόμενος πελάτης επαναχρησιμοποιεί μια εγκατεστημένη σύνδεση για πολλές ανταλλαγές, και ένα μέτρο που χτίζει νέο πελάτη σε κάθε κλήση μετρά τον κύκλο ζωής και όχι την προστασία. Το υπόλοιπο της σελίδας αφορά το τι πρέπει να μετράτε αντ' αυτού.

Τι απαιτεί πραγματικά η επαναχρησιμοποίηση

Η επιμονή είναι μέρος του μοντέλου HTTP και όχι τέχνασμα: μία σύνδεση μεταφέρει πολλαπλές ανταλλαγές αιτήματος και απάντησης. Η σύνδεση τελειώνει όταν μία από τις δύο πλευρές την κλείσει, όταν ο διακομιστής αποσύρει μια αδρανή ή υπερφορτωμένη σύνδεση, ή όταν μια κεφαλίδα ή ένας κανόνας πρωτοκόλλου λέει ότι η σύνδεση δεν μπορεί να επαναχρησιμοποιηθεί. Το HTTPS τοποθετεί αυτή τη συνομιλία μέσα στο TLS χωρίς να απαιτεί νέα χειραψία για κάθε ανταλλαγή. Έτσι ένα δεύτερο αίτημα δεν επαναλαμβάνει τη χειραψία του πρώτου, εκτός αν κάτι τερμάτισε τη σύνδεση στο μεταξύ.

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

Ελέγξτε τον υποστηριζόμενο πελάτη της βιβλιοθήκης και τον κύκλο ζωής της δεξαμενής συνδέσεων αντί να υποθέσετε ότι η συγκέντρωση είναι ανοιχτή ή κλειστή. Καταγράψτε και τη διαπραγματευμένη έκδοση HTTP, γιατί το HTTP/2 και το HTTP/3 χειρίζονται την επαναχρησιμοποίηση συνδέσεων διαφορετικά από το HTTP/1.1. Αντιμετωπίστε τη διαπραγματευμένη έκδοση ως μέρος της μέτρησης και όχι ως υποσημείωση.

Γιατί η σύγκριση μετρά τον κύκλο ζωής

Το να δημιουργείτε νέο πελάτη για κάθε λειτουργία και να τον συγκρίνετε με ένα τούνελ συνδεδεμένο εδώ και μία ώρα συγκρίνει τη δημιουργία σύνδεσης με σταθερή κατάσταση. Αυτό είναι νόμιμη μέτρηση και δεν είναι HTTPS έναντι VPN. Δύο εκτελέσεις με την ίδια διαμόρφωση πελάτη περιγράφουν τη συμπεριφορά καλύτερα από μία, ειδικά όταν η πρώτη εκτέλεση ζεσταίνει έναν επιλυτή ή μια κρυφή μνήμη συνδέσεων.

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

Ξεχωρίστε την ψυχρή εγκατάσταση από τα ζεστά αιτήματα

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

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

Σχεδιάστε για τη σύνδεση που κλείνει

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

Χρησιμοποιήστε τον τεκμηριωμένο μηχανισμό επανάληψης ή ιδεμποτένσιας της υπηρεσίας αντί για έναν βρόχο που ανοίγει ξανά το socket. Δοκιμάστε την ανάκαμψη ρητά: κλείστε μια αδρανή σύνδεση και παρατηρήστε τι κάνει ο πελάτης μετά. Το άνοιγμα ξανά ενός socket δεν κάνει ασφαλή την επανάληψη μιας κλήσης που αλλάζει κατάσταση.

Επιλέξτε πρώτα το όριο και μετά ρυθμίστε

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

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

Σχετικά άρθρα