Επιστροφή στο Webship blog

Webship μηχανική

Streaming με Webship: Υψηλή Απόδοση Χωρίς Εκχώρηση Ακρίβειας

Μάθετε πώς Webship λειτουργεί και μεταφέρει μεγάλα αρχεία μέσων μέσω HTTP/1.1, HTTP/2 και HTTP/3 χρησιμοποιώντας προσαρμοστικό kTLS, ρυθμίσεις BBR, περιορισμένα buffers και πύλες ακεραιότητας μηδενικών σφαλμάτων.

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

Webship θεωρεί αυτές τις απαιτήσεις ως ένα πρόβλημα μεταφοράς σε όληHTTP/1.1, HTTP/2, HTTP/3, άμεση παράδοση αρχείων, αντίστροφη δρομολόγηση και WebTransport. Η γρήγορη διαδρομή είναι χρήσιμη μόνο όταν διατηρεί το πλαίσιο, την ακύρωση, τα τρέιλερ, τον έλεγχο ασφαλείας και τη δεσμευμένη μνήμη.

Μέτρια χωρητικότητα ροής 100 MB

ΟWebship 1.3.1 Η χωρητικότητα εκτέλεσης του Debian μετρήθηκε με τη μεσαία διαμετακόμιση δεδομένων με ένα σταθερό εξάρτημα 100 MB. Κάθε αποδεκτό δείγμα απαιτούσε ακριβώς σώμα απόκρισης 99.943.778 byte και μηδέν πελάτη, πρωτόκολλο, μεσολαβητή, σφάλμα κύριας σελίδας, καιHTTP/3 σφάλματα απώλειας πακέτων.

| Webship λειτουργία | HTTP/1.1 TLS | HTTP/2 TLS | HTTP/3 TLS | | --- | ---: | ---: | ---: | | Άμεση παράδοση αρχείου | 4.194,8 MiB/s | 3.574,3 MiB/s | 2.096,9 MiB/s | | Αντίστροφος διακομιστής με τερματισμό TLS | 3,585.7 MiB/s | 3,355.0 MiB/s | 1,938.6 MiB/s | | Αντίστροφος διακομιστής με προώθηση TLS | 2.783,2 MiB/s | 2.135,0 MiB/s | 1.748,5 MiB/s |

Στη καταγεγραμμένη σύγκριση,Webship παρήγαγε το υψηλότερο άμεσο και τερματισμένο σε TLS μέσο όρο για κάθε μετρούμενο πρωτόκολλο. Ο πλήρης πίνακας περιλαμβάνειNginx, Lighttpd, Κάντι, HAProxy, Envoy, Pingora και Bun στη [σελίδα αξιολόγησης](/benchmarks).

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

Ένα δυαδικό, τρεις στρατηγικές μεταφοράς

Μια μεγάλη απάντηση δεν επωφελείται από την ίδια πολιτική όπως ένα μικρό έγγραφο HTML.Webship διατηρεί τη συνηθισμένη πορεία του αιτήματος συντηρητική και προωθεί μόνο μια αποδεδειγμένη μαζική απάντηση.

HTTP/1.1: λιγότερες μεταβάσεις γύρω από το αρχείο

Σε Linux, Webship διατηρεί την κεφαλίδα απόκρισης και το φορτίο του αρχείου μέσα σε ένα διάστημα TCP cork κατά την καλύτερη προσπάθεια. Μόλις μια μεγάλη απόκριση TLS πληροί τις προϋποθέσεις για τη μαζική διαδρομή, η άμεση παράδοση αρχείων μπορεί να μετακινηθεί απόRustΚαταγράφει αρχεία σε ελεγμένο μονοπάτι kernel TLS και χρησιμοποιεί το sendfile χωρίς να αντιγράψει το payload μέσω ενός buffer εφαρμογής.

Η σύνδεση ξεκινά ακόμα στο TLS χρήστη. Μικρές απαντήσεις παραμένουν εκεί.Webship ζητά τη μετάβαση kTLS μόνο μετά την απόδειξη, από ένα σώμα απάντησης μεγέθους τουλάχιστον 1 MiB, ότι η σύνδεση μεταφέρει δεδομένα χύδην.

HTTP/2: ομαδοποίηση χωρίς διακοπή του ελέγχου ροής

