5 Προκλήσεις για να πάει Cloud-native - και πώς να τους λύσει

Ζούμε σε έναν κόσμο γεμάτο σύννεφα. Μπορείτε να διαβάσετε μόλις ένα tech blog ή να πάτε σε ένα συνέδριο χωρίς να ακούσουμε για όλα τα πλεονεκτήματα των τεχνολογιών ή αρχιτεκτονικών της cloud-native, όπως τα δοχεία, οι μικροεπιχειρήσεις και οι λειτουργίες serverless.

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

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

Τι είναι το cloud-native;

Πρώτον, όμως, μια λέξη για το τι σημαίνει cloud-native πράγματι.

Με τη διαφημιστική εκστρατεία γύρω από όλα τα πράγματα «σύννεφο», «σύννεφο-μητρική» χρησιμοποιείται μερικές φορές από τους λαούς να σημαίνει οποιοδήποτε είδος της τεχνολογίας ή της στρατηγικής που θεωρούν σύγχρονο. Από αυτή την προοπτική, το σύννεφο-native καταλήγει ως ένα άλλο σχετικά σχετικά νόημα buzzword.

Από την άλλη πλευρά, όταν επενδύονται με συγκεκριμένο και περιορισμένο νόημα, το σύννεφο-native είναι ένας χρήσιμος όρος και έννοια. Μας αρέσει ο ορισμός του CNCF, ο οποίος δίνει έμφαση στα "χαλαρά συζευγμένα συστήματα" και στην ανθεκτικότητα ως χαρακτηριστικά των υπολογιστικών συστημάτων που χρησιμοποιούν το σύννεφο. Ο ορισμός του CNCF υποδεικνύει επίσης έναν συγκεκριμένο και περιορισμένο κατάλογο τεχνολογιών και αρχιτεκτονικών - "δοχεία, μάτια εξυπηρέτησης, μικροσυντηρήσεις, αμετάβλητη υποδομή και δηλωτικά API" - ως παραδείγματα τεχνολογιών που χρησιμοποιούν τη σύννεφο.

Για τους σκοπούς αυτού του άρθρου, θα επιμείνουμε στον ορισμό του CNCF για το cloud-native. Τώρα, συζητήστε τις συγκεκριμένες προκλήσεις που προκύπτουν όταν χρησιμοποιείτε τεχνολογίες και στρατηγικές όπως αυτές που περιγράφονται παραπάνω.

Προκλήσεις για την υιοθέτηση του Native Cloud

1) Συνεχής αποθήκευση δεδομένων

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

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

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

2) Ενσωμάτωση υπηρεσιών

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

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

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

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

3) Διαχείριση και παρακολούθηση

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

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

4) Αποφυγή του cloud-in

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

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

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

5) Δημιουργία εφαρμογών αγωγών παράδοσης cloud-native

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

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

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

Ενώ η ανάπτυξη που είναι πλήρως βασισμένη στο σύννεφο δεν είναι για όλους και ορισμένοι προγραμματιστές προτιμούν την εξοικείωση και την ανταπόκριση των τοπικών IDE σε σχέση με τα cloud-based, προσπαθήστε να διασφαλίσετε ότι οι αγωγοί CI / CD λειτουργούν σε περιβάλλον cloud, στο μέτρο του δυνατού.

συμπέρασμα

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