OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογώνΑναδημοσιεύουμε την απομαγνητοφώνηση από το συνέδριο HighLoad++ 2016, που πραγματοποιήθηκε στο Skolkovo κοντά στη Μόσχα στις 7-8 Νοεμβρίου πέρυσι. Βλαντιμίρ Προτάσοφ λέει πώς να επεκτείνετε τη λειτουργικότητα του NGINX με το OpenResty και το Lua.

Γεια σε όλους, με λένε Vladimir Protasov, εργάζομαι για τους Parallels. Θα σου πω λίγα λόγια για τον εαυτό μου. Ξοδεύω τα τρία τέταρτα της ζωής μου γράφοντας κώδικα. Έγινα προγραμματιστής μέχρι τον πυρήνα με την κυριολεκτική έννοια: μερικές φορές βλέπω κώδικα στα όνειρά μου. Το ένα τέταρτο της ζωής είναι βιομηχανική ανάπτυξη, γράφοντας κώδικα που πηγαίνει κατευθείαν στην παραγωγή. Κωδικός που κάποιοι από εσάς χρησιμοποιείτε αλλά δεν τον γνωρίζετε.

Για να ξέρετε πόσο άσχημα ήταν. Όταν ήμουν λίγο μικρός, μπήκα και μου έδωσαν αυτές τις δύο βάσεις δεδομένων terabyte. Είναι τώρα εδώ για όλους highload. Πήγαινα σε συνέδρια και ρώτησα: «Παιδιά, πείτε μου, έχετε μεγάλα δεδομένα, είναι όλα ωραία; Πόσες βάσεις έχεις εκεί; Μου απάντησαν: "Έχουμε 100 gigabyte!" Είπα: "Ωραία, 100 gigabyte!" Και σκέφτηκα πώς να σώσω τακτικά το πρόσωπο του πόκερ. Νομίζεις, ναι, τα παιδιά είναι κουλ, και μετά επιστρέφεις και ασχολείσαι με αυτές τις βάσεις δεδομένων πολλών terabyte. Και αυτό είναι να είσαι junior. Μπορείτε να φανταστείτε τι επιτυχία είναι;

Ξέρω περισσότερες από 20 γλώσσες προγραμματισμού. Αυτό έπρεπε να καταλάβω κατά τη διάρκεια της εργασίας. Σου δίνουν κώδικα σε Erlang, σε C, σε C++, σε Lua, σε Python, σε Ruby, σε κάτι άλλο, και πρέπει να τα κόψεις όλα. Γενικά, έπρεπε. Δεν ήταν δυνατός ο ακριβής υπολογισμός του αριθμού, αλλά κάπου γύρω στο 20 χάθηκε ο αριθμός.

Αφού όλοι εδώ ξέρουν τι είναι το Parallels και τι κάνουμε, δεν θα μιλήσω για το πόσο cool είμαστε και τι κάνουμε. Θα σας πω μόνο ότι έχουμε 13 γραφεία σε όλο τον κόσμο, περισσότερους από 300 υπαλλήλους, ανάπτυξη στη Μόσχα, το Ταλίν και τη Μάλτα. Εάν θέλετε, μπορείτε να πάρετε και να μετακομίσετε στη Μάλτα, εάν έχει κρύο το χειμώνα και πρέπει να ζεστάνετε την πλάτη σας.

Συγκεκριμένα, το τμήμα μας γράφει σε Python 2. Είμαστε στην επιχείρηση και δεν έχουμε χρόνο να εισαγάγουμε μοδάτες τεχνολογίες, οπότε υποφέρουμε. Έχουμε το Django, γιατί έχει τα πάντα, και πήραμε το περίσσευμα και το πετάξαμε. Επίσης MySQL, Redis και NGINX. Έχουμε επίσης πολλά άλλα ωραία πράγματα. Έχουμε MongoDB, έχουμε κουνέλια που τρέχουν, απλά δεν έχουμε τίποτα - αλλά δεν είναι δικό μου και δεν το κάνω.

OpenResty

Είπα για τον εαυτό μου. Ας δούμε τι θα μιλήσω σήμερα:

  • Τι είναι το OpenResty και με τι τρώγεται;
  • Γιατί να εφεύρουμε ξανά τον τροχό όταν έχουμε Python, NodeJS, PHP, Go και άλλα ωραία πράγματα με τα οποία όλοι είναι ευχαριστημένοι;
  • Και μερικά παραδείγματα από την πραγματική ζωή. Έπρεπε να κόψω πολύ την αναφορά, γιατί την πήρα για 3,5 ώρες, οπότε θα υπάρχουν λίγα παραδείγματα.