HTTP/2 Η πολυπλεξία καθιστά τον ανεξέλεγκτο προσωρινό αποθηκεύσιμο ακριβό.Webship Γράφει σε παρτίδες διατηρώντας τα όρια ελέγχου ροής του stream και της σύνδεσης. Για streaming υψηλής ταυτόχρονης χρήσης, ένας buffer εγγραφής TLS 128 KiB μπορεί να κρατήσει δύο πλαίσια DATA των 64 KiB, ενώ ο προϋπολογισμός αποστολής της σύνδεσης παραμένει ρητός και περιορισμένος.

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

HTTP/3: Χρονισμός QUIC αντί για kTLS

HTTP/3 ποτέ δεν χρησιμοποιεί τη διαδρομή TCP kTLS.Webship εφαρμόζει προγραμματισμό QUIC με επίγνωση μεταφοράς, περιορισμένη πακετοποίηση δεδομένων, DPLPMTUD και μικροπαρτίδες με χρονιστή ανά αντιδραστήρα. ΜεγάλοHTTP/3 απαντήσεις και αποδεκτέςWebTransport Οι συνεδρίες μπορούν να επιλέξουν BBR χωρίς να αλλάξουν την πολιτική CUBIC που χρησιμοποιείται από την κανονική κίνηση.

Ο επικεντρωμένοςHTTP/3 Η αξιολόγηση σταθερότητας χρησιμοποιούσε επτά αποδεκτά δείγματα. Η ροή τερματισμένη με TLS παρέδωσε μέση τιμή 1.938,6 MiB/s με συντελεστή μεταβλητότητας 2,12%. Η ροή με παρακάμψη TLS παρέδωσε 1.748,5 MiB/s με συντελεστή μεταβλητότητας 1,65%. Και οι δύο σειρές είχαν μηδενικά σφάλματα ακεραιότητας σώματος, πελάτη, πρωτοκόλλου και απώλειας πακέτου.

Άμεση παράδοση ή αντίστροφος διακομιστής μεσολάβησης;

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

Ένας ελάχιστος ιστότοπος πολλαπλών πρωτοκόλλων μοιάζει έτσι:

listen = "0.0.0.0:443"
workers = 8
root = "/srv/media"

[[sites]]
domain = "media.example.com"
root = "/srv/media"

[sites.protocols]
h1 = true
h2 = true
h3 = true

[sites.tls]
cert = "/etc/webship/media-cert.pem"
key = "/etc/webship/media-key.pem"

Χρησιμοποιήστε τερματισμό TLS με αντίστροφη διαμεσολάβηση ότανWebship πρέπει να δρομολογείται με βάση τη διαδρομή, να εφαρμόζονται έλεγχοι WAF ή API Shield, να επιβάλλονται όρια σώματος, να προστίθενται κεφαλίδες προώθησης ή να παρακολουθούνται πεδία HTTP:

[reverse_proxy]
enabled = true
tls_termination = true

[reverse_proxy.protocols]
h1 = true
h2 = true
h3 = true

[reverse_proxy.tls]
cert = "/etc/webship/proxy-cert.pem"
key = "/etc/webship/proxy-key.pem"

[[reverse_proxy.routes]]
domain = "media.example.com"
path_prefix = "/"
upstreams = ["10.0.0.20:8080"]

Ορίστε tls_termination = false όταν η προέλευση πρέπει να διατηρεί το απλό κείμενο της εφαρμογής και τα ενεργά κλειδιά συνεδρίας. Η διάβαση δεν μπορεί να ελέγξει κρυπτογραφημένα πεδία HTTP. Επομένως, η διάβαση TCP δρομολογεί βάσει του ClientHello SNI, ενώHTTP/3 Η διέλευση απαιτεί μία κοινή προέλευση UDP.

Συντονίστε τη μαζική ροή ρητά

Για υψηλή ταυτόχρονη πρόσβασηHTTP/2 Ροή TLSWebship καταγράφει αυτές τις ρυθμίσεις που σχετίζονται με τη διαδικασία:

[runtime.settings]
h2_tls_write_buffer_bytes = "131072"
proxy_h2_tls_max_send_buffer_bytes = "131072"
proxy_h2_tls_connection_send_buffer_bytes = "33554432"

