Χωρίς διακομιστή σε rack

Χωρίς διακομιστή σε rack
Το Serverless δεν αφορά τη φυσική απουσία διακομιστών. Δεν πρόκειται για κοντέινερ δολοφόνο ή για παροδική τάση. Αυτή είναι μια νέα προσέγγιση για τη δημιουργία συστημάτων στο cloud. Στο σημερινό άρθρο θα αγγίξουμε την αρχιτεκτονική των εφαρμογών χωρίς διακομιστή, ας δούμε τι ρόλο παίζουν ο πάροχος υπηρεσιών χωρίς διακομιστή και τα έργα ανοιχτού κώδικα. Τέλος, ας μιλήσουμε για τα θέματα χρήσης του Serverless.

Θέλω να γράψω ένα τμήμα διακομιστή μιας εφαρμογής (ή ακόμα και ενός ηλεκτρονικού καταστήματος). Αυτό θα μπορούσε να είναι μια συνομιλία, μια υπηρεσία δημοσίευσης περιεχομένου ή μια συσκευή εξισορρόπησης φορτίου. Σε κάθε περίπτωση, θα υπάρχουν πολλοί πονοκέφαλοι: θα πρέπει να προετοιμάσετε την υποδομή, να προσδιορίσετε τις εξαρτήσεις της εφαρμογής και να σκεφτείτε το λειτουργικό σύστημα υποδοχής. Στη συνέχεια, θα χρειαστεί να ενημερώσετε μικρά εξαρτήματα που δεν επηρεάζουν τη λειτουργία του υπόλοιπου μονόλιθου. Λοιπόν, ας μην ξεχνάμε την κλιμάκωση υπό φορτίο.

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

Τι γίνεται αν δεν θέλετε να διαμορφώσετε κοντέινερ; Δεν θέλω να σκεφτώ την κλιμάκωση της εφαρμογής. Δεν θέλω να πληρώσω για κοντέινερ σε αδράνεια όταν το φορτίο στην υπηρεσία είναι ελάχιστο. Θέλω να γράψω κώδικα. Εστιάστε στην επιχειρηματική λογική και φέρτε τα προϊόντα στην αγορά με την ταχύτητα του φωτός.

Τέτοιες σκέψεις με οδήγησαν σε υπολογιστές χωρίς διακομιστή. Χωρίς διακομιστή σε αυτή την περίπτωση σημαίνει όχι η φυσική απουσία διακομιστών, αλλά η απουσία πονοκεφάλων διαχείρισης υποδομής.

Η ιδέα είναι ότι η λογική της εφαρμογής αναλύεται σε ανεξάρτητες συναρτήσεις. Έχουν μια δομή εκδηλώσεων. Κάθε λειτουργία εκτελεί μία «μικροεργασία». Το μόνο που απαιτείται από τον προγραμματιστή είναι να φορτώσει τις λειτουργίες στην κονσόλα που παρέχεται από τον πάροχο cloud και να τις συσχετίσει με πηγές συμβάντων. Ο κωδικός θα εκτελεστεί κατόπιν αιτήματος σε ένα αυτόματα προετοιμασμένο κοντέινερ και θα πληρώσω μόνο για το χρόνο εκτέλεσης.

Ας δούμε πώς θα είναι τώρα η διαδικασία ανάπτυξης εφαρμογών.

Από την πλευρά του προγραμματιστή

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

Για να μεταβούμε σε διακομιστή χωρίς διακομιστή, χωρίζουμε την εφαρμογή σε μικροεργασίες. Γράφουμε τη δική μας συνάρτηση για καθένα από αυτά. Οι λειτουργίες είναι ανεξάρτητες μεταξύ τους και δεν αποθηκεύουν πληροφορίες κατάστασης (χωρίς πολιτεία). Μπορεί ακόμη και να είναι γραμμένα σε διαφορετικές γλώσσες. Εάν ένα από αυτά «πέσει», ολόκληρη η εφαρμογή δεν θα σταματήσει. Η αρχιτεκτονική της εφαρμογής θα μοιάζει με αυτό:

Χωρίς διακομιστή σε rack
Η διαίρεση σε λειτουργίες στο Serverless είναι παρόμοια με την εργασία με microservices. Αλλά μια microservice μπορεί να εκτελέσει πολλές εργασίες και μια λειτουργία θα έπρεπε ιδανικά να εκτελεί μία. Ας φανταστούμε ότι η αποστολή είναι η συλλογή στατιστικών στοιχείων και η εμφάνιση τους κατόπιν αιτήματος του χρήστη. Στην προσέγγιση microservice, μια εργασία εκτελείται από μία υπηρεσία με δύο σημεία εισόδου: γραφή και ανάγνωση. Στους υπολογιστές χωρίς διακομιστή, αυτές θα είναι δύο διαφορετικές λειτουργίες που δεν σχετίζονται μεταξύ τους. Ο προγραμματιστής εξοικονομεί υπολογιστικούς πόρους, εάν, για παράδειγμα, τα στατιστικά στοιχεία ενημερώνονται συχνότερα από ό,τι γίνεται λήψη τους.

Οι λειτουργίες χωρίς διακομιστή πρέπει να εκτελούνται σε σύντομο χρονικό διάστημα (timeout), το οποίο καθορίζεται από τον πάροχο υπηρεσιών. Για παράδειγμα, για το AWS το χρονικό όριο είναι 15 λεπτά. Αυτό σημαίνει ότι οι μακροχρόνιες λειτουργίες θα πρέπει να αλλάξουν για να ανταποκρίνονται στις απαιτήσεις - αυτό είναι που διακρίνει το Serverless από άλλες δημοφιλείς τεχνολογίες σήμερα (κοντέινερ και Πλατφόρμα ως υπηρεσία).

Αντιστοιχίζουμε ένα συμβάν σε κάθε λειτουργία. Ένα συμβάν αποτελεί έναυσμα για μια ενέργεια:

Εκδήλωση
Η ενέργεια που εκτελεί η συνάρτηση

Μια εικόνα προϊόντος έχει μεταφορτωθεί στο αποθετήριο.
Συμπιέστε την εικόνα και μεταφορτώστε την σε έναν κατάλογο

Η διεύθυνση του φυσικού καταστήματος έχει ενημερωθεί στη βάση δεδομένων
Φορτώστε μια νέα τοποθεσία στους χάρτες

Ο πελάτης πληρώνει για τα αγαθά
Ξεκινήστε την επεξεργασία πληρωμών

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

Η αρχιτεκτονική επεξεργάστηκε και η εφαρμογή έγινε σχεδόν χωρίς διακομιστή. Στη συνέχεια πηγαίνουμε στον πάροχο υπηρεσιών.

Από την πλευρά του παρόχου

Συνήθως, ο υπολογισμός χωρίς διακομιστή προσφέρεται από παρόχους υπηρεσιών cloud. Ονομάζονται διαφορετικά: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions.

Θα χρησιμοποιήσουμε την υπηρεσία μέσω της κονσόλας ή του προσωπικού λογαριασμού του παρόχου. Ο κώδικας λειτουργίας μπορεί να ληφθεί με έναν από τους παρακάτω τρόπους:

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

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

Χωρίς διακομιστή σε rack

Ο πάροχος κατασκεύασε και αυτοματοποίησε το σύστημα Function as a Service (FaaS) στην υποδομή του:

  1. Ο κωδικός λειτουργίας καταλήγει στο χώρο αποθήκευσης στην πλευρά του παρόχου.
  2. Όταν συμβαίνει ένα συμβάν, τα κοντέινερ με προετοιμασμένο περιβάλλον αναπτύσσονται αυτόματα στον διακομιστή. Κάθε στιγμιότυπο συνάρτησης έχει το δικό της απομονωμένο κοντέινερ.
  3. Από την αποθήκευση, η συνάρτηση αποστέλλεται στο κοντέινερ, υπολογίζεται και επιστρέφει το αποτέλεσμα.
  4. Ο αριθμός των παράλληλων συμβάντων αυξάνεται - ο αριθμός των εμπορευματοκιβωτίων αυξάνεται. Το σύστημα κλιμακώνεται αυτόματα. Εάν οι χρήστες δεν έχουν πρόσβαση στη λειτουργία, θα είναι ανενεργή.
  5. Ο πάροχος ορίζει τον χρόνο αδράνειας για τα κοντέινερ - εάν κατά τη διάρκεια αυτού του χρόνου δεν εμφανιστούν λειτουργίες στο κοντέινερ, καταστρέφεται.

Με αυτόν τον τρόπο βγάζουμε το Serverless από το κουτί. Θα πληρώσουμε για την υπηρεσία χρησιμοποιώντας το μοντέλο pay-as-you-go και μόνο για εκείνες τις λειτουργίες που χρησιμοποιούνται και μόνο για την ώρα που χρησιμοποιήθηκαν.

Για να εισαγάγουν τους προγραμματιστές στην υπηρεσία, οι πάροχοι προσφέρουν έως και 12 μήνες δωρεάν δοκιμές, αλλά περιορίζουν τον συνολικό χρόνο υπολογισμού, τον αριθμό των αιτημάτων ανά μήνα, τα χρήματα ή την κατανάλωση ενέργειας.

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

Από την πλευρά του ανοιχτού κώδικα

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

  • Google προσφέρει στους προγραμματιστές το εργαλείο ανοιχτού κώδικα - Γνωστικό. Στην ανάπτυξή του συμμετείχαν οι IBM, RedHat, Pivotal και SAP.
  • IBM εργάστηκε σε μια πλατφόρμα χωρίς διακομιστή OpenWhisk, το οποίο στη συνέχεια έγινε έργο του Ιδρύματος Apache.
  • Microsoft άνοιξε μερικώς τον κωδικό πλατφόρμας Λειτουργίες Azure.

Εξελίξεις βρίσκονται επίσης σε εξέλιξη προς την κατεύθυνση των πλαισίων χωρίς διακομιστή. Kubeless и Σχάση αναπτυχθεί μέσα σε προπαρασκευασμένα συμπλέγματα Kubernetes, OpenFaaS συνεργάζεται τόσο με την Kubernetes όσο και με το Docker Swarm. Το πλαίσιο λειτουργεί ως ένα είδος ελεγκτή - κατόπιν αιτήματος, προετοιμάζει ένα περιβάλλον χρόνου εκτέλεσης μέσα στο σύμπλεγμα και στη συνέχεια εκκινεί μια λειτουργία εκεί.

Τα πλαίσια αφήνουν χώρο για τη διαμόρφωση του εργαλείου ώστε να ταιριάζει στις ανάγκες σας. Έτσι, στο Kubeless, ένας προγραμματιστής μπορεί να ρυθμίσει το χρονικό όριο εκτέλεσης της συνάρτησης (η προεπιλεγμένη τιμή είναι 180 δευτερόλεπτα). Το Fission, σε μια προσπάθεια να λύσει το πρόβλημα της ψυχρής εκκίνησης, προτείνει να διατηρούνται συνεχώς σε λειτουργία ορισμένα δοχεία (αν και αυτό συνεπάγεται κόστος διακοπής λειτουργίας των πόρων). Και το OpenFaaS προσφέρει ένα σύνολο από ενεργοποιητές για κάθε γούστο και χρώμα: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NATs και άλλα.

Οδηγίες για να ξεκινήσετε μπορείτε να βρείτε στην επίσημη τεκμηρίωση των πλαισίων. Η εργασία μαζί τους απαιτεί να έχετε λίγο περισσότερες δεξιότητες από ό,τι όταν εργάζεστε με έναν πάροχο - αυτή είναι τουλάχιστον η δυνατότητα εκκίνησης ενός συμπλέγματος Kubernetes μέσω του CLI. Το πολύ, συμπεριλάβετε άλλα εργαλεία ανοιχτού κώδικα (για παράδειγμα, το Kafka queue manager).

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

Από την άποψη των πλεονεκτημάτων και των μειονεκτημάτων

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

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

Ως μπόνους, έχουμε αυτόματη κλιμάκωση για το φορτίο, και πληρώνουμε μόνο για τους πόρους που χρησιμοποιούμε και μόνο τη στιγμή που χρησιμοποιούνται.

Όπως κάθε τεχνολογία, το Serverless έχει μειονεκτήματα.

Για παράδειγμα, ένα τέτοιο μειονέκτημα μπορεί να είναι ο χρόνος ψυχρής εκκίνησης (κατά μέσο όρο έως 1 δευτερόλεπτο για γλώσσες όπως JavaScript, Python, Go, Java, Ruby).

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

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

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

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

Το επόμενο μειονέκτημα του Serverless είναι η μικρή διάρκεια ζωής μιας συνάρτησης (timeout κατά το οποίο πρέπει να εκτελεστεί η συνάρτηση).

Αλλά, εάν πρέπει να εργαστείτε με εργασίες μεγάλης διάρκειας, μπορείτε να χρησιμοποιήσετε μια υβριδική αρχιτεκτονική - συνδυάστε το Serverless με μια άλλη τεχνολογία.

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

Ορισμένες εφαρμογές θα εξακολουθούν να αποθηκεύουν δεδομένα και καταστάσεις κατά την εκτέλεση. Ορισμένες αρχιτεκτονικές θα παραμείνουν μονολιθικές και ορισμένα χαρακτηριστικά θα διαρκέσουν πολύ. Ωστόσο (όπως οι τεχνολογίες cloud και μετά τα κοντέινερ), το Serverless είναι μια τεχνολογία με μεγάλο μέλλον.

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

Από την πλευρά της εφαρμογής

Για το 2018, το ποσοστό χρήσης χωρίς διακομιστή μεγάλωσε μιάμιση φορά. Μεταξύ των εταιρειών που έχουν ήδη εφαρμόσει την τεχνολογία στις υπηρεσίες τους είναι κολοσσοί της αγοράς όπως οι Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. Ταυτόχρονα, πρέπει να καταλάβετε ότι το Serverless δεν είναι πανάκεια, αλλά ένα εργαλείο για την επίλυση ενός συγκεκριμένου φάσματος προβλημάτων:

  • Μειώστε το χρόνο διακοπής των πόρων. Δεν χρειάζεται να διατηρείτε συνεχώς μια εικονική μηχανή για υπηρεσίες που έχουν λίγες κλήσεις.
  • Επεξεργαστείτε δεδομένα εν κινήσει. Συμπίεση εικόνων, αποκοπή φόντου, αλλαγή κωδικοποίησης βίντεο, εργασία με αισθητήρες IoT, εκτέλεση μαθηματικών πράξεων.
  • «Κολλήστε» άλλες υπηρεσίες μαζί. Αποθετήριο Git με εσωτερικά προγράμματα, chat bot στο Slack με Jira και ημερολόγιο.
  • Ισορροπήστε το φορτίο. Ας ρίξουμε μια πιο προσεκτική ματιά εδώ.

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

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

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

Χωρίς διακομιστή σε rack
Έτσι, το Serverless μπορεί να χρησιμοποιηθεί όπου είναι απαραίτητο να επεξεργαστείτε μεγάλο αριθμό αιτημάτων όχι πολύ συχνά, αλλά εντατικά. Σε αυτήν την περίπτωση, η εκτέλεση πολλών λειτουργιών για 15 λεπτά είναι πιο επικερδής από τη διατήρηση μιας εικονικής μηχανής ή διακομιστή όλη την ώρα.

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

Χωρίς διακομιστή και Selectel

Στην Selectel είμαστε ήδη απλοποιημένη εργασία με το Kubernetes μέσω του πίνακα ελέγχου μας. Τώρα χτίζουμε τη δική μας πλατφόρμα FaaS. Θέλουμε οι προγραμματιστές να μπορούν να λύνουν τα προβλήματά τους χρησιμοποιώντας το Serverless μέσω μιας βολικής, ευέλικτης διεπαφής.

Εάν έχετε ιδέες για το ποια θα πρέπει να είναι η ιδανική πλατφόρμα FaaS και πώς θέλετε να χρησιμοποιήσετε το Serverless στα έργα σας, μοιραστείτε τις στα σχόλια. Θα λάβουμε υπόψη τις επιθυμίες σας κατά την ανάπτυξη της πλατφόρμας.
 
Υλικά που χρησιμοποιούνται στο άρθρο:

Πηγή: www.habr.com

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