Επεξήγηση της ανάπτυξης Canary και του ρόλου της στα DevOps

Η ανάπτυξη Canary είναι μια τεχνική ανάπτυξης και ανάπτυξης λογισμικού που εκτελεί μια σταδιακή απελευθέρωση νέων λειτουργιών ή ενημερώσεων σε ένα μικρό υποσύνολο χρηστών πριν από την κυκλοφορία σε ολόκληρη τη βάση χρηστών.
Αυτή η προσέγγιση περιλαμβάνει τη δημιουργία μιας νέας έκδοσης του λογισμικού και την ανάπτυξή του σε μια μικρή ομάδα χρηστών, διατηρώντας παράλληλα την παλιά έκδοση σε λειτουργία για τους υπόλοιπους χρήστες. Η ομάδα ανάπτυξης παρακολουθεί στενά τη νέα έκδοση για να διασφαλίσει ότι είναι σταθερή και ότι αποδίδει όπως αναμένεται.
Εάν όλα πάνε καλά, η νέα έκδοση διατίθεται σε περισσότερους χρήστες μέχρι να φτάσει τελικά σε ολόκληρη τη βάση χρηστών. Με αυτόν τον τρόπο, η ομάδα έργου ελαχιστοποιεί τον κίνδυνο εισαγωγής σφαλμάτων ή άλλων ζητημάτων που θα μπορούσαν να επηρεάσουν όλους τους χρήστες ταυτόχρονα.
Ο σκοπός της ανάπτυξης του Canary είναι να μειώσει τον κίνδυνο εισαγωγής νέων λειτουργιών σε μια μεγάλη βάση χρηστών. Διαθέτοντας σταδιακά τις αλλαγές στους χρήστες, οι προγραμματιστές μπορούν να παρακολουθούν την απόδοση και τη σταθερότητα της νέας έκδοσης. Κάνουν τις απαραίτητες προσαρμογές πριν από την ανάπτυξη σε ολόκληρη τη βάση χρηστών. Επομένως, η μετάβαση στη νέα έκδοση γίνεται πολύ πιο ομαλά.
Πίνακας περιεχομένων
Βασικές Αρχές και Οφέλη
Πηγή: martinfowler.com
Οι βασικές αρχές της ανάπτυξης Canary περιλαμβάνουν τα ακόλουθα:
Τα οφέλη της ανάπτυξης Canary στο DevOps περιλαμβάνουν:
Ανάπτυξη Canary με βάση την έννοια και την ορολογία
Πηγή: cncf.io
Ας περάσουμε από τον τυπικό κύκλο ζωής της διαδικασίας.
Όλα ξεκινούν από την Canary, δηλαδή τους «πρώιμους χρήστες» της νέας έκδοσης του συστήματος. Παράλληλα με αυτό, υπάρχει η ομάδα Baseline. Εδώ ανήκουν όλοι οι υπόλοιποι χρήστες που δεν είναι μέσα στο Canary.
Καθώς οι χρήστες Canary συνεχίζουν να χρησιμοποιούν τη νέα έκδοση, η ανάπτυξη του Canary επεκτείνεται σε όλο και περισσότερους χρήστες. Αυτό είναι Traffic Shifting. Η ομάδα Canary μεγαλώνει ενώ η ομάδα Baseline συρρικνώνεται, οπότε το σύστημα εκτελεί σταδιακή διάθεση.
Στην πορεία, η διαδικασία παρακολούθησης καταγράφει όλες τις δραστηριότητες και τα αποτελέσματα χρήσης και δημιουργεί Μετρήσεις που χρειάζονται οι προγραμματιστές ως σχόλια. Στη συνέχεια, οι προγραμματιστές αντιδρούν και διορθώνουν ό,τι είναι απαραίτητο. Ή επιστρέφουν στη γραμμή βάσης εάν δεν μπορούν να διορθώσουν τα προβλήματα αυτήν τη στιγμή.
Αυτοματοποιήστε όλες τις δραστηριότητες παρακολούθησης και ανάπτυξης. Αυτό δίνει στους προγραμματιστές αποκλειστική εστίαση στην επιδιόρθωση προβλημάτων.
Ίσως η ομάδα Canary θα ανακαλύψει ότι ορισμένα χαρακτηριστικά της νέας έκδοσης είναι κακά ενώ άλλα είναι υπέροχα. Έτσι, οι προγραμματιστές θα επισημαίνουν τις λειτουργίες που αντιμετωπίζουν προβλήματα για να τις απενεργοποιήσουν από τις διαδικασίες ανάπτυξης.
Οι προγραμματιστές παρακολουθούν και τις δύο ομάδες ταυτόχρονα – το Canary και το Baseline. Οι χρήστες παράγουν αποτελέσματα δοκιμών A/B. Αυτή είναι η συμπεριφορά του παλιού συστήματος και του νέου συστήματος υπό τις ίδιες συνθήκες. Αλλά επίσης, υπάρχουν αυτόματες δοκιμές που εκτελούνται συνεχώς στη νέα έκδοση του συστήματος για να διασφαλιστεί ότι ο Έλεγχος Υγείας της ομάδας Canary είναι σταθερός.
Πώς διαφέρει από τις παραδοσιακές στρατηγικές ανάπτυξης
Μετά την κατανόηση της διαδικασίας του κύκλου ζωής υψηλού επιπέδου, οι διαφορές μεταξύ αυτής και των παραδοσιακών διαδικασιών ανάπτυξης είναι αρκετά εμφανείς.
- Αναπτύσσεστε σταδιακά και με καλύτερο έλεγχο αντί να αναπτύσσετε όλα ταυτόχρονα σε όλους και να περιμένετε τα ζητήματα που επηρεάζουν ολόκληρη την παραγωγή.
- Περιορίζετε τον κίνδυνο σφαλμάτων νέας έκδοσης μόνο στην ομάδα Canary έναντι της ταυτόχρονης έκθεσης ολόκληρου του κόσμου στα ζητήματα.
- Παρακολουθείτε τη νέα έκδοση πριν την αποκτήσουν οι χρήστες, αντί να την παρακολουθείτε μετά και να επενδύετε σημαντικό χρόνο και πόρους στη φάση της υπερ-φροντίδας της διαδικασίας έκδοσης.
- Μπορείτε να αποφασίσετε για τον τρόπο επαναφοράς προτού αναπτύξετε πλήρως τη νέα έκδοση στην παραγωγή. Από την άλλη πλευρά, προγραμματίζεται ένα άλλο παράθυρο κυκλοφορίας για να αναιρέσετε την παραγωγή αμέσως μετά την ολοκλήρωση της κυκλοφορίας παραγωγής.
- Η ανάπτυξη Canary σας αναγκάζει φυσικά να επενδύσετε σε αυτοματοποιημένα εργαλεία και διαδικασίες όπου είναι δυνατόν. Από την άλλη πλευρά, η προσκόλληση στις παραδοσιακές στρατηγικές ανάπτυξης θέτει φυσικά σε προτεραιότητα όλες τις πρωτοβουλίες αυτοματισμού στο τέλος της λίστας εκκρεμοτήτων.
CI/CD Pipelines in Canary Deployment
Πηγή: aws.amazon.com
Σε έναν τυπικό αγωγό CI/CD, οι αλλαγές κατασκευάζονται αυτόματα, δοκιμάζονται και αναπτύσσονται σε ένα περιβάλλον σταδίου για περαιτέρω δοκιμή πριν αναπτυχθούν στην παραγωγή. Και επίσης, είναι μια τέλεια περίπτωση χρήσης μέσα σε μια εγκατάσταση Canary.
Μόλις οι αλλαγές αναπτυχθούν στο περιβάλλον σταδίου και περάσουν όλες τις απαραίτητες δοκιμές, ο αγωγός CI/CD θα αναπτύξει αυτόματα την έκδοση καναρινιού σε ένα μικρό υποσύνολο χρηστών στο περιβάλλον παραγωγής.
Εάν κάτι πάει στραβά, απλώς εκτελέστε έναν άλλο αγωγό για επαναφορά. Ή να επισημάνετε προβληματικά χαρακτηριστικά και δεν θα εμφανιστεί ποτέ ξανά στη διαδικασία ανάπτυξης του αγωγού ανάπτυξης. Όλα αυτόματα, και δεν χρειάζεται να σας ενδιαφέρει πια.
Δεδομένου ότι η έκδοση καναρίνι είναι γεμάτη με αυτοματοποιημένα τεστ ελέγχου υγείας, όλα αυτά ενσωματώνονται φυσικά στα βασικά χαρακτηριστικά των αγωγών CI/CD. Έτσι κι αλλιώς είναι απαραίτητο μέρος κάθε καλού αγωγού CI/CD.
Ροή εργασιών και οι φάσεις της ανάπτυξης των Καναρίων
Συνοψίζοντας τις πληροφορίες μαζί, αυτή είναι η συνήθης ροή εργασίας μιας τυπικής ανάπτυξης Canary που μπορείτε να χρησιμοποιήσετε στο έργο σας.
#1. Σχεδιασμός και Προετοιμασία
Σε αυτή τη φάση, η ομάδα ανάπτυξης σχεδιάζει και προετοιμάζεται για την ανάπτυξη του καναρινιού. Αυτό περιλαμβάνει τον προσδιορισμό των αλλαγών ή ενημερώσεων που πρέπει να γίνουν, τη δημιουργία μιας νέας έκδοσης του λογισμικού και τον καθορισμό των μετρήσεων και των ελέγχων υγείας που θα χρησιμοποιηθούν για την παρακολούθηση της απόδοσης της νέας έκδοσης. Η ομάδα προσδιορίζει επίσης το υποσύνολο των χρηστών που θα λάβουν πρώτα τη νέα έκδοση και ορίζει το σχέδιο διάθεσης.
#2. Εφαρμογή Δρομολόγησης και Παρακολούθησης Κυκλοφορίας
Η νέα έκδοση του λογισμικού αναπτύσσεται στο υποσύνολο των χρηστών που προσδιορίζονται στη φάση του σχεδιασμού. Η δρομολόγηση επισκεψιμότητας υλοποιείται για να κατευθύνει ένα μέρος της επισκεψιμότητας των χρηστών στη νέα έκδοση, διατηρώντας παράλληλα την παλιά έκδοση σε λειτουργία για τους υπόλοιπους χρήστες. Η απόδοση και η σταθερότητα της νέας έκδοσης παρακολουθούνται στενά χρησιμοποιώντας μετρήσεις και ελέγχους υγείας για να διασφαλιστεί ότι αποδίδει όπως αναμένεται.
#3. Ανάλυση και αξιολόγηση της απόδοσης ανάπτυξης
Η απόδοση της νέας έκδοσης αναλύεται και αξιολογείται με βάση τις μετρήσεις και τους υγειονομικούς ελέγχους που ορίζονται στη φάση του σχεδιασμού. Εάν η νέα έκδοση έχει καλή απόδοση, η διάθεση αυξάνεται σταδιακά σε περισσότερους χρήστες με την πάροδο του χρόνου. Εάν προκύψουν προβλήματα με τη νέα έκδοση, η ανάπτυξη μπορεί να επαναφερθεί γρήγορα στην προηγούμενη έκδοση.
#4. Προώθηση ή επαναφορά της ανάπτυξης
Η ομάδα ανάπτυξης αποφασίζει εάν θα προωθήσει τη νέα έκδοση σε ολόκληρη τη βάση χρηστών ή αν θα επιστρέψει στην προηγούμενη έκδοση. Εάν η νέα έκδοση έχει καλή απόδοση και πληροί τα απαραίτητα πρότυπα ποιότητας, προωθήστε την σε ολόκληρη τη βάση χρηστών. Εάν προκύψουν προβλήματα με τη νέα έκδοση, επαναφέρετε την ανάπτυξη στην προηγούμενη έκδοση γρήγορα και εύκολα.
Πηγή: aws.amazon.com
Βέλτιστες πρακτικές και στρατηγικές
Όταν εφαρμόζετε το Canary Deployment στην πλατφόρμα σας, ξεκινήστε με τον καθορισμό σαφών στόχων και πώς φαίνεται η επιτυχία στο τέλος. Μπορείτε να βοηθήσετε εδώ με πράγματα όπως μετρήσεις απόδοσης, κριτήρια σχολίων χρηστών και επιχειρηματικό αντίκτυπο.
Δημιουργήστε ένα μικρό υποσύνολο χρηστών για να δοκιμάσετε τη νέα (Canary) έκδοση του λογισμικού. Η μεγαλύτερη ομάδα στην αρχή δεν είναι πραγματικά πλεονέκτημα. Θέλετε να είστε όσο το δυνατόν πιο ευέλικτοι, ειδικά στην αρχή.
Όπως αναφέρθηκε ήδη μερικές φορές, παρακολουθήστε την απόδοση και τη σταθερότητα της νέας έκδοσης χρησιμοποιώντας μετρήσεις και ελέγχους υγείας. Αντιδράστε όποτε βλέπετε κάτι ύποπτο. Είναι καλύτερο να αντιδράς υπερβολικά παρά να αντιδράς λιγότερο όταν πρόκειται για σταδιακή διάθεση.
Αυξήστε σταδιακά την κυκλοφορία της νέας έκδοσης σε περισσότερους χρήστες με την πάροδο του χρόνου. Αυτό εξασφαλίζει μια πιο ομαλή μετάβαση στη νέα έκδοση.
Χρησιμοποιήστε εργαλεία και διαδικασίες αυτοματισμού όπου είναι δυνατόν για να βελτιστοποιήσετε τη διαδικασία ανάπτυξης και παρακολούθησης. Συμπεριλάβετέ τα στους αγωγούς CI/CD και ενεργοποιήστε αυτόματα τις προγραμματισμένες διαδικασίες ανάπτυξης. Αυτό μειώνει τον κίνδυνο ανθρώπινου λάθους και διασφαλίζει ότι η διαδικασία ανάπτυξης είναι συνεπής και επαναλαμβανόμενη.
Εφαρμόστε σημαίες χαρακτηριστικών για να ενεργοποιήσετε ή να απενεργοποιήσετε συγκεκριμένες δυνατότητες στο λογισμικό. Θα αποκτήσετε τον έλεγχο των μελλοντικών διαδικασιών ανάπτυξης χωρίς να χρειάζεται πάντα να τροποποιείτε ή να ενημερώνετε χειροκίνητα. Θα δώσετε περισσότερη εστίαση στους προγραμματιστές σε τομείς που έχουν σημασία – διορθώνοντας τα σφάλματα.
Χρησιμοποιήστε τη δοκιμή A/B για να συγκρίνετε την απόδοση δύο διαφορετικών εκδόσεων του λογισμικού. Αντιστοιχίστε τυχαίους χρήστες στη μία ή στην άλλη έκδοση. Προσδιορίστε ποια έκδοση έχει καλύτερη απόδοση και αντιδράστε σε αυτό με μελλοντικές αποφάσεις ανάπτυξης.
Βεβαιωθείτε ότι μπορείτε να επαναφέρετε την ανάπτυξη γρήγορα και ανά πάσα στιγμή, εάν προκύψουν προβλήματα με τη νέα έκδοση. Θα μειώσει τον αντίκτυπο τυχόν προβλημάτων και θα επιτρέψει τη γρήγορη αποκατάσταση.
Προκλήσεις και Μελέτες Περιπτώσεων
Υπάρχουν ακόμη ορισμένες προκλήσεις που συνδέονται με την ανάπτυξη των Καναρίων, παρά τα σαφή πλεονεκτήματά της.
Μια πρόκληση με το Canary Deployment είναι η καθυστέρηση δικτύου, η οποία μπορεί να επηρεάσει την απόδοση της νέας έκδοσης του λογισμικού. Για να αντιμετωπίσουν αυτήν την πρόκληση, οι προγραμματιστές μπορούν να χρησιμοποιήσουν εργαλεία όπως εξισορροπητές φορτίου και δίκτυα παράδοσης περιεχομένου για τη βελτίωση της απόδοσης του δικτύου. Δεν είναι μόνο καθυστέρηση για το σύστημα από εξωτερική χρήση. Αλλά και λανθάνουσα κατάσταση για εσωτερικές διεργασίες όπως αναπτύξεις ή εκτελέσεις αγωγών CI/CD. Αυτά πρέπει να ολοκληρωθούν όσο το δυνατόν γρηγορότερα. Διαφορετικά, θα έχετε μια σειρά προγραμματιστών σε κατάσταση αδράνειας που περιμένουν να τελειώσουν οι αγωγοί.
Μια άλλη πρόκληση είναι η διασφάλιση της συνέπειας των δεδομένων μεταξύ της παλιάς και της νέας έκδοσης του λογισμικού. Για να αντιμετωπίσουν αυτήν την πρόκληση, οι προγραμματιστές μπορούν να χρησιμοποιήσουν τεχνικές όπως η αναπαραγωγή βάσεων δεδομένων και ο συγχρονισμός για να διασφαλίσουν ότι τα δεδομένα είναι συνεπή σε όλες τις εκδόσεις. Το να έχετε χρήστες παραγωγής που λειτουργούν τόσο σε παλιές όσο και σε νέες εκδόσεις ταυτόχρονα αυξάνει τις προσδοκίες ότι θα βεβαιωθείτε ότι και οι δύο εκδόσεις είναι σε πλήρη συγχρονισμό όλη την ώρα και ότι οι χρήστες δεν χάνουν δεδομένα παραγωγής μόνο και μόνο επειδή βρίσκονται στην ομάδα Canary/Baseline . Αυτό μπορεί να είναι πραγματικά δύσκολο να ανταποκριθεί κανείς, επομένως στηρίξτε τον εαυτό σας με διαδικασίες σταθερού παρασκηνίου.
Το Netflix είναι ένα πολύ γνωστό παράδειγμα εταιρείας που χρησιμοποιεί το Canary Deployment για να εφαρμόσει αλλαγές στην υπηρεσία ροής της. Η εταιρεία χρησιμοποιεί έναν συνδυασμό αυτοματοποιημένων δοκιμών, σημαιών χαρακτηριστικών και δοκιμών A/B για να παρουσιάσει αργά τις αλλαγές.
Η Google είναι ένα άλλο παράδειγμα εταιρείας που χρησιμοποιεί το Canary Deployment για να εφαρμόσει αλλαγές στις υπηρεσίες cloud της. Ομοίως, η εταιρεία χρησιμοποιεί τα πλεονεκτήματα των αυτοματοποιημένων δοκιμών, του διαχωρισμού της κυκλοφορίας και της συμπερίληψης παρακολούθησης για να αναπτύξει σταδιακά τις αλλαγές σε ένα μικρό υποσύνολο χρηστών πριν από την ανάπτυξη σε όλους τους χρήστες. Αυτή η προσέγγιση βοήθησε την Google να βελτιώσει την ποιότητα και τη σταθερότητα των υπηρεσιών της.
Τελικές Λέξεις
Όπως συμβαίνει με όλες τις διαδικασίες, προσεγγίσεις ή στρατηγικές, η ανάπτυξη των Καναρίων δεν είναι λύση για κάθε πρόβλημα του κόσμου. Υπάρχουν περιπτώσεις όπου είναι σχεδόν αδύνατο να εφαρμοστεί λόγω περιβαλλοντικών περιορισμών, γνώσεων των ανθρώπων ή γενικής έλλειψης εννοιολογικής κατανόησης. Εγώ
είναι πολύ πιο κατάλληλο για τα έργα της νέας εποχής. Όπου η ευέλικτη νοοτροπία είναι η βασική ιδιότητα, η αυτοματοποίηση κάθε διαδικασίας αποτελεί αναμφισβήτητη προτεραιότητα και ένα μέγιστο επίπεδο αξιοπιστίας είναι μια ισχυρή προσδοκία από τα ενδιαφερόμενα μέρη.
Σε αυτήν την περίπτωση, η ανάπτυξη Canary είναι κατά κάποιο τρόπο το επόμενο επίπεδο ευέλικτων πρακτικών ανάπτυξης. Μπορεί να ανυψώσει τις ομάδες σε μια περιοχή που το έργο δεν ήταν ποτέ πριν.
Στη συνέχεια, ελέγξτε την κλιμάκωση και τη βελτιστοποίηση CI/CD.