Ο παραπάνω προϋπολογισμός σύνδεσης παρέχει 128 KiB πίστωση για 256 ενεργά ρεύματα. Αντιμετωπίστε το ως απόφαση χωρητικότητας και όχι ως καθολική προεπιλογή. Μετρήστε τη μνήμη, την καθυστέρηση και τη διαμετακομιστική ικανότητα με την αναμενόμενη ταυτόχρονη δραστηριότητα πριν την αυξήσετε.

Σε Linux, φορτώστε τα modules kernel TLS και BBR και επιτρέψτε τοWebship λογαριασμός υπηρεσίας για να επιλέξει BBR.Webship αποτυγχάνει πριν από τη δέσμευση όταν η απαιτούμενη ικανότητα του πυρήνα δεν είναι διαθέσιμη, έτσι μια ανάπτυξη δεν μπορεί να ισχυριστεί σιωπηλά την βελτιστοποιημένη διαδρομή ενώ εκτελείται χωρίς αυτή. Άλλα λειτουργικά συστήματα διατηρούν τη φορητήRustls και διαδρομές ελέγχου συμφόρησης τεκμηριωμένες για την πλατφόρμα τους.

WebTransport είναι ένα διαφορετικό σχήμα ροής

WebTransport συνδυάζει αξιόπιστα streams και μη αξιόπιστα datagrams σε μια ασφαλή συνεδρία. Δεν χρησιμοποιεί TCP kTLS.WebshipΤο περιορισμένο διαγνωστικό του σημείο επικύρωσης επικυρώνει τις προελεύσεις και επιβάλλει όρια συνεδρίας, ροής, κάψουλας, δεμάτων, byte και χρόνου αδράνειας.

Στη δοκιμή χωρητικότητας 1.3.1, άμεσοWebTransport έφτασε τα 1.018,1 MiB/s για αξιόπιστα streams και 1.038,9 MiB/s για datagrams. Η διέλευση TLS έφτασε τα 548,6 MiB/s και 629,7 MiB/s αντίστοιχα. Και οι δύο λειτουργίες πέρασαν και τα πέντε δείγματα με μηδέν απορριφθέντα δείγματα, μηδέν χαμένα datagrams και μηδέν σοβαρά σφάλματα πελάτη.

ΠροτιμώHTTP/3 για νέουςWebTransport πελάτες. Το HTTP/2 υπάρχει διαδρομή για συμβατότητα με τις παλαιότερες ρυθμίσεις ληγμένου σχεδίου.

Τι να επαληθεύσετε πριν την παραγωγική κυκλοφορία

  1. Δοκιμάστε τα ακριβή μεγέθη μέσων ή τεχνημάτων που θα προσφέρετε, όχι μόνο μια μικρή συνθετική απάντηση.
  2. Επαληθεύστε το μήκος της απάντησης και το σύνοψη περιεχομένου στον πελάτη.
  3. Ακύρωση άσκησης, αιτήματα εύρους, αργοί αναγνώστες και συμπεριφορά μισο-κλεισίματος προέλευσης.
  4. Μετρήστε τη διατηρούμενη απόδοση μαζί με την CPU, τη μνήμη, τα σφάλματα υποδοχών, τις επαναμεταδόσεις και την καθυστερημένη καθυστέρηση.
  5. Επαληθεύστε ξεχωριστά τις άμεσες, TLS-τερματισμένες και διαμεσολαβητικές λειτουργίες· έχουν διαφορετικά όρια ασφάλειας και δρομολόγησης.
  6. Κρατήστε την παρακολούθηση απενεργοποιημένη για την κανονική παραγωγική κίνηση, στη συνέχεια ενεργοποιήστε σκόπιμα περιορισμένη διάγνωση όταν διερευνάτε.
  7. Επανέλεγξε το Linux kTLS και την προετοιμασία BBR μετά από αλλαγές στον πυρήνα, το container ή το sandbox του systemd.

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

Διάβασε ολόκληρο το [Webship 1.3.1 τεκμηρίωση](/docs/1.3.1), ελέγξτε τη [μεθοδολογία αξιολόγησης και τον πίνακα ανταγωνιστών](/benchmarks), ή κατεβάστε μια υπογεγραμμένη έκδοση από τα [Downloads](/downloads).