Το Cloudflare άλλαξε από το NGINX στον δικό του διακομιστή μεσολάβησης Pingora γραμμένο σε Rust

Η Cloudflare ανακοίνωσε ότι μεταφέρει το δίκτυο παράδοσης περιεχομένου της για να χρησιμοποιήσει τον διακομιστή μεσολάβησης Pingora, γραμμένο σε Rust. Ο νέος διακομιστής μεσολάβησης έχει αντικαταστήσει τη διαμόρφωση που βασίζεται σε διακομιστή NGINX με σενάρια Lua και χειρίζεται πάνω από ένα τρισεκατομμύριο αιτήματα την ημέρα. Σημειώνεται ότι η μετάβαση σε έναν εξειδικευμένο διακομιστή μεσολάβησης επέτρεψε όχι μόνο την εφαρμογή νέων λειτουργιών και την αύξηση της ασφάλειας λόγω ασφαλούς εργασίας με τη μνήμη, αλλά οδήγησε επίσης σε σημαντική αύξηση στην απόδοση και στην εξοικονόμηση πόρων - μια λύση που βασίζεται στο Pingora δεν απαιτεί τη χρήση του Lua, επομένως καταναλώνει 70% λιγότερους πόρους CPU και 67% λιγότερη μνήμη ενώ διαχειρίζεται τον ίδιο όγκο επισκεψιμότητας.

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

Αντί για μια αρχιτεκτονική με διαχωρισμό αιτημάτων σε ξεχωριστές διεργασίες εργαζομένων (εργαζομένων), το Pingora χρησιμοποιεί ένα μοντέλο πολλαπλών νημάτων, το οποίο στα σενάρια χρήσης του Cloudflare (υψηλή συγκέντρωση επισκεψιμότητας από διαφορετικούς ιστότοπους με μεγάλη στατιστική μετατόπιση) έδειξε μια πιο αποτελεσματική κατανομή πόρων μεταξύ Πυρήνες CPU. Συγκεκριμένα, η δέσμευση μη ισορροπημένων αιτημάτων σε διεργασίες στο nginx οδήγησε σε μη ισορροπημένο φορτίο στους πυρήνες της CPU, με αποτέλεσμα τα αιτήματα έντασης πόρων και ο αποκλεισμός I/O να επιβραδύνουν την επεξεργασία άλλων αιτημάτων. Επιπλέον, η σύνδεση της ομάδας σύνδεσης με τις διαδικασίες χειριστή δεν επέτρεψε την επαναχρησιμοποίηση ήδη εγκατεστημένων συνδέσεων από άλλες διεργασίες χειριστή, γεγονός που μειώνει την αποτελεσματικότητα όταν υπάρχει μεγάλος αριθμός διεργασιών χειριστή.

nginx:

Το Cloudflare άλλαξε από το NGINX στον δικό του διακομιστή μεσολάβησης Pingora γραμμένο σε Rust

Pingora:

Το Cloudflare άλλαξε από το NGINX στον δικό του διακομιστή μεσολάβησης Pingora γραμμένο σε Rust

Η εισαγωγή του Pingora κατέστησε δυνατή τη μείωση του αριθμού των νέων εργασιών εγκατάστασης σύνδεσης κατά 160 φορές και την αύξηση του μεριδίου των επαναχρησιμοποιούμενων αιτημάτων από 87.1% σε 99.92%. Εκτός από τη μείωση των επανασυνδέσεων και την αποτελεσματικότερη χρήση των πυρήνων της CPU, η απόδοση του νέου διακομιστή μεσολάβησης οφείλεται κυρίως στην απαλλαγή από τους αργούς χειριστές Lua που χρησιμοποιούνται με το nginx.

Η γλώσσα Rust επιλέχθηκε ως επιτρέπουσα υψηλή απόδοση σε συνδυασμό με τη διαθεσιμότητα εργαλείων που είναι ασφαλή για τη μνήμη. Αναφέρεται ότι παρά τα υψηλά προσόντα των μηχανικών Cloudflare και τις κριτικές κώδικα γραμμένες στη γλώσσα C, δεν κατέστη δυνατό να αποφευχθούν σφάλματα που οδηγούν σε προβλήματα μνήμης (για παράδειγμα, μια ευπάθεια στον αναλυτή HTML). Όσο για τον νέο κώδικα, μιλήσαμε για περιπτώσεις ανάλυσης σφαλμάτων στο Pingora, που αποδείχθηκε ότι δεν προκλήθηκαν από προβλήματα στην εφαρμογή, αλλά από σφάλμα στον πυρήνα του Linux και αστοχίες υλικού.

Επιπλέον, μπορεί να σημειωθεί ότι ο Linus Torvalds σχολίασε τη συμπερίληψη υποστήριξης για τη γλώσσα Rust στον πυρήνα Linux, που εκφράστηκε στο συνέδριο Open-Source Summit Europe που πραγματοποιείται αυτές τις μέρες. Ο πυρήνας 6.0 δεν περιελάμβανε ενημερώσεις κώδικα για την ανάπτυξη προγραμμάτων οδήγησης συσκευών στη γλώσσα Rust, αλλά σύμφωνα με τον Linus, είναι πιθανό να υιοθετηθούν στον πυρήνα 6.1, δεν πρόκειται να τραβήξει με την ενοποίηση. Ως κίνητρο για την προσθήκη υποστήριξης για το Rust, εκτός από τον θετικό αντίκτυπο στην ασφάλεια, ο Linus ζητά επίσης την ευκαιρία να αυξηθεί το ενδιαφέρον για την εργασία στον πυρήνα των νέων συμμετεχόντων, κάτι που είναι σημαντικό στο πλαίσιο των παλιών χρόνων.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο