Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλέςLOST από το sophiagworld

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

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

Μεταφράστηκε με υποστήριξη Mail.ru Cloud Solutions.

Πρώτο επίπεδο

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

Η υποδομή ως κωδικός

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

Ανάπτυξη 100 εικονικών μηχανών

  • με το Ubuntu
  • 2 GB RAM το καθένα
  • θα έχουν τον παρακάτω κωδικό
  • με αυτές τις παραμέτρους

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

Ο μοντερνιστής μέσα μου λέει ότι μπορείς να χρησιμοποιήσεις το Kubernetes/Docker για να κάνεις όλα τα παραπάνω, και έχει δίκιο.

Επιπλέον, μπορείτε να παρέχετε αυτοματισμό χρησιμοποιώντας Chef, Puppet ή Terraform.

Συνεχής ενσωμάτωση και παράδοση

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

Κάθε φορά σε αυτό το στάδιο απαντάτε στην ερώτηση: θα μεταγλωττίσει το assembly μου και θα περάσει τεστ, ισχύει; Αυτό μπορεί να φαίνεται σαν χαμηλός πήχης, αλλά λύνει πολλά προβλήματα.

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Δεν υπάρχει τίποτα πιο όμορφο από το να βλέπεις αυτά τα τσιμπούρια

Για αυτήν την τεχνολογία μπορείτε να αξιολογήσετε τα Github, CircleCI ή Jenkins.

Εξισορροπητές φορτίου

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

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

Συνήθως, οι εξισορροπητές φορτίου διαμορφώνονται στο cloud που χρησιμοποιείτε.

RayID, αναγνωριστικό συσχέτισης ή UUID για αιτήματα

Έχετε αντιμετωπίσει ποτέ ένα σφάλμα εφαρμογής με ένα μήνυμα όπως αυτό: "Κάτι πήγε στραβά. Αποθηκεύστε αυτό το αναγνωριστικό και στείλτε το στην ομάδα υποστήριξής μας"?

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

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Ο χρήστης κάνει ένα αίτημα στο σύστημα Α, μετά η Α επαφές Β, η οποία έρχεται σε επαφή με τη Γ, την αποθηκεύει στο Χ και, στη συνέχεια, η αίτηση επιστρέφεται στο Α.

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

Ενδιάμεσο επίπεδο

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

Κεντρική υλοτομία

Συγχαρητήρια! Έχετε αναπτύξει 100 εικονικές μηχανές. Την επόμενη μέρα, ο Διευθύνων Σύμβουλος έρχεται και παραπονιέται για ένα σφάλμα που έλαβε κατά τη δοκιμή της υπηρεσίας. Αναφέρει το αντίστοιχο ID για το οποίο μιλήσαμε παραπάνω, αλλά θα πρέπει να ψάξετε μέσα από τα αρχεία καταγραφής 100 μηχανών για να βρείτε αυτό που προκάλεσε τη συντριβή. Και πρέπει να βρεθεί πριν την αυριανή παρουσίαση.

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

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Λειτουργικότητα στοίβας ELK

Παράγοντες παρακολούθησης

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

Σε αυτό το σημείο το ελέγχετε η κατασκευή που τρέχει έχει καλή αίσθηση και λειτουργεί καλά.

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

Αυτόματη κλιμάκωση ανάλογα με το φορτίο

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

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Με τις περισσότερες υπηρεσίες cloud, μπορείτε να το διαμορφώσετε σε αυτόματη κλίμακα χρησιμοποιώντας περισσότερους διακομιστές ή πιο ισχυρούς διακομιστές.

Πειραματικό σύστημα

Ένας καλός τρόπος για να κυκλοφορήσετε με ασφάλεια ενημερώσεις είναι να μπορείτε να δοκιμάσετε κάτι για το 1% των χρηστών για μία ώρα. Έχετε δει βέβαια τέτοιους μηχανισμούς σε δράση. Για παράδειγμα, το Facebook δείχνει σε μέρη του κοινού διαφορετικό χρώμα ή αλλάζει το μέγεθος της γραμματοσειράς για να δει πώς αντιλαμβάνονται οι χρήστες τις αλλαγές. Αυτό ονομάζεται δοκιμή A/B.

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

Προηγμένο επίπεδο

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

Γαλαζοπράσινες αναπτύξεις

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

Αυτό το βήμα εξαρτάται από την παρουσία ενός εξισορροπητή φορτίου. Ας φανταστούμε ότι έχετε την έκδοση N του λογισμικού σας και μετά θέλετε να αναπτύξετε την έκδοση N+1. 

Εσείς θα μπορούσαμε απλά διακόψτε την υπηρεσία και διαθέστε την επόμενη έκδοση σε μια χρονική στιγμή που λειτουργεί για τους χρήστες σας και έχετε κάποιο χρόνο διακοπής λειτουργίας. Αλλά ας υποθέσουμε ότι έχετε πραγματικά αυστηρούς όρους SLA. Έτσι, SLA 99,99% σημαίνει ότι μπορείτε να βγείτε εκτός σύνδεσης μόνο κατά 52 λεπτά το χρόνο.

Εάν θέλετε πραγματικά να επιτύχετε τέτοιους δείκτες, χρειάζεστε δύο αναπτύξεις ταυτόχρονα: 

  • αυτό που είναι τώρα (Ν).
  • επόμενη έκδοση (N+1). 

Λέτε στο πρόγραμμα εξισορρόπησης φορτίου να ανακατευθύνει ένα ποσοστό της επισκεψιμότητας στη νέα έκδοση (N+1) ενώ παρακολουθείτε ενεργά για παλινδρομήσεις.

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Εδώ έχουμε μια πράσινη ανάπτυξη N που λειτουργεί καλά. Προσπαθούμε να προχωρήσουμε στην επόμενη έκδοση αυτής της ανάπτυξης

Πρώτα στέλνουμε ένα πολύ μικρό τεστ για να δούμε αν η ανάπτυξη N+1 λειτουργεί με μικρή επισκεψιμότητα:

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

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

Ανίχνευση ανωμαλιών και αυτόματος μετριασμός

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

Πώς να κοιμάστε καλά όταν έχετε μια υπηρεσία cloud: βασικές αρχιτεκτονικές συμβουλές
Μόλις εντοπιστούν ανωμαλίες, αρχίζετε να εξετάζετε ορισμένες από τις ενδείξεις που παρέχει η υπηρεσία. Για παράδειγμα, μια απότομη αύξηση στο φορτίο της CPU μπορεί να υποδηλώνει ότι ένας σκληρός δίσκος αποτυγχάνει, ενώ μια απότομη αύξηση των αιτημάτων μπορεί να υποδεικνύει ότι πρέπει να αυξήσετε την κλίμακα. Αυτό το είδος στατιστικών δεδομένων σάς επιτρέπει να κάνετε την υπηρεσία προληπτική.

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

Αυτό είναι!

Αυτή η λίστα προτεραιοτήτων θα σας γλιτώσει από πολλά προβλήματα εάν δημιουργείτε μια υπηρεσία cloud.

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

Τι άλλο να διαβάσετε για το θέμα:

  1. Μετάβαση και κρυφές μνήμες CPU
  2. Kubernetes στο πνεύμα της πειρατείας με ένα πρότυπο για υλοποίηση
  3. Το κανάλι μας Around Kubernetes στο Telegram

Πηγή: www.habr.com

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