Το OpenResty είναι NGINX. Χάρη σε αυτόν, έχουμε έναν πλήρη διακομιστή web, ο οποίος είναι καλά γραμμένος, λειτουργεί γρήγορα. Νομίζω ότι οι περισσότεροι από εμάς χρησιμοποιούμε το NGINX στην παραγωγή. Όλοι ξέρετε ότι είναι γρήγορος και κουλ. Έκαναν δροσερό σύγχρονο I/O σε αυτό, οπότε δεν χρειάζεται να κυκλώνουμε τίποτα με τον ίδιο τρόπο που κυκλοφόρησε το gevent στην Python. Το Gevent είναι ωραίο, ωραίο, αλλά αν γράψετε C-code και κάτι πάει στραβά με το gevent, θα τρελαθείτε να το διορθώσετε. Είχα εμπειρία: χρειάστηκαν δύο ολόκληρες μέρες για να καταλάβω τι πήγε στραβά εκεί. Αν κάποιος δεν είχε σκάψει για μερικές εβδομάδες πριν, δεν είχε βρει το πρόβλημα, δεν το έγραφε στο Διαδίκτυο και δεν το έβρισκε η Google, τότε θα είχαμε τρελαθεί εντελώς.

Το NGINX κάνει ήδη προσωρινή αποθήκευση και στατικό περιεχόμενο. Δεν χρειάζεται να ανησυχείτε για το πώς να το κάνετε ανθρώπινα, για να μην επιβραδύνετε κάπου, για να μην χάσετε κάπου τους περιγραφείς. Το Nginx είναι πολύ βολικό στην ανάπτυξη, δεν χρειάζεται να σκεφτείτε τι να πάρετε - WSGI, PHP-FPM, Gunicorn, Unicorn. Το Nginx εγκαταστάθηκε, δόθηκε στους διαχειριστές, ξέρουν πώς να το δουλέψουν. Το Nginx επεξεργάζεται αιτήματα με δομημένο τρόπο. Θα μιλήσω για αυτό λίγο αργότερα. Με λίγα λόγια, έχει μια φάση που μόλις δέχτηκε το αίτημα, πότε επεξεργάστηκε και πότε έδωσε το περιεχόμενο στον χρήστη.

Το Nginx είναι ωραίο, αλλά υπάρχει ένα πρόβλημα: δεν είναι αρκετά ευέλικτο, ακόμη και με όλα εκείνα τα όμορφα χαρακτηριστικά που έβαλαν τα παιδιά στη διαμόρφωση, παρά το γεγονός ότι μπορεί να προσαρμοστεί. Αυτή η δύναμη δεν είναι αρκετή. Επομένως, τα παιδιά από το Taobao κάποτε, νομίζω πριν από οκτώ περίπου χρόνια, έφτιαξαν τον Λούα σε αυτό. Τι δίνει;

  • Μέγεθος. Ειναι μικρο. Το LuaJIT δίνει κάπου 100-200 kilobyte επιβάρυνση μνήμης και ελάχιστη επιβάρυνση επιδόσεων.
  • ταχύτητα. Ο διερμηνέας LuaJIT είναι κοντά στο C σε πολλές περιπτώσεις, σε ορισμένες περιπτώσεις χάνει από την Java, σε ορισμένες τον προσπερνά. Για ένα διάστημα, θεωρήθηκε state of the art, ο πιο cool μεταγλωττιστής JIT. Τώρα υπάρχουν πιο ψυχρά, αλλά είναι πολύ βαριά, για παράδειγμα, το ίδιο V8. Ορισμένοι διερμηνείς JS και Java HotSpot είναι ταχύτεροι σε ορισμένα σημεία, αλλά εξακολουθούν να χάνουν σε ορισμένα σημεία.
  • Εύκολο στην εκμάθηση. Εάν έχετε, ας πούμε, μια βάση κώδικα Perl και δεν κάνετε κράτηση, δεν θα βρείτε προγραμματιστές Perl. Επειδή δεν είναι εκεί, αφαιρέθηκαν όλοι, και είναι πολύ και δύσκολο να τους διδάξουμε. Εάν θέλετε προγραμματιστές για κάτι άλλο, ίσως χρειαστεί να επανεκπαιδευτούν ή να βρεθούν. Στην περίπτωση του Λούα, όλα είναι απλά. Το Lua μπορεί να μάθει από οποιονδήποτε junior σε τρεις ημέρες. Μου πήρε περίπου δύο ώρες για να το καταλάβω. Δύο ώρες αργότερα, έγραφα ήδη κώδικα στην παραγωγή. Περίπου μια εβδομάδα αργότερα, πήγε κατευθείαν στην παραγωγή και έφυγε.

Ως αποτέλεσμα, μοιάζει με αυτό:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Υπάρχουν πολλά εδώ. Το OpenResty έχει συναρμολογήσει ένα σωρό μονάδες, τόσο luash όσο και κινητήρες. Και έχετε τα πάντα έτοιμα - αναπτυχθεί και λειτουργεί.

παραδείγματα

Αρκετά με τους στίχους, ας περάσουμε στον κώδικα. Εδώ είναι ένα μικρό Hello World:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Τι ΕΙΝΑΙ εκει? αυτή είναι η θέση των κινητήρων. Δεν ανησυχούμε, δεν γράφουμε τη δική μας δρομολόγηση, δεν παίρνουμε κάποια έτοιμη - την έχουμε ήδη στο NGINX, ζούμε καλά και νωχελικά.

content_by_lua_block είναι ένα μπλοκ που λέει ότι εξυπηρετούμε περιεχόμενο χρησιμοποιώντας ένα σενάριο Lua. Παίρνουμε μια μεταβλητή κινητήρα remote_addr και βάλτε το μέσα string.format. Αυτό είναι το ίδιο με sprintf, μόνο στο Lua, μόνο σωστό. Και το δίνουμε στον πελάτη.

Ως αποτέλεσμα, θα μοιάζει με αυτό:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

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

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Απλά κάθεται και περιμένει. Δεν είναι πολύ καλό. Όταν έρχονται 100.000 χρήστες, είναι πολύ δύσκολο για εμάς. Επομένως, ας χρησιμοποιήσουμε μια απλή εφαρμογή ως παράδειγμα. Θα αναζητήσουμε εικόνες, για παράδειγμα, γάτες. Μόνο που δεν θα κάνουμε απλώς αναζήτηση, θα επεκτείνουμε τις λέξεις-κλειδιά και, αν ο χρήστης έψαξε για «γατάκια», θα βρούμε γάτες, χνουδωτά κ.λπ. Πρώτα πρέπει να λάβουμε τα δεδομένα αιτήματος στο backend. Μοιάζει με αυτό:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Δύο γραμμές σάς επιτρέπουν να λαμβάνετε παραμέτρους GET, χωρίς επιπλοκές. Στη συνέχεια, για παράδειγμα, λαμβάνουμε αυτές τις πληροφορίες από μια βάση δεδομένων με πίνακα ανά λέξη-κλειδί και επέκταση χρησιμοποιώντας ένα κανονικό ερώτημα SQL. Όλα είναι απλά. Μοιάζει με αυτό:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Συνδέουμε τη βιβλιοθήκη resty.mysql, που έχουμε ήδη στο κιτ. Δεν χρειάζεται να εγκαταστήσουμε τίποτα, όλα είναι έτοιμα. Καθορίστε πώς να συνδεθείτε και να κάνετε ένα ερώτημα SQL:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Είναι λίγο τρομακτικό, αλλά λειτουργεί. Εδώ το 10 είναι το όριο. Βγάζουμε 10 δίσκους, είμαστε τεμπέληδες, δεν θέλουμε να δείξουμε περισσότερα. Στην SQL, ξέχασα το όριο.

Στη συνέχεια βρίσκουμε εικόνες για όλα τα ερωτήματα. Συλλέγουμε ένα σωρό αιτήματα και συμπληρώνουμε έναν πίνακα Lua που ονομάζεται reqs, και κάνω ngx.location.capture_multi.

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Όλα αυτά τα αιτήματα πάνε παράλληλα και οι απαντήσεις μας επιστρέφονται. Ο χρόνος λειτουργίας είναι ίσος με τον χρόνο απόκρισης του πιο αργού. Εάν όλοι πυροβολήσουμε σε 50 χιλιοστά του δευτερολέπτου και στείλαμε εκατό αιτήματα, τότε θα λάβουμε απάντηση σε 50 χιλιοστά του δευτερολέπτου.

Επειδή είμαστε τεμπέληδες και δεν θέλουμε να γράψουμε HTTP handling and caching, θα κάνουμε το NGINX να κάνει τα πάντα για εμάς. Όπως είδατε, υπήρξε αίτημα για url/fetch, να τος:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Κάνουμε απλά proxy_pass, καθορίστε πού να αποθηκεύεται προσωρινά, πώς να το κάνουμε και όλα λειτουργούν για εμάς.

Αλλά αυτό δεν είναι αρκετό, πρέπει ακόμα να δώσουμε τα δεδομένα στον χρήστη. Η απλούστερη ιδέα είναι να σειριοποιήσετε τα πάντα σε JSON, εύκολα, σε δύο γραμμές. Δίνουμε Content-Type, δίνουμε JSON.

Υπάρχει όμως μια δυσκολία: ο χρήστης δεν θέλει να διαβάσει JSON. Πρέπει να προσελκύσουμε προγραμματιστές front-end. Μερικές φορές δεν έχουμε διάθεση να το κάνουμε στην αρχή. Ναι, και οι ειδικοί SEO θα πουν ότι αν ψάχνουμε για φωτογραφίες, τότε δεν τους νοιάζει. Και αν τους δώσουμε κάποιο περιεχόμενο, θα πουν ότι οι μηχανές αναζήτησής μας δεν ευρετηριάζουν τίποτα.

Τι να το κάνεις; Φυσικά, θα δώσουμε στον χρήστη HTML. Η δημιουργία με λαβές δεν είναι comme il faut, επομένως θέλουμε να χρησιμοποιήσουμε πρότυπα. Υπάρχει μια βιβλιοθήκη για αυτό lua-resty-template.

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Πρέπει να έχετε δει τα τρία τρομακτικά γράμματα OPM. Το OpenResty διαθέτει τον δικό του διαχειριστή πακέτων, μέσω του οποίου μπορείτε να εγκαταστήσετε μια δέσμη διαφορετικών λειτουργικών μονάδων, ιδίως lua-resty-template. Είναι μια απλή μηχανή προτύπων παρόμοια με τα πρότυπα Django. Εκεί μπορείτε να γράψετε κώδικα και να κάνετε αντικατάσταση μεταβλητής.

Ως αποτέλεσμα, όλα θα μοιάζουν κάπως έτσι:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

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

Όλα είναι ωραία, αλλά είμαστε σε εξέλιξη και δεν θέλουμε να δείξουμε στους χρήστες ακόμα. Ας κάνουμε μια εξουσιοδότηση. Για να το κάνουμε αυτό, ας δούμε πώς το NGINX χειρίζεται το αίτημα από την άποψη του OpenResty:

  • Πρώτη φάση - πρόσβαση, όταν μόλις ήρθε ο χρήστης και τον κοιτάξαμε με κεφαλίδες, με διεύθυνση IP, με άλλα δεδομένα. Μπορείτε να το κόψετε αμέσως αν δεν μας αρέσει. Αυτό μπορεί να χρησιμοποιηθεί για εξουσιοδότηση ή αν λάβουμε πολλά αιτήματα, μπορούμε εύκολα να τα κόψουμε σε αυτήν τη φάση.
  • ξαναγράφω. Επανεγγραφή ορισμένων δεδομένων αιτήματος.
  • περιεχόμενο. Δίνουμε περιεχόμενο στον χρήστη.
  • φίλτρο κεφαλίδας. Αλλάξτε τις κεφαλίδες απόκρισης. Αν χρησιμοποιούσαμε proxy_pass, μπορούμε να ξαναγράψουμε κάποιες κεφαλίδες πριν τις δώσουμε στον χρήστη.
  • φίλτρο σώματος. Μπορούμε να αλλάξουμε το σώμα.
  • κούτσουρο - υλοτομία. Είναι δυνατή η εγγραφή αρχείων καταγραφής στο elasticsearch χωρίς πρόσθετο στρώμα.

