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

Οι παραδοσιακές προσεγγίσεις “big bang” στην ανάπτυξη λογισμικού δεν είναι συμβατές με τις απαιτήσεις υψηλής ευελιξίας, ευελιξίας και συνεχούς ανάπτυξης των σημερινών πλατφορμών λογισμικού cloud και DevOps.
Δεν αρκεί απλώς να προετοιμάσετε μια λίστα ελέγχου με μη αυτόματα βήματα που θα εκτελεστούν κατά την ανάπτυξη της έκδοσης παραγωγής. Εάν το κάνετε, δεν είστε πραγματικά ευέλικτοι, ούτε είστε κατάλληλοι DevOps.
Πίνακας περιεχομένων
Μπλε-πράσινη ανάπτυξη: Μια επισκόπηση
Η ανάπτυξη Blue-Green είναι μια προσέγγιση στην ανάπτυξη λογισμικού που μειώνει το χρόνο διακοπής λειτουργίας και τον κίνδυνο νέων εκδόσεων λογισμικού δημιουργώντας δύο πανομοιότυπα περιβάλλοντα: ενεργό (μπλε) και ανενεργό (πράσινο).
Το ενεργό περιβάλλον είναι όπου εκτελείται η τρέχουσα έκδοση του λογισμικού και οι χρήστες δημιουργούν κίνηση παραγωγής. Το ανενεργό περιβάλλον είναι όπου αναπτύσσεται και δοκιμάζεται η νέα έκδοση του λογισμικού.
Μόλις η νέα έκδοση δοκιμαστεί και είναι έτοιμη, η κυκλοφορία αλλάζει από το ενεργό περιβάλλον στο ανενεργό περιβάλλον, καθιστώντας το νέο ενεργό περιβάλλον. Μπορείτε να επαναλάβετε αυτή τη διαδικασία όπως απαιτείται.
Πηγή: docs.aws.amazon.com
Περιβάλλον DevOps
Η ανάπτυξη του μπλε-πράσινου ταιριάζει καλά με τη νοοτροπία και τις διαδικασίες DevOps, επειδή υποστηρίζει τη συνεχή παράδοση και ανάπτυξη λογισμικού, ενώ ελαχιστοποιεί το χρόνο διακοπής λειτουργίας για τους χρήστες παραγωγής και εξαλείφει τον κίνδυνο αποτυχίας έκδοσης παραγωγής.
Η ύπαρξη δύο πανομοιότυπων περιβαλλόντων καθιστά δυνατή τη δοκιμή και την ανάπτυξη νέων εκδόσεων λογισμικού χωρίς να επηρεάζεται το τρέχον περιβάλλον παραγωγής. Αυτό σημαίνει πιο γρήγορες και συχνότερες εκδόσεις, κάτι που αποτελεί βασική πτυχή του DevOps.
Επιπλέον, η δυνατότητα γρήγορης εναλλαγής της κυκλοφορίας μεταξύ περιβαλλόντων είναι βασική προϋπόθεση για γρήγορη επαναφορά σε περίπτωση προβλημάτων, κάτι που είναι επίσης σημαντικό σε ένα περιβάλλον DevOps.
Βασικές αρχές για την ανάπτυξη του μπλε-πράσινου
#1. Δύο πανομοιότυπα περιβάλλοντα
Η ανάπτυξη του μπλε-πράσινου απαιτεί τη δημιουργία δύο πανομοιότυπων περιβαλλόντων. Αυτό σημαίνει πανομοιότυπο από την άποψη των δεδομένων και των διαδικασιών. Το ένα είναι ενεργό (μπλε), και το άλλο είναι ανενεργό (πράσινο).
Το μπλε περιβάλλον είναι όπου οι χρήστες παραγωγής εκτελούν τις καθημερινές τους διαδικασίες. Το πράσινο περιβάλλον είναι πάντα σε συγχρονισμό με το μπλε, αλλά οι δοκιμαστές εκτελούν τις δοκιμαστικές τους περιπτώσεις εκεί. Παρόλο που αυτό το περιβάλλον δεν είναι η παραγωγή, εκτελείτε τις δοκιμές υπό πραγματικές συνθήκες, καθώς είναι ένα περιβάλλον που μοιάζει με παραγωγή.
#2. Διακόπτης κυκλοφορίας
Μόλις η νέα έκδοση του λογισμικού δοκιμαστεί και είναι έτοιμη, η κυκλοφορία αλλάζει από το ενεργό περιβάλλον στο ανενεργό περιβάλλον, καθιστώντας το νέο ενεργό περιβάλλον.
Ο διακόπτης είναι άμεσος. Όλη η ανάπτυξη ανήκει πλέον στο παρελθόν. Δεν υπάρχει παράθυρο διακοπής λειτουργίας. Οι χρήστες δεν χρειάζεται να κάνουν τίποτα για να φτάσουν στο νέο περιβάλλον. Ανακατευθύνονται αυτόματα, και όλα ταυτόχρονα.
Πηγή: aws.amazon.com
#3. Ταχεία επαναφορά
Η δυνατότητα γρήγορης εναλλαγής της κυκλοφορίας μεταξύ περιβαλλόντων σημαίνει επίσης γρήγορη επαναφορά σε περίπτωση προβλημάτων. Αυτό εξασφαλίζει ελάχιστο χρόνο διακοπής λειτουργίας και η εφαρμογή παραμένει εξαιρετικά διαθέσιμη.
Εάν κάτι πάει στραβά με το πράσινο περιβάλλον, όλοι οι χρήστες θα επιστρέψουν αμέσως στο σταθερό αρχικό μπλε περιβάλλον χωρίς ασάφεια.
#4. Αυτοματοποιημένη δοκιμή
Οι αυτοματοποιημένες δοκιμές είναι μια βασική πτυχή της ανάπτυξης του Blue-Green. Διασφαλίζει ότι η νέα έκδοση του λογισμικού έχει δοκιμαστεί διεξοδικά πριν από την ανάπτυξη στο ενεργό περιβάλλον.
Εάν δεν διαθέτετε σημαντικό αριθμό δοκιμών αυτοματοποιημένων στα συστήματά σας (συμπεριλαμβανομένων των δοκιμών μονάδας, των λειτουργικών δοκιμών και των δοκιμών παλινδρόμησης τουλάχιστον), τότε μάλλον δεν έχει και πολύ νόημα να σκεφτείτε την υλοποίηση της ανάπτυξης Blue-Green.
Η έλλειψη αυτοματοποιημένων δοκιμών θα σας επιβραδύνει δραματικά. Ο χρόνος που απαιτείται για να δοκιμάσετε το νέο (πράσινο) περιβάλλον θα είναι τόσο μεγάλος που από τη στιγμή που θα μπορείτε να μεταβείτε στο πράσινο περιβάλλον, θα είναι ήδη «πολύ παλιό» από την οπτική γωνία του κύκλου ζωής ανάπτυξης λογισμικού.
#5. Συνεχής Παράδοση
Η ανάπτυξη του Μπλε-Πράσινου είναι μέρος μιας συνεχούς γραμμής παράδοσης, που σημαίνει τελικά ταχύτερες και συχνότερες εκδόσεις λογισμικού στην παραγωγή.
Μπορείτε να κάνετε την αλλαγή μόλις είστε έτοιμοι να δοκιμάσετε τη νέα έκδοση λογισμικού στο πράσινο περιβάλλον. Δεδομένου ότι η ανάπτυξη έχει ήδη γίνει και χρειάζεται να κάνετε μόνο τον διακόπτη κυκλοφορίας, είναι τόσο γρήγορο που μπορείτε να το κάνετε αυτό κάθε μέρα. Υποθέτοντας ότι είστε γρήγοροι και στις δοκιμαστικές δραστηριότητες, προφανώς.
Τυπικός κύκλος ζωής
Η πλατφόρμα που εκτελεί την ανάπτυξη Blue-Green έχει τον δικό της συγκεκριμένο κύκλο ζωής βημάτων και διαδικασιών για εκτέλεση. Αυτό συνήθως αποτελείται από:
Υλοποίηση αγωγών CI/CD
Η υλοποίηση της ανάπτυξης του Blue-Green σε έναν αγωγό CI/CD DevOps θα είναι μια φυσική διαδικασία.
Μια ισχυρή προϋπόθεση είναι να έχετε ήδη αυτά τα δύο πανομοιότυπα περιβάλλοντα. Δεδομένου ότι αυτή θα είναι μια αυτοματοποιημένη διαδικασία, μπορείτε να χρησιμοποιήσετε την υποδομή ως εργαλείο κώδικα όπως AWS CloudFormation ή ακόμα και cloud-agnostic Terraform σενάρια για τη δημιουργία/αναδημιουργία/ενημέρωση των περιβαλλόντων για εσάς εντός αυτοματοποιημένων αγωγών.
Μόλις το αποκτήσετε, είναι ένα σχετικά εύκολο βήμα προς τη δημιουργία μιας πλήρως αυτοματοποιημένης διαδικασίας ανάπτυξης. Απλώς επαναχρησιμοποιείτε τους ήδη υπάρχοντες αγωγούς για τη δημιουργία μπλε και πράσινου περιβάλλοντος. Ωστόσο, αυτή τη φορά θα πρέπει να συμπεριλάβετε στον αγωγό και διαδικασίες δοκιμών.
Η διαδικασία εναλλαγής κυκλοφορίας μπορείτε να αυτοματοποιήσετε με εργαλεία όπως AWS Elastic Load Balancer ή NGINX. Αυτό περιλαμβάνει την ενημέρωση του load balancer ή των ρυθμίσεων DNS για να κατευθύνει την κυκλοφορία στο πράσινο περιβάλλον μόλις δοκιμαστεί και είναι έτοιμη η νέα έκδοση του λογισμικού.
Το επόμενο κομμάτι στο παζλ είναι η παρακολούθηση. Για αυτό, χρησιμοποιήστε εργαλεία όπως AWS CloudWatch, Νew Λείψανοή Datadog.
Τέλος, επαναχρησιμοποιήστε τους υπάρχοντες αγωγούς ακόμη και για τον παροπλισμό του παλιού μπλε περιβάλλοντος. Εναπόκειται σε εσάς να εκτελέσετε πρώτα την καταστροφή για όλες τις υπηρεσίες και τα στοιχεία πριν τα ξαναδημιουργήσετε από την αρχή ή εναλλακτικά, μπορείτε απλώς να ενημερώσετε τα σενάρια για κάθε υπηρεσία στην αλυσίδα. Συνήθως, η καταστροφή & αναδημιουργία είναι μια πιο ασφαλής επιλογή, καθώς με την ενημέρωση, έχετε πολύ περισσότερες γωνιακές περιπτώσεις να εξετάσετε.
Βέλτιστες πρακτικές ανάπτυξης μπλε-πράσινου
Θέλετε να μάθετε πώς να αξιοποιήσετε με τον καλύτερο τρόπο την ανάπτυξη του Blue-Green; Εδώ είναι μερικές από τις συμβουλές που προέρχονται από την πρακτική.
Έχετε μια σταθερή στρατηγική μετανάστευσης βάσεων δεδομένων
Κατά την ανάπτυξη μιας νέας έκδοσης του λογισμικού, είναι σημαντικό να διασφαλίζετε ότι το σχήμα της βάσης δεδομένων ενημερώνεται σωστά. Χρησιμοποιήστε μια στρατηγική μετεγκατάστασης βάσης δεδομένων όπως Flyway ή Liquibase για τη διαχείριση των αλλαγών σχήματος βάσης δεδομένων.
Χρησιμοποιήστε ένα εργαλείο ανάλυσης καναρινιών
Παρόλο που η ανάπτυξη Canary είναι μια εναλλακτική προσέγγιση, μπορείτε ακόμα να χρησιμοποιήσετε ορισμένες από τις τεχνικές της για να τελειοποιήσετε την ανάπτυξη του Blue-Green.
Χρησιμοποιήστε ένα εργαλείο ανάλυσης καναρίνι όπως π.χ Καγιέντα ή Τρίγωνο ιστίο να αναλύσει την απόδοση της νέας έκδοσης του λογισμικού σε πραγματικό περιβάλλον. Αυτό περιλαμβάνει τη σύγκριση της απόδοσης της νέας έκδοσης του λογισμικού με την απόδοση της παλιάς έκδοσης του λογισμικού.
Χρησιμοποιήστε ένα πλαίσιο εναλλαγής χαρακτηριστικών, όπως π.χ Togglz για να ενεργοποιήσετε ή να απενεργοποιήσετε τις δυνατότητες στη νέα έκδοση του λογισμικού. Αυτό επιτρέπει τη σταδιακή διάθεση νέων λειτουργιών και επιτρέπει την ταχεία επαναφορά εάν είναι απαραίτητο.
Χρησιμοποιήστε ένα Load Balancer με υγειονομικούς ελέγχους
Χρησιμοποιήστε μια συσκευή εξισορρόπησης φορτίου όπως το AWS Elastic Load Balancer ή το NGINX με υγειονομικούς ελέγχους για να διασφαλίσετε ότι η κυκλοφορία κατευθύνεται μόνο σε υγιείς περιπτώσεις. Αυτό διασφαλίζει ότι η εφαρμογή παραμένει εξαιρετικά διαθέσιμη και ότι ο χρόνος διακοπής λειτουργίας ελαχιστοποιείται.
Χρησιμοποιήστε ένα σχέδιο επαναφοράς με αυτόματη επαναφορά
Έχετε ένα σχέδιο επαναφοράς σε εφαρμογή σε περίπτωση προβλημάτων και αυτοματοποιήστε τη διαδικασία επαναφοράς χρησιμοποιώντας ένα εργαλείο όπως το AWS CodeDeploy ή το Octopus Deploy. Αυτό διασφαλίζει ότι ο χρόνος διακοπής λειτουργίας ελαχιστοποιείται και ότι η εφαρμογή παραμένει εξαιρετικά διαθέσιμη.
Αυτό ισχύει κυρίως για το πράσινο περιβάλλον κάθε φορά που ανακαλύπτετε κάποιο σημαντικό πρόβλημα με τη νέα έκδοση.
Δεν χρειάζεστε ένα σχέδιο επαναφοράς για το μπλε περιβάλλον, καθώς αυτό παραμένει ανέγγιχτο από τον διακόπτη και μπορείτε να επιστρέψετε σε αυτό το σταθερό περιβάλλον όποτε χρειαστεί και αμέσως.
Προκλήσεις με την ανάπτυξη του μπλε-πράσινου
Η υλοποίηση της ανάπτυξης του Blue-Green μπορεί να παρουσιάσει ορισμένες προκλήσεις για τις ομάδες ανάπτυξης. Ακολουθούν ορισμένες τυπικές προκλήσεις:
Διαφορά μεταξύ της ανάπτυξης του μπλε-πράσινου και του καναρινιού
Ενώ η διαφορά με τις παραδοσιακές διαδικασίες ανάπτυξης είναι αρκετά εμφανής (δεν υπάρχουν δύο παράλληλα περιβάλλοντα που εκτελούνται με διαφορετικές εκδόσεις λογισμικού στις παραδοσιακές διαδικασίες ανάπτυξης), η διαφορά με την ανάπτυξη Canary μπορεί να είναι λίγο πιο ενδιαφέρουσα.
Μπλε-πράσινη ανάπτυξη σημαίνει δύο περιβάλλοντα (μπλε και πράσινο). Ταυτόχρονα, όμως, τα δύο περιβάλλοντα είναι συνεχώς σε συγχρονισμό όσον αφορά τα δεδομένα. Μόλις η νέα έκδοση δοκιμαστεί και θεωρηθεί έτοιμη, η κυκλοφορία αλλάζει από το ενεργό περιβάλλον στο ανενεργό περιβάλλον, καθιστώντας το νέο ενεργό περιβάλλον. Δεν ξοδεύετε καθόλου χρόνο για την ανάπτυξη νέου κώδικα και δεν υπάρχει χρόνος διακοπής παραγωγής. Όλοι οι χρήστες παραγωγής εργάζονται συνεχώς στο τρέχον ενεργό περιβάλλον και δεν παρατηρούν καν τον διακόπτη.
Η ανάπτυξη Canary περιλαμβάνει την ανάπτυξη μιας νέας έκδοσης του λογισμικού σε ένα μικρό υποσύνολο χρηστών, ενώ η πλειοψηφία των χρηστών ή των διακομιστών συνεχίζει να χρησιμοποιεί την τρέχουσα έκδοση. Πρόκειται για μια σταδιακή ανάπτυξη και όχι για έναν πλήρη διακόπτη. Οι δοκιμαστές είναι, στην περίπτωση αυτή, άμεσοι χρήστες παραγωγής, παρόλο που μόνο ένα καθορισμένο υποσύνολο αυτών. Αυτή η ομάδα δοκιμάζει ενεργά τη νέα έκδοση με διαδικασίες παραγωγής και όταν τελικά σταθεροποιηθεί, η νέα έκδοση θα εξαπλωθεί στους υπόλοιπους χρήστες.
Ποιο λοιπόν είναι καλύτερο;
Η απάντηση ενός συμβούλου «εξαρτάται» ταιριάζει περισσότερο εδώ, όσο κακή κι αν ακούγεται.
Εάν η προτεραιότητα του συστήματός σας είναι πάνω απ’ όλα η υψηλή διαθεσιμότητα, τότε η ανάπτυξη του Blue-Green θα είναι η επιλογή σας.
Εάν η ισχυρή προτίμησή σας είναι μάλλον ταχύτερη ανάδραση και πιο ελεγχόμενη (αν και πιο αργή) διάθεση της νέας έκδοσης συστήματος, τότε η ανάπτυξη του Canary έχει πλεονεκτήματα έναντι του Μπλε-Πράσινου.
Το σημαντικό είναι ότι και οι δύο είναι αρκετά ευέλικτοι ώστε να θεωρούν τους εαυτούς τους αρκετά καλούς για σοβαρή δημιουργία συστήματος DevOps.
Οι περιπτωσιολογικές μελέτες
Το Netflix χρησιμοποιεί την ανάπτυξη Blue-Green για την ανάπτυξη νέων εκδόσεων της υπηρεσίας ροής του. Χρησιμοποιώντας την ανάπτυξη Blue-Green, το Netflix μπορεί να αναπτύξει νέες εκδόσεις της υπηρεσίας του χωρίς να επηρεάσει την εμπειρία του χρήστη. Στην πραγματικότητα, το Netflix χρησιμοποιεί επίσης την ανάπτυξη Canary παράλληλα για άλλες περιπτώσεις, επομένως δεν είναι ρεαλιστικό να συνδυάζονται διαφορετικές προσεγγίσεις για την ανάπτυξη DevOps κάτω από την ίδια στέγη.
Επίσης, η Amazon και το Etsy χρησιμοποιούν την ανάπτυξη Blue-Green για να αναπτύξουν νέες εκδόσεις της πλατφόρμας ηλεκτρονικού εμπορίου τους.
Μια άλλη περίπτωση είναι το LinkedIn που χρησιμοποιεί την ανάπτυξη Blue-Green για την ανάπτυξη νέων εκδόσεων της πλατφόρμας κοινωνικής δικτύωσης.
Τελευταίο αλλά εξίσου σημαντικό, η IBM χρησιμοποιεί την ανάπτυξη Blue-Green για την ανάπτυξη νέων εκδόσεων της πλατφόρμας cloud της.
Αυτές οι εταιρείες έχουν εφαρμόσει με επιτυχία την ανάπτυξη του Blue-Green στις υποδομές της πλατφόρμας τους και αποτελούν καλό παράδειγμα για άλλους.
Τελικές Λέξεις
Όπως το Canary, έτσι και το Blue-Green ανάπτυξη προσπαθεί για την καλύτερη βελτιστοποίηση των ήδη υπαρχουσών ευέλικτων διαδικασιών και μεθοδολογιών σας για την ομαλή παράδοση νέου λογισμικού με τέτοιο τρόπο που κανείς δεν θα το προσέξει ποτέ. Αυτός είναι ο απώτερος στόχος τέτοιων προσεγγίσεων. Παραδίδετε συνεχώς και πολύ συχνά, αλλά κανείς δεν το ξέρει, κανείς δεν το προσέχει και τελικά κανείς δεν νοιάζεται.
Μπορεί να είναι λίγο απογοητευτικό για την ομάδα ανάπτυξης το γεγονός ότι δεν υπάρχουν κουτσομπολιά γύρω από την εταιρεία σχετικά με τις τελευταίες εκδόσεις τους. Αλλά αν με ρωτάτε, αυτή είναι ακριβώς η καλύτερη υπηρεσία που μπορείτε να προσφέρετε. Κανείς δεν μιλά για αυτό, αλλά όλοι το χρησιμοποιούν καθημερινά.
Στη συνέχεια, ρίξτε μια ματιά στις συχνές ερωτήσεις και απαντήσεις συνέντευξης DevOps.