Παρουσιάστηκε ο εννοιολογικός διακομιστής HTTP που χρησιμοποιεί το υποσύστημα Linux io_uring

Δημοσιεύτηκε ένας συμπαγής διακομιστής HTTP, ο οποίος είναι αξιοσημείωτος για τη χρήση της ασύγχρονης διεπαφής εισόδου/εξόδου io_uring που παρέχεται στον πυρήνα του Linux. Ο διακομιστής υποστηρίζει το πρωτόκολλο HTTP/1.1 και έχει σχεδιαστεί για χαμηλή κατανάλωση πόρων, παρέχοντας παράλληλα την απαραίτητη λειτουργικότητα. Για παράδειγμα, το hinsightd υποστηρίζει TLS, αντίστροφο διακομιστή μεσολάβησης (rproxy), αποθήκευση δυναμικά παραγόμενου περιεχομένου στο τοπικό σύστημα αρχείων, συμπίεση δεδομένων on-the-fly, επανεκκίνηση χωρίς σύνδεση, σύνδεση δυναμικών χειριστών αιτημάτων χρησιμοποιώντας μηχανισμούς FastCGI και CGI. Ο κώδικας του έργου είναι γραμμένος σε γλώσσα C και διανέμεται με την άδεια BSD.

Για την επεξεργασία της διαμόρφωσης, την εγγραφή προσθηκών και τη δημιουργία χειριστών αιτημάτων, παρέχεται η δυνατότητα χρήσης της γλώσσας Lua, ενώ τέτοιοι χειριστές μπορούν να οριστούν απευθείας στο αρχείο διαμόρφωσης διακομιστή. Με τη μορφή προσθηκών, λειτουργίες όπως η αλλαγή της μορφής καταγραφής, η σύνδεση μεμονωμένων αρχείων καταγραφής με εικονικούς κεντρικούς υπολογιστές, ο καθορισμός στρατηγικής εξισορρόπησης φορτίου, έλεγχος ταυτότητας HTTP, επανεγγραφή URL και προγραμματισμένη προγραμματισμένη εργασία (για παράδειγμα, ενημέρωση πιστοποιητικών Let's Encrypt) υλοποιούνται στο μορφή πρόσθετων.

Ο διακομιστής συνοδεύεται από μια βιβλιοθήκη για την ενσωμάτωση της λειτουργικότητας της εννοιολογικής λειτουργίας στις εφαρμογές σας. Το Hinsightd περιλαμβάνει επίσης ενσωματωμένη λειτουργία για την αποστολή αιτημάτων HTTP από τη γραμμή εντολών, για παράδειγμα, για να φορτώσετε μια σελίδα, μπορείτε να εκτελέσετε το "hinsightd -d URL". Ο διακομιστής είναι πολύ συμπαγής και χρειάζεται περίπου 200KB μεταγλωττισμένη (100KB εκτελέσιμη και 100KB κοινόχρηστη βιβλιοθήκη). Οι εξωτερικές εξαρτήσεις περιλαμβάνουν μόνο libc, lua, liburing και zlib και προαιρετικά openssl/libressl και ffcall.

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

Τα αποτελέσματα της δοκιμής συνθετικής απόδοσης (χωρίς βελτιστοποιήσεις στη διαμόρφωση ως έχουν) από το βοηθητικό πρόγραμμα ab κατά την εκτέλεση 250 και 500 (σε παρενθέσεις) παράλληλων αιτημάτων ("ab -k -c 250 -n 10000 http://localhost/"):

  • hinsightd/0.9.17 - 63035.01 αιτήματα ανά δευτερόλεπτο (54984.63)
  • lighttpd/1.4.67 - 53693.29 αιτήματα ανά δευτερόλεπτο (1613.59)
  • Apache/2.4.54 - 37474.10 αιτήματα ανά δευτερόλεπτο (34305.55)
  • Caddy/2.6.2 - 35412.02 αιτήματα ανά δευτερόλεπτο (33995.57)
  • nginx/1.23.2 - 26673.64 αιτήματα ανά δευτερόλεπτο (26172.73)

Πηγή: opennet.ru

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