Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

Πώς να βρείτε τη μία γραμμή που κάνει το checkout αργό.

Όταν ένα e-shop μοιάζει αργό και οι servers είναι αδρανείς, η αναμονή είναι συνήθως μια σύγχρονη κλήση στο σύστημα κάποιου άλλου μέσα στη διαδρομή του αιτήματος. Η μέθοδος που μετατρέπει το «μοιάζει αργό» σε αρχείο και γραμμή.

Από EuroVPS EngineeringΤο μηχανοστάσιο

5 λεπτά ανάγνωσης
Σε αυτό το άρθρο 8 ενότητες

Τα παράπονα ότι ένα e-shop είναι αργό είναι από τα ασαφή, φήμης. Χωρίς stack trace, χωρίς αριθμό γραμμής, απλώς ένας έμπορος που μεταφέρει ότι το είπε ένας αγοραστής, και η αριθμητική από κάτω: ένα αργό checkout είναι ένα εγκαταλειμμένο καλάθι, και ένα εγκαταλειμμένο καλάθι είναι έσοδα που φεύγουν στη μέση της αγοράς. Οπότε η πρώτη δουλειά δεν είναι να διορθωθεί κάτι. Είναι να μετατραπεί μια αίσθηση σε τοποθεσία.

Εν συντομία
  • Μετρήστε την πλατφόρμα κάτω από το φορτίο που αποτυγχάνει, όχι σε μια ήσυχη στιγμή: CPU, load, μνήμη, δίσκο, σε κάθε επίπεδο. Αν κάθε επίπεδο είναι αδρανές, η αναμονή ζει στην εφαρμογή ή σε κάτι που καλεί.
  • Μην εμπιστεύεστε την cached αρχική σελίδα. Σερβίρεται από το CDN και δεν αποδεικνύει τίποτα για το καλάθι και το checkout, που τρέχουν ζωντανό κώδικα εφαρμογής σε κάθε αίτημα.
  • Καταγράψτε κάθε αίτημα πιο αργό από ένα κατώφλι και ομαδοποιήστε τα stack traces με βάση το πού μπλοκάρει κάθε αίτημα, όχι το πού ξεκίνησε. Μία ομάδα ξεχωρίζει πάνω από τις άλλες, και είναι συνήθως μια σύγχρονη κλήση σε σύστημα που το e-shop δεν λειτουργεί.
  • Παραδώστε το ακριβές αρχείο, την ακριβή γραμμή και τη διόρθωση: σύντομο timeout με fallback, η εξωτερική κλήση μεταφερμένη σε background job, και τα queries από κάτω της με index ώστε να κάνουν seek αντί για scan.

Το παράπονο έρχεται ως αίσθηση

Η διατύπωση είναι θέμα φήμης, όχι τεχνική: ένας αγοραστής είπε στον έμπορο ότι το site έμοιαζε αργό, και ο έμπορος το μεταφέρει. Για ένα e-shop, το «αργό checkout» δεν είναι λεπτομέρεια: είναι καλάθια που εγκαταλείπονται στο βήμα της πληρωμής, το πιο ακριβό σημείο ολόκληρου του site για να χάσεις κάποιον. Αυτό δίνει το πλαίσιο της επείγουσας ανάγκης, αλλά δεν δείχνει πουθενά. Το αργό είναι αίσθηση, όχι τοποθεσία.

ΓΙΑΤΙ ΤΟ «ΑΡΓΟ» ΕΙΝΑΙ ΤΟ ΠΙΟ ΔΥΣΚΟΛΟ TICKET

Ένας συναγερμός πόρων σάς λέει πού να κοιτάξετε. Το «το site είναι αργό» δεν σας λέει τίποτα: μπορεί να είναι το δίκτυο, ο host, η βάση δεδομένων, η εφαρμογή, ή ένα τρίτο μέρος που το e-shop δεν λειτουργεί καν. Πριν μπορέσετε να το διορθώσετε πρέπει να μετατρέψετε μια αίσθηση σε αριθμό γραμμής. Τα υπόλοιπα είναι το πώς.

Μετρήστε πρώτα την πλατφόρμα κάτω από το φορτίο που αποτυγχάνει

Ξεκινήστε από την πλατφόρμα, μετρημένη κάτω από το ακριβές φορτίο που αποτυγχάνει: CPU, load average, ελεύθερη μνήμη, χρήση δίσκου, στο web tier και στη βάση δεδομένων. Διαβάστε τα όσο συμβαίνει η αργοπορία, όχι από ένα dashboard που βγάζει μέσο όρο μιας ήσυχης εβδομάδας. Αν κάθε επίπεδο είναι αδρανές, η αναμονή ζει στην εφαρμογή ή σε κάτι που καλεί, και η υπόλοιπη μέθοδος έχει να κάνει με το να βρεθεί ποιο.

