castomFLOW
Άνοιγμα του castomFLOW

Εκτελέσεις στις οποίες μπορείτε να εμπιστεύεστε

Κανείς δεν προσέχει μια αυτοματοποίηση μέχρι να στείλει κάτι δύο φορές

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

Προσομοιώστε πριν τη δημοσίευση

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

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

Οι προσομοιώσεις είναι ο τρόπος να απαντήσετε στην ερώτηση που εμποδίζει τους ανθρώπους να ενεργοποιήσουν μια αυτοματοποίηση: τι θα κάνει στην πραγματικότητα;

Προσομοίωση · παραγγελία 88 214Τίποτα δεν στάλθηκε
  • 1Επικύρωση διεύθυνσηςΤαίριαξε. Θα είχαν γραφτεί 6 πεδία.
  • ?ΣυνθήκηΠαραγγελία άνω των 1 000 zł; Όχι — 289,00 zł. Ακολουθήθηκε η σύντομη διαδρομή.
  • 3ΤιμολόγιοΘα γινόταν POST στο σύστημα τιμολόγησης. Το payload εμφανίζεται πλήρες.
  • !Πιάστηκε εδώΟ συντελεστής ΦΠΑ αντιστοιχίστηκε από λάθος πεδίο. Βρέθηκε σε προσομοίωση και όχι στα εισερχόμενα ενός λογιστή.

Στάλθηκε: τίποταΧρεώθηκε: τίποτα

Κάθε εκτέλεση ακολουθεί την έκδοση με την οποία μπήκε

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

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

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

Επεξεργασία σε λειτουργίαv4 → v5
  • 1Πριν2 918 εκτελέσεις σε εξέλιξη, όλες σε v4. Κάποιες σε αναμονή δύο ημερών.
  • 2Δημοσίευση v5Δύο βήματα αναδιατάχθηκαν, ένα μήνυμα ξαναγράφτηκε.
  • 3ΜετάΟι 2 918 ολοκληρώνουν την v4. Ό,τι ξεκινά από τις 11:40 τρέχει την v5.
  • §Κανείςδεν έλαβε το μισό από μια ροή εργασίας και το μισό από μια άλλη.

Έκδοση καταγεγραμμένη σε κάθε εκτέλεσηΟι παλιές εκδόσεις διατηρούνται

Επαναλήψεις που δεν μπορούν να στείλουν διπλό μήνυμα

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

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

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

Ο worker σκοτώθηκε κατά την αποστολήΑνακτήθηκε
  • 1Το βήμα 5 ξεκινάΣτείλτε την ειδοποίηση αποστολής.
  • ✕Ο worker πεθαίνειDeploy. Τίποτα δεν είχε δεσμευτεί.
  • 2ΠαρουλιάστηκεΆλλος worker βρίσκει την εκτέλεση ακόμα στο βήμα 5.
  • ✓Στάλθηκε μία φοράΟ πελάτης έλαβε ένα e-mail, όχι δύο.

Οι επιδράσεις δεσμεύονται μαζί με την προώθησηΚλειδί idempotency ανά εκτέλεση και βήμα

Ένα αρχείο καταγραφής γραμμένο για να το διαβάσει άνθρωπος

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

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

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

Κατά τη νύχτα, ομαδοποιημένες41 αποτυχίες
  • 1Μία αιτίαΤο API του προμηθευτή επέστρεψε 503 μεταξύ 02:41 και 02:50.
  • 2Τι συνέβηΚαι οι 41 επαναλήφθηκαν· οι 39 πέτυχαν στη δεύτερη προσπάθεια.
  • 3ΕκκρεμήΔύο σταμάτησαν και περιμένουν έναν άνθρωπο. Και οι δύο εμφανίζονται με τη γραμμή που απέτυχε.
  • §Όχι σαράντα μίαέρευνες. Μία, και μια απόφαση για δύο εγγραφές.

Τα διαπιστευτήρια αποκρύφθηκανΗ έκδοση καταγράφηκε

Τι δεν ισχυριζόμαστε

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

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

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

Η εκτέλεση στην οποία δεν σκέφτεστε ποτέ είναι αυτή που πέτυχε.