Η εξουσιοδότησή μας θα μοιάζει με αυτό:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Θα το προσθέσουμε σε αυτό location, που περιγράψαμε προηγουμένως, και βάλτε τον ακόλουθο κώδικα εκεί:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Ψάχνουμε να δούμε αν έχουμε διακριτικό cookie. Εάν όχι, τότε αναλαμβάνουμε την εξουσιοδότηση. Οι χρήστες είναι πονηροί και μπορεί να μαντέψουν ότι πρέπει να οριστεί ένα διακριτικό cookie. Επομένως, θα το βάλουμε και στο Redis:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Ο κώδικας για την εργασία με το Redis είναι πολύ απλός και δεν διαφέρει από άλλες γλώσσες. Ταυτόχρονα, όλη η είσοδος / έξοδος, τι υπάρχει, τι είναι εδώ, δεν μπλοκάρει. Εάν γράψετε σύγχρονο κώδικα, τότε λειτουργεί ασύγχρονα. Όπως και με το gevent, μόνο καλά έκανε.

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Ας κάνουμε την ίδια την εξουσιοδότηση:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Λέμε ότι πρέπει να διαβάσουμε το σώμα του αιτήματος. Λαμβάνουμε ορίσματα POST, ελέγξτε ότι η σύνδεση και ο κωδικός πρόσβασης είναι σωστά. Εάν δεν είναι σωστό, τότε αδειάζουμε. Και αν είναι σωστά, τότε γράφουμε το διακριτικό στον Redis:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Μην ξεχάσετε να ρυθμίσετε το cookie, αυτό γίνεται επίσης σε δύο γραμμές:

OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

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

  • Μινιμαλιστικό backend. Μερικές φορές χρειάζεται να δώσουμε αρκετά δεδομένα στο backend: κάπου πρέπει να αντικαταστήσουμε την ημερομηνία, κάπου πρέπει να εμφανίσουμε κάποιο είδος λίστας, να πούμε πόσοι χρήστες βρίσκονται στον ιστότοπο τώρα, να βιδώσουμε έναν μετρητή ή στατιστικά. Κάτι τόσο μικρό. Μερικά minimal κομμάτια μπορούν να γίνουν πολύ εύκολα. Αυτό θα είναι γρήγορο, εύκολο και υπέροχο.
  • Προεπεξεργασία δεδομένων. Μερικές φορές θέλουμε να ενσωματώσουμε διαφημίσεις στη σελίδα μας και λαμβάνουμε αυτές τις διαφημίσεις με αιτήματα API. Αυτό είναι πολύ εύκολο να γίνει εδώ. Δεν φορτώνουμε το backend μας, το οποίο ήδη εργάζεται σκληρά. Μπορείτε να παραλάβετε και να παραλάβετε εδώ. Μπορούμε να διαμορφώσουμε κάποιο JS ή, αντίθετα, να ξεκολλήσουμε, να επεξεργαστούμε κάτι πριν το δώσουμε στον χρήστη.
  • Πρόσοψη για microservice. Είναι και αυτή πολύ καλή περίπτωση, την υλοποίησα. Πριν από αυτό, εργαζόμουν για την Tenzor, μια εταιρεία ηλεκτρονικών αναφορών που παρέχει αναφορές για περίπου τις μισές νομικές οντότητες στη χώρα. Έχουμε κάνει μια υπηρεσία, πολλά πράγματα γίνονται εκεί χρησιμοποιώντας τον ίδιο μηχανισμό: δρομολόγηση, εξουσιοδότηση και πολλά άλλα.
    Το OpenResty μπορεί να χρησιμοποιηθεί ως κόλλα για τις μικροϋπηρεσίες σας για να παρέχει μια ενιαία πρόσβαση σε όλα και μια ενιαία διεπαφή. Δεδομένου ότι οι microservices μπορούν να γραφτούν με τέτοιο τρόπο ώστε να έχετε το Node.js εδώ, να έχετε PHP εδώ, να έχετε Python εδώ, υπάρχει κάποιο Erlang εδώ, καταλαβαίνουμε ότι δεν θέλουμε να ξαναγράψουμε τον ίδιο κώδικα παντού. Επομένως, το OpenResty μπορεί να συνδεθεί στο μπροστινό μέρος.

  • Στατιστική και αναλυτική. Συνήθως το NGINX βρίσκεται στην είσοδο και όλα τα αιτήματα περνούν από αυτό. Σε αυτό το μέρος είναι πολύ βολικό να συλλέξετε. Μπορείτε να υπολογίσετε αμέσως κάτι και να το πετάξετε κάπου, για παράδειγμα, το ίδιο Elasticsearch, το Logstash, ή απλά να το γράψετε στο αρχείο καταγραφής και μετά να το στείλετε κάπου.
  • Συστήματα πολλαπλών χρηστών. Για παράδειγμα, τα διαδικτυακά παιχνίδια είναι επίσης πολύ καλά. Σήμερα στο Κέιπ Τάουν ο Alexander Gladysh θα σας πει πώς να πρωτοτυπήσετε γρήγορα ένα παιχνίδι για πολλούς παίκτες χρησιμοποιώντας το OpenResty.
  • Αίτημα φιλτραρίσματος (WAF). Τώρα είναι της μόδας να φτιάχνουμε κάθε είδους τείχη προστασίας εφαρμογών web, υπάρχουν πολλές υπηρεσίες που τα παρέχουν. Με τη βοήθεια του OpenResty, μπορείτε να φτιάξετε μόνοι σας ένα τείχος προστασίας διαδικτυακής εφαρμογής, το οποίο θα φιλτράρει απλά και εύκολα τα αιτήματα σύμφωνα με τις απαιτήσεις σας. Εάν έχετε Python, τότε καταλαβαίνετε ότι η PHP σίγουρα δεν θα σας εγχυθεί, εκτός αν, φυσικά, την δημιουργήσετε οπουδήποτε από την κονσόλα. Ξέρετε ότι έχετε MySQL και Python. Πιθανώς, εδώ μπορούν να προσπαθήσουν να κάνουν κάποιο είδος διέλευσης καταλόγου και να εισάγουν κάτι στη βάση δεδομένων. Επομένως, μπορείτε να φιλτράρετε ανόητα αιτήματα γρήγορα και φθηνά ακριβώς μπροστά.
  • Κοινότητα. Δεδομένου ότι το OpenResty βασίζεται στο NGINX, έχει ένα μπόνους - αυτό είναι κοινότητα NGINX. Είναι πολύ μεγάλο και πολλές από τις ερωτήσεις που θα έχετε στην αρχή έχουν ήδη απαντηθεί από την κοινότητα του NGINX.

    προγραμματιστές Lua. Χθες μίλησα με τα παιδιά που ήρθαν στην ημέρα προπόνησης του HighLoad ++ και άκουσα ότι μόνο το Tarantool είναι γραμμένο στο Lua. Δεν είναι έτσι, πολλά πράγματα γράφονται στο Λούα. Παραδείγματα: OpenResty, διακομιστής Prosody XMPP, μηχανή παιχνιδιών Love2D, Lua έχει γραφτεί στο Warcraft και αλλού. Υπάρχουν πολλοί προγραμματιστές Lua, έχουν μια μεγάλη κοινότητα που ανταποκρίνεται. Όλες οι ερωτήσεις μου στον Λούα απαντήθηκαν μέσα σε λίγες ώρες. Όταν γράφετε στη λίστα αλληλογραφίας, κυριολεκτικά σε λίγα λεπτά υπάρχουν ήδη ένα σωρό απαντήσεις, περιγράφουν τι και πώς, τι είναι τι. Ειναι υπεροχο. Δυστυχώς, μια τόσο ευγενική ειλικρινής κοινότητα δεν υπάρχει παντού.
    Το OpenResty έχει GitHub, όπου μπορείτε να ανοίξετε ένα ζήτημα εάν κάτι σπάσει. Υπάρχει μια λίστα αλληλογραφίας στις Ομάδες Google όπου μπορείτε να συζητήσετε γενικά ζητήματα, υπάρχει μια λίστα αλληλογραφίας στα Κινέζικα - ποτέ δεν ξέρετε, ίσως δεν μιλάτε Αγγλικά, αλλά έχετε γνώση Κινεζικών.

Αποτελέσματα της

  • Ελπίζω ότι κατάφερα να μεταφέρω ότι το OpenResty είναι ένα πολύ βολικό πλαίσιο web.
  • Έχει χαμηλό όριο εισόδου, αφού ο κώδικας είναι παρόμοιος με αυτό που γράφουμε, η γλώσσα είναι αρκετά απλή και μινιμαλιστική.
  • Παρέχει ασύγχρονη I/O χωρίς ανακλήσεις, δεν θα έχουμε noodles όπως μπορούμε μερικές φορές να γράψουμε στο NodeJS.
  • Έχει εύκολη ανάπτυξη, γιατί χρειαζόμαστε μόνο το NGINX με τη σωστή ενότητα και τον κωδικό μας, και όλα λειτουργούν αμέσως.
  • Μεγάλη και ανταποκρινόμενη κοινότητα.

Δεν είπα λεπτομερώς πώς γίνεται η δρομολόγηση, αποδείχθηκε ότι ήταν μια πολύ μεγάλη ιστορία.

Спасибо за внимание!


Vladimir Protasov - OpenResty: μετατροπή του NGINX σε έναν ολοκληρωμένο διακομιστή εφαρμογών

Πηγή: www.habr.com

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