Μετάβαση στο κύριο περιεχόμενο

Γιατί να αγοράσετε retries δημιουργούν διπλά δικαιώματα και πώς να τα δοκιμάσετε

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

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

Η επανάληψη δεν είναι δεύτερη απόφαση αγοράς.

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

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

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

Δώστε σε κάθε πρόθεση αγοράς ένα σταθερό κλειδί

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

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

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

Μοντέλο του άγνωστου αποτελέσματος δέσμευσης

Το δύσκολο αποτέλεσμα δεν είναι μια καθαρή επιτυχία ή μια καθαρή αποτυχία. Είναι “άγνωστη”: ο πελάτης δεν ξέρει αν ο διακομιστής διέπραξε την επιχορήγηση. Ένα τάιμ-άουτ, επαναφορά σύνδεσης, επανεκκίνηση διεργασίας, ή διακοπή λειτουργίας μπορεί να παράγει αυτή την κατάσταση. Η ασφαλής συμπεριφορά του πελάτη είναι να ζητήσει την κατάσταση συναλλαγής ή να ξαναδοκιμάσει την ίδια πρόθεση. Η ασφαλής συμπεριφορά του διακομιστή είναι να εξετάσει την πρόθεση και να επιστρέψει την ανθεκτική απόφαση αντί να εφαρμόσει μια άλλη μετάλλαξη.

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

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

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

Προστασία των δικαιωμάτων και των συναλλαγματικών αμετάβλητων

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

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

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

Δοκιμές τραυμάτων, επανεκκινήσεις, και εσκεμμένα επαναλήψεις

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

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

Χρησιμοποιήστε redelivery απόδειξη στο ίδιο σενάριο. Παραδώστε την ακριβή αξιόπιστη συναλλαγή δύο φορές, στη συνέχεια, να την παραδώσει μετά από μια επανεκκίνηση, στη συνέχεια να την παραδώσει μαζί με ένα διπλό client retry. Το προκύπτον καθολικό και την κατάσταση του λογαριασμού θα πρέπει να είναι πανομοιότυπο με την περίπτωση της εφάπαξ παράδοσης. Αν το προϊόν επιτρέπει την επανάληψη αγορών, εκτελέστε την ίδια ακολουθία με δύο πραγματικά διακριτές ταυτότητες συναλλαγών για να αποδείξει το σύστημα δεν υπερ-dededuplate από το προϊόν ID και μόνο.

Κράτα τα όρια τίμια.

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

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

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

Πρακτικός κατάλογος ελέγχου

  • Ξεχωρίστε μια σταθερή πρόθεση αγοράς από την επόμενη επιχορήγηση πλευρά του παιχνιδιού.
  • Χρησιμοποιήστε ένα κλειδί idempotency σε όλα τα χρονικά διαστήματα, επαναδρομολογήσεις, επανεκκινεί, και redelivery παραλαβή.
  • Συνδέστε το κλειδί για το λογαριασμό, το προϊόν ή το σχήμα δικαιώματος, και αξιόπιστη πηγή πλαίσιο.
  • Καθορισμός ανθεκτικών καταστάσεων όπως εκκρεμότητα, δέσμευση, απόρριψη και επανεξέταση αναγκών.
  • Επιβολή του δικαιώματος μοναδικότητας και αναλλοίωτων διανομέων εντός του ίδιου ορίου συμψηφισμού με την επιχορήγηση.
  • Ένεση αποτυχιών μετά από κάθε μετάβαση κατάστασης, στη συνέχεια επανεκκίνηση και επανεκκίνηση της ίδιας πρόθεσης.
  • Δοκιμή διπλής παράδοσης και νόμιμες επαναλαμβανόμενες αγορές ξεχωριστά.
  • Αναφέρετε τα άγνωστα αποτελέσματα με ειλικρίνεια: μην μεταμορφώνετε ένα τάιμάουτ σε μια επινοημένη επιτυχία.
  • Διατηρείτε τα εξαρτήματα και τα αρχεία καταγραφής δοκιμών συνθετικά και επαναδιατυπωμένα.

Συχνές ερωτήσεις

Είναι μια μοναδική ταυτότητα απόδειξης αρκετή για την ανικανότητα;

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

Πρέπει ένας πελάτης να ξαναπροσπαθήσει αυτόματα μετά από ένα τάιμ-άουτ;

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

Πώς διαφέρουν τα αναλώσιμα από τα μόνιμα δικαιώματα;

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

Τι ισχυρίζεται εδώ το Persistium;

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

Σχετικό σύστημαΕξερευνήστε το Persistium