Σχεδιάστε λογισμικό για περιβάλλον cloud native
ΟλοκληρώθηκεΣυνδέστε επαναλήψιμη υποδομή, αντικαταστάσιμες διεργασίες, μόνιμα αποθηκευμένη κατάσταση και παρατηρήσιμη συμπεριφορά. Αξιολογήστε τον σχεδιασμό cloud native πέρα από τη συσκευασία σε container.
Εκδότης TaigaΠώς γράφουμε
Ελέγξτε τι κατανοήσατεΜια πλατφόρμα αντικαθιστά έναν worker αναφορών μετά από αστοχία. Τι κάνει την επανάληψη ασφαλή;Κάντε την άσκηση
Τι θα μάθετε
- Διακρίνετε τη συσκευασία σε container από τη συμπεριφορά cloud native.
- Εντοπίστε κινδύνους κατάστασης, επανάληψης και αντικατάστασης σε μια παραγόμενη υπηρεσία.
- Ορίστε μια τεχνική σύμβαση πλατφόρμας που μπορούν να επαληθεύσουν agents και άνθρωποι.
Ορίστε τη συμπεριφορά που χρειάζεστε
Οι πρακτικές cloud native υποστηρίζουν επαναλήψιμη ανάπτυξη και λειτουργία σε δημόσια, ιδιωτικά ή υβριδικά περιβάλλοντα. Το CNCF δίνει έμφαση σε συστήματα που παραμένουν διαχειρίσιμα, παρατηρήσιμα και ανθεκτικά καθώς αλλάζουν. Τα containers και η ενορχήστρωση μπορούν να υποστηρίξουν αυτή την προσέγγιση. Δεν εξασφαλίζουν από μόνα τους όλες αυτές τις ιδιότητες.
Ξεκινήστε από μια πλασματική υπηρεσία αναφορών. Ένα εργαλείο AI δημιουργεί endpoint, worker και container image. Μια επίδειξη παράγει το σωστό PDF. Πριν από την παραγωγή, η ομάδα πρέπει να απαντήσει σε άλλο ερώτημα: τι συμβαίνει όταν η πλατφόρμα αντικαθιστά τον worker κατά τη διάρκεια μιας εργασίας;
Αυτό είναι ερώτημα σχεδιασμού εφαρμογής όσο και υποδομής. Μια επανεκκίνηση μπορεί να αποκαταστήσει τη διεργασία, χάνοντας όμως την ημιτελή εργασία της.
Διαχωρίστε τη διεργασία από την κατάσταση που πρέπει να διατηρείται
Το πρωτότυπο κρατά τις εργασίες της ουράς και τις ολοκληρωμένες αναφορές στον δίσκο του container. Η αντικατάσταση του container μπορεί να διαγράψει και τα δύο. Η προσθήκη περισσότερων workers μπορεί επίσης να παράγει διαφορετικές απαντήσεις ανάλογα με το ποιος worker λαμβάνει ένα αίτημα.
Ο αναθεωρημένος σχεδιασμός χρησιμοποιεί μόνιμο χώρο αποθήκευσης εργασιών και εγκεκριμένο object store. Ένα αίτημα καταγράφει την ταυτότητα εργασίας. Ένας worker αναλαμβάνει την εργασία, δημιουργεί το αποτέλεσμά της και καταγράφει τη θέση του αποτελέσματος. Οι έλεγχοι πρόσβασης εξακολουθούν να ισχύουν όταν ο χρήστης κατεβάζει την αναφορά.
| Ζήτημα | Ερώτημα για την υπηρεσία αναφορών |
|---|---|
| Κατάσταση | Ποιες εγγραφές πρέπει να διατηρηθούν μετά την αντικατάσταση διεργασίας; |
| Διαμόρφωση | Πώς εκτελείται το ίδιο artifact σε κάθε περιβάλλον; |
| Ταυτότητα | Ποια ταυτότητα υπηρεσίας μπορεί να διαβάσει την εργασία και να γράψει το αποτέλεσμά της; |
| Υγεία | Μπορεί ο worker να δεχτεί εργασία και να την ολοκληρώσει; |
| Τερματισμός | Τι συμβαίνει σε εργασία που έχει αναληφθεί όταν σταματά ο worker; |
| Δυναμικότητα | Ποιο όριο εμφανίζεται πρώτο: workers, βάση δεδομένων, αποθήκευση ή άλλη υπηρεσία; |
Κρατήστε τα μυστικά έξω από το image. Παρέχετέ τα μέσω του εγκεκριμένου συστήματος μυστικών. Καταγράψτε ποιες αλλαγές διαμόρφωσης απαιτούν νέα διάθεση ή επανεκκίνηση διεργασίας.
Σχεδιάστε τις επαναλήψεις πριν προσθέσετε workers
Υποθέστε ότι ο worker αποθηκεύει ένα PDF και μετά σταματά πριν επιβεβαιώσει την εργασία. Η ουρά παραδίδει την εργασία ξανά. Μια δεύτερη προσπάθεια δεν πρέπει να δημιουργήσει δεύτερη χρέωση πελάτη ή να στείλει αντικρουόμενα μηνύματα ολοκλήρωσης.
Χρησιμοποιήστε idempotent ενέργεια όπου ενδείκνυται. Η επανάληψη του ίδιου λογικού αιτήματος πρέπει να διατηρεί το επιδιωκόμενο αποτέλεσμα. Ορίστε σταθερή ταυτότητα αιτήματος, αποθηκεύστε μόνιμα το αποτέλεσμα και ελέγξτε τι συμβαίνει σε κάθε σημείο αστοχίας. Η AWS περιγράφει αυτή την τεχνική στον οδηγό ασφαλών επαναλήψεων.
Οι επαναλήψεις χρειάζονται επίσης όρια. Χρησιμοποιήστε χρονικό όριο, όριο επαναλήψεων και καθυστέρηση που αποτρέπει ταυτόχρονα επαναλαμβανόμενα αιτήματα. Διατηρήστε τις αποτυχημένες εργασίες για εξέταση αντί να τις επαναλαμβάνετε για πάντα.
Κάντε την επιθυμητή κατάσταση ανασκοπήσιμη
Μια δηλωτική διαμόρφωση περιγράφει το επιδιωκόμενο deployment. Ένας controller εργάζεται για να διατηρεί αυτή την κατάσταση. Για παράδειγμα, ένα Kubernetes Deployment διαχειρίζεται αντίγραφα εφαρμογής και ελεγχόμενες ενημερώσεις. Η εφαρμογή πρέπει και πάλι να χειρίζεται σωστά την αντικατάσταση.
Διατηρήστε εκδόσεις της διαμόρφωσης υποδομής και εφαρμογής. Εξετάστε αλλαγές μέσω της κανονικής διαδικασίας παράδοσης. Παρατηρήστε την πραγματική ολοκλήρωση εργασιών, την ηλικία των εργασιών στην ουρά, τις αστοχίες και τα όρια εξαρτήσεων. Μια διεργασία που εκτελείται μπορεί και πάλι να αδυνατεί να παράγει αναφορά.
Επιλέξτε πλατφόρμα που μπορεί να λειτουργήσει η ομάδα
Το cloud native δεν απαιτεί κάθε εφαρμογή να μετατραπεί σε microservices. Μια αρθρωτή εφαρμογή σε διαχειριζόμενο runtime μπορεί να καλύπτει τις απαιτήσεις της. Περισσότερες υπηρεσίες εισάγουν περισσότερες διεπαφές, αποφάσεις deployment και λειτουργική εργασία.
Δώστε στον agent ανάπτυξης την πραγματική τεχνική σύμβαση της πλατφόρμας: υποστηριζόμενο runtime, μέθοδο ταυτότητας, υπηρεσίες δεδομένων, κανόνες deployment και απαιτούμενα αποδεικτικά στοιχεία. Δοκιμάστε τη συμπεριφορά διακοπής και αντικατάστασης μαζί με επιτυχή αιτήματα. Συνεχίστε με τη διαθεσιμότητα και τα όρια αστοχίας.
Κάντε την άσκηση
Μια πλασματική υπηρεσία αναφορών αποθηκεύει εργασίες και ολοκληρωμένα αρχεία στον δίσκο του container. Σχεδιάστε τη ροή από το αίτημα στην εργασία, στο αρχείο και στη λήψη. Σημειώστε την κατάσταση που πρέπει να διατηρείται μόνιμα. Ορίστε τι συμβαίνει αν ο worker σταματήσει αφού γράψει ένα αρχείο αλλά πριν επιβεβαιώσει την εργασία.
Λήψη φύλλου εργασίας (Markdown)Η κατάργηση αυτής της επιλογής διαγράφει όλη την πρόοδο που έχει αποθηκευτεί σε αυτόν τον browser.
Η πρόοδος παραμένει σε αυτό το πρόγραμμα περιήγησης. Χωρίς λογαριασμό ή παρακολούθηση.
Πηγές και πρόσθετη μελέτη
- CNCF: Cloud Native Definition v1.1 ↗
- Kubernetes: Deployments ↗
- AWS Builders’ Library: Making retries safe with idempotent APIs ↗