【Περιγραφή προβλήματος】 Όταν οι χρήστες χρησιμοποιούν την APP, η σελίδα είναι πολύ κολλημένη και θα κάνουν κλικ τυχαία, επειδή η διεπαφή δεν κάνει επαναλαμβανόμενες υποβολές, θα υπάρχουν πολλά πανομοιότυπα αιτήματα, στο επίπεδο υπηρεσίας, το ένα νήμα δεν εισάγεται πλήρες και το άλλο νήμα ελέγχει, κενό. Έτσι έβαλα και ένα. Αρχικά, όλοι είχαν ένα, αλλά ένας πωλητής είχε τρία, με αποτέλεσμα λάθη επιχειρηματικής λογικής. Για την επεξεργασία κακόβουλων υποβολών, μπορεί να γίνει στο front-end μέρος, ενώ μπορεί να υπάρχουν και ώριμες λύσεις στο back-end μέρος.
【Λύση】1. Χρησιμοποιήστε περιορισμούς μοναδικότητας για να λύσετε το πρόβλημα της μοναδικότητας των συναλλαγών, ορίστε περιορισμούς μοναδικότητας και εάν υπάρχει σενάριο επαναλαμβανόμενων υποβολών, εξαιρέσεις στους περιορισμούς μοναδικότητας θα τεθούν σε επίπεδο βάσης δεδομένων και η επιχειρηματική λογική δεν θα καταστραφεί. Οι περιορισμοί μοναδικότητας στη σύνθεση πολλαπλών πεδίων είναι επίσης αποδεκτοί.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Τα παραπάνω είναι για να κάνετε ρυθμίσεις κατά των διπλότυπων σε επίπεδο βάσης δεδομένων.
2. Πραγματοποιήστε ρυθμίσεις κατά της αντιγραφής σε επίπεδο κώδικα. Πολλές φορές, λέγεται ότι ο περιορισμός μοναδικότητας της βάσης δεδομένων θα επηρεάσει την αποτελεσματικότητα της εισαγωγής δεδομένων, επειδή κάθε εισαγωγή απαιτεί κρίση σε επίπεδο βάσης δεδομένων. Επομένως, κρίνοντας από το επίπεδο κώδικα, η κοινή πρακτική σε επίπεδο κώδικα είναι να επιλέγετε πρώτα και μετά να εισάγετε, αλλά εάν υπάρχει ένα υψηλό σενάριο ταυτοχρονισμού, θα εξακολουθούν να υπάρχουν επαναλαμβανόμενες υποβολές. Μπορείτε να προσθέσετε συγχρονισμένο στον λογικό κώδικα, έτσι ώστε σε σενάρια υψηλής ταυτόχρονης εκτέλεσης, επιλέξτε πρώτα και μετά εισαγάγετε θα τεθεί σε ισχύ. Αλλά η απόδοση δεν είναι υψηλή και ο παραλληλισμός γίνεται σειριακός. Μπορεί να χρησιμοποιηθεί μηχανισμός κλειδώματος DCL. (Έχετε διαπιστώσει ότι η μέθοδος δημιουργίας ενός μεμονωμένου αντικειμένου στη λειτουργία περίπτωσης αντιγραφής είναι πολύ παρόμοια, πρώτα κρίνετε αν το αντικείμενο υπάρχει, αν δεν υπάρχει, δημιουργήστε το, διαφορετικά μην το δημιουργήσετε), ο φυσικός μηχανισμός κλειδώματος DCL είναι πιο αποτελεσματικός.
#分布式锁 Οι κατανεμημένες κλειδαριές μπορούν επίσης να χρησιμοποιηθούν για την επίλυση του προβλήματος, που χρησιμοποιούνται συνήθως από τους Redis και Zookeeper. Αυτή η ενότητα εξηγεί πώς να υλοποιήσετε κατανεμημένα κλειδώματα χρησιμοποιώντας το Redis. Υπάρχει μια λειτουργία εντολής setNx στο Redis, εάν δεν υπάρχει, είναι μια καθορισμένη τιμή και επιστρέφεται 1. Εάν υπάρχει, δεν ορίζεται και επιστρέφει 0. Χρησιμοποιώντας τη δυνατότητα single-threading του Redis, η σκηνή υψηλής ταυτόχρονης χρήσης μετατρέπεται σε σειριακή μέσω της ουράς μηνυμάτων. Ωστόσο, υπάρχουν παγίδες στις κατανεμημένες κλειδαριές, επομένως πρέπει να δώσετε προσοχή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή. 3. Μηχανισμός MVCC;
3.1 Τι είναι ο μηχανισμός MVCC; Το MVCC είναι ένας μηχανισμός ελέγχου συγχρονισμού πολλαπλών εκδόσεων.
3.2 Ποια προβλήματα μπορούν να λυθούν; Ο μηχανισμός κλειδώματος μπορεί να ελέγχει ταυτόχρονες λειτουργίες, αλλά η επιβάρυνση του συστήματος είναι μεγάλη και το MVCC μπορεί να αντικαταστήσει τις κλειδαριές σε επίπεδο σειράς στις περισσότερες περιπτώσεις, γεγονός που μπορεί να μειώσει την επιβάρυνση του συστήματος και να βελτιώσει την απόδοση.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
4. Υπάρχει επίσης πρόβλημα ανικανότητας στα μηνύματα
Για παράδειγμα, πώς να αποτρέψετε την επαναλαμβανόμενη κατανάλωση μηνυμάτων;
Στο ενδιάμεσο λογισμικό μηνυμάτων στο MQ, αυτά πρέπει να γίνουν κατανοητά και κατανοητά.
|