Εκεί σταματούν πολλές διαγνώσεις. Το «είναι η εφαρμογή» είναι αληθινό και άχρηστο για έναν έμπορο: απαλλάσσει τον host και αφήνει το e-shop ακριβώς τόσο κολλημένο όσο πριν. Ένας ιδιοκτήτης e-shop δεν θέλει να μάθει ότι είναι η εφαρμογή. Θέλει να μάθει ποια γραμμή, και γιατί. Οπότε η μέθοδος συνεχίζει μέσα σε κώδικα που δεν είναι δικός μας να τον διορθώσουμε, γιατί η εύρεση της γραμμής είναι το πραγματικό παραδοτέο.

Η αρχική σελίδα θα προσπαθήσει να το κρύψει

Το πρώτο που δείχνει ένας πρόχειρος έλεγχος μοιάζει καθησυχαστικό, και αυτή είναι η παγίδα. Η αρχική σελίδα, cached στο CDN, επιστρέφει γρήγορα. Αν ελέγξετε ένα e-shop φορτώνοντας την πρώτη του σελίδα, συμπεραίνετε ότι όλα είναι εντάξει και κλείνετε το ticket. Όμως μια cached αρχική σελίδα δεν αποδεικνύει τίποτα για το checkout, γιατί ο πόνος ζει μόνο στις διαδρομές που δεν μπορούν να γίνουν cache: το δυναμικό καλάθι και το checkout, όπου το e-shop τρέχει τον πραγματικό του κώδικα σε κάθε αίτημα.

Η cached αρχική σελίδαΗ διαδρομή του checkout
Σερβίρεται από το edge του CDNΤρέχει ζωντανό κώδικα εφαρμογής κάθε φορά
WHERE THE PAIN LIVESΓρήγορη σε κάθε πρόχειρο έλεγχοΕκεί που ζει πραγματικά κάθε δευτερόλεπτο της αναμονής
Μοιάζει απολύτως υγιήςΔεν την αγγίζει ποτέ ένας πρόχειρος έλεγχος της αρχικής

Ομαδοποιήστε με βάση το πού μπλοκάρει, όχι το πού ξεκινά

Η κίνηση που το ανοίγει μετατρέπει τον θόρυβο σε ομολογία. Αντί να μαντεύετε, καταγράψτε κάθε αίτημα πιο αργό από ένα κατώφλι σε όλους τους web κόμβους, μετά ομαδοποιήστε τα stack traces με βάση το μόνο που μετράει. Όχι το πού ξεκίνησε κάθε αίτημα (όλα ξεκινούν σε ένα URL), αλλά την ακριβή γραμμή όπου κάθε αίτημα είναι μπλοκαρισμένο, κάθεται και περιμένει. Ομαδοποιήστε χιλιάδες αργά αιτήματα με βάση το σημείο μπλοκαρίσματός τους και το μάντεμα τελειώνει. Μία ομάδα ξεχωρίζει πάνω από τις άλλες, και σε ένα e-shop είναι συνήθως μια ζωντανή εξερχόμενη κλήση σε σύστημα που το e-shop δεν λειτουργεί: έλεγχος αποθέματος, αναζήτηση τιμής, σκορ απάτης, ένα ERP, μέσα στην επικύρωση παραγγελίας. Μια κλήση βάσης που τροφοδοτεί την ίδια ενσωμάτωση είναι συνήθως η επόμενη ομάδα παρακάτω.

Διαβάστε ένα μπλοκαρισμένο αίτημα από πάνω έως κάτω

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

Μετά διαβάστε τη διαμόρφωση του client για αυτή την κλήση. Το ταβάνι της αναμονής είναι μία γραμμή: το timeout του. Ένα timeout client ρυθμισμένο σε λεπτά, εκεί που η διαδρομή πληρωμής χρειάζεται δευτερόλεπτα, σημαίνει ότι ένας αγοραστής μπορεί να μείνει στο κουμπί πληρωμής για όσο χρειαστεί ο συνεργάτης να απαντήσει, και η αργή μέρα του συνεργάτη γίνεται η μέρα του e-shop.

“Ένας αγοραστής που προσπαθεί να πληρώσει περιμένει ένα μηχάνημα που το e-shop δεν λειτουργεί, σε δίκτυο που το e-shop δεν λειτουργεί, πριν καν επικυρωθεί η παραγγελία.”

Ελέγξτε τα queries από κάτω

Το slow log της βάσης δείχνει συνήθως την ίδια ενσωμάτωση: τα queries που την τροφοδοτούν κάνουν scan αντί για seek, και κάθονται στην ίδια διαδρομή. Η εξωτερική κλήση είναι αργή, τα queries από κάτω της είναι αργά, και τα δύο στέκονται ανάμεσα στον αγοραστή και την παραγγελία. Η διόρθωση της κλήσης χωρίς τα queries αφήνει το δεύτερο bottleneck στη θέση του.

Δεν ξαναγράφουμε το checkout σας. Σας παραδίδουμε τη γραμμή.

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

01

Περιορίστε το timeout

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

02

Βγάλτε την από τη διαδρομή του αιτήματος

: Μεταφέρετε την εξωτερική κλήση έξω από το ζωντανό αίτημα, σε background job. Η πληρωμή ενός αγοραστή δεν πρέπει να περιμένει, ζωντανά, την απόκριση ενός τρίτου.

03

Διορθώστε τα queries από κάτω

: Βάλτε index και ξαναγράψτε τα queries που τροφοδοτούν την ενσωμάτωση, ώστε τα δεδομένα πίσω της να πάψουν να είναι δεύτερο bottleneck.

Μέσα στη διαδρομή του αιτήματος
  • Μια ζωντανή κλήση σε εξωτερικό σύστημα μέσα στην επικύρωση παραγγελίας
  • Ένα timeout μετρημένο σε λεπτά στο βήμα της πληρωμής
  • Ο αγοραστής που περιμένει στο κουμπί πληρωμής
  • Full-table scans που τρέχουν inline με το checkout
Έξω από τη διαδρομή του αιτήματος
  • Η εξωτερική κλήση μεταφερμένη σε background job
  • Ένα timeout λίγων δευτερολέπτων με ομαλό fallback
  • Το κουμπί πληρωμής απαντά στον δικό της χρόνο της πλατφόρμας
  • Τα queries με index και ξαναγραμμένα

Το μάθημα

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

Ο ΚΑΝΟΝΑΣ

Κρατήστε τις σύγχρονες κλήσεις τρίτων έξω από τη διαδρομή του αιτήματος. Δώστε στα εξωτερικά συστήματα σύντομο timeout και fallback, και κάντε την πραγματική δουλειά σε background job. Η διαδρομή του αιτήματος ανήκει στον αγοραστή.

Ευθείες απαντήσεις

Γιατί είναι αργό το checkout μου όταν το υπόλοιπο site είναι γρήγορο;+

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

Ένα αργό checkout είναι πρόβλημα hosting ή πρόβλημα εφαρμογής;+

Αξίζει να αποδειχθεί, όχι να υποτεθεί. Μετρήστε το web tier και τη βάση κάτω από το ίδιο ζωντανό φορτίο: CPU, load, μνήμη, δίσκο. Αν τίποτα δεν στερείται πόρους, η αναμονή είναι στην εφαρμογή ή σε κάτι που καλεί, και το επόμενο βήμα είναι να καταγράψετε τα αργά αιτήματα και να διαβάσετε πού μπλοκάρουν.

Τι είναι μια σύγχρονη κλήση τρίτου στη διαδρομή του checkout;+

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

Πώς βρίσκετε ποια γραμμή κάνει μια σελίδα αργή;+

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

Θα διορθώσετε τον κώδικά μου για μένα;+

Δεν ξαναγράφουμε το checkout σας: είναι η επιχειρηματική σας λογική. Σας παραδίδουμε το ακριβές αρχείο, την ακριβή γραμμή και τη συγκεκριμένη διόρθωση: συντομεύστε το timeout με fallback, μεταφέρετε την κλήση τρίτου σε background job, και εμείς θα βάλουμε index και θα ξαναγράψουμε τα αργά queries από κάτω της. Η διάγνωση, παραδομένη με ακρίβεια, είναι το προϊόν.

Πρέπει ένα κουμπί πληρωμής να καλεί απευθείας ένα ERP ή άλλον τρίτο;+

Κρατήστε το έξω από τη διαδρομή του αιτήματος. Ένα σύστημα σε υποδομή που δεν ελέγχετε δεν πρέπει να στέκεται ανάμεσα στον αγοραστή και την πληρωμή. Δώστε του σύντομο timeout και ομαλό fallback ώστε να μπορεί να αποτύχει χωρίς να ρίξει το checkout, και μεταφέρετε την πραγματική κλήση σε background job.

Κάτι στο checkout σας είναι αργό. Θα βρούμε τη γραμμή.

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

Μιλήστε με έναν μηχανικό

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

Φτάσατε στο τέλος.

Βάλτε την ανάγνωση σε εφαρμογή

Τι τρέχετε;

Πείτε μας για τον φόρτο εργασίας, την κίνηση και τις απαιτήσεις ανάκαμψης. Ξεκινήστε από το εργαλείο διαμόρφωσης server ή συζητήστε τις λεπτομέρειες με έναν μηχανικό.

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

5 λεπτά ακόμη