GH GambleHub

Δοκιμή φορτίου και στρες

Δοκιμή φορτίου και στρες

1) Γιατί το χρειάζεστε

Στόχοι:
  • Επιβεβαίωση χωρητικότητας (πόσες συνεδριάσεις RPS/διαγωνισμού θα αντέξει το σύστημα σε δεδομένη SLO).
  • Εύρεση σημείων συμφόρησης (CPU/IO/DB/δίκτυα/κλειδαριές/δεξαμενές).
  • Κατάρτιση προϋπολογισμών επιδόσεων και πυλών σε CI/CD.
  • Μείωση του κινδύνου απελευθέρωσης (p95/p99 παλινδρόμηση, αύξηση σφάλματος αιχμής).
  • Χωρητικότητα/κόστος σχεδίου (κλίμακα και αποθέματα).

2) Τύποι δοκιμών perf

Φορτίο: ρεαλιστική κίνηση κοντά στις κορυφές. Επικύρωση SLO.
Στρες: ανάπτυξη προς/πάνω από το όριο συμπεριφοράς υποβάθμισης όπου σπάει.
Ακίδα: άλμα γρήγορου φορτίου → ελαστικότητα/αυτόματη κλιμάκωση.
Εμποτισμός/Αντοχή: ώρες/ημέρα → διαρροές, κατακερματισμός, μετατόπιση της καθυστέρησης.
Ικανότητα/κλιμάκωση: πώς μεταβάλλεται η απόδοση/η καθυστέρηση με κλιμάκωση· Νόμος Amdal/Gustafson.
Καπνός perf: ένα σύντομο «καπνό» σε κάθε απελευθέρωση (αξιοπρέπεια απόδοσης).


3) Μοντέλα παραγωγής κυκλοφορίας

Σταθερή VU/concurrency: «N» χρήστες, καθένας από τους οποίους ζητά να → ουρά αναμονής στον πελάτη. Κίνδυνος απόκρυψης υπερφόρτωσης.
Ρυθμός άφιξης: ροή εφαρμογών με ένταση λ (req/s), όπως στην πραγματική ζωή. Πιο ορθή για τις δημόσιες API.

Νόμος του Little 's: 'L = λ × W'.
Για τη δεξαμενή/υπηρεσία, ελάχιστος παραλληλισμός ≈ 'λ × W' (προσθήκη 20-50% της απογραφής).
Όπου το «λ» διακινείται, το «W» είναι ο μέσος χρόνος υπηρεσίας.


4) Προφίλ φορτίου και σενάρια

Συνδυασμός ταξιδιού χρήστη: μετοχές σεναρίων (σύνδεση, περιήγηση, κατάθεση, checkout...).
Χρόνος σκέψης: παύση χρήστη (κατανομές: εκθετική/lognormal).
Προφίλ δεδομένων: μέγεθος των απαντήσεων, ωφέλιμο φορτίο, μεταβλητότητα των παραμέτρων.
Συσχέτιση: βήματα ζεύξης (cookies/mokens/ID) όπως στην πραγματική ροή.
Κρύο/ζεστό/ζεστό κρύπτη: μεμονωμένες διαδρομές.
Read vs Γράψτε: ισορροπία αναγνώσεων/εγγραφών, idempotency for retrays.
Πολυπεριφέρεια: RTT, διανομή από POP/ASN.


5) Περιβάλλον δοκιμών

Απομόνωση: το περίπτερο είναι κοντά στο προϊόν στην τοπολογία/ρυθμίσεις (αλλά δεν «χτυπά» το προϊόν).
Στοιχεία: συγκάλυψη PII, όγκοι, δείκτες όπως στις πωλήσεις.
Γεννήτριες φορτίου: να μην στηρίζονται στην ΚΜΕ/δίκτυο. κατανεμημένοι δρομείς, συγχρονισμός χρόνου.
Παρατηρησιμότητα: μετρήσεις/μονοπάτια/κούτσουρα, συνθετικά στην περίμετρο, εξαγωγή προφίλ ΚΜΕ/σωρού.


6) Μετρήσεις και SLI

Απόδοση: RPS/Συναλλαγές/sec

Καθυστέρηση: p50/p95/p99, TTFB, χρόνος εξυπηρετητή έναντι δικτύου.
Σφάλματα: μερίδιο των σφαλμάτων 5xx/4xx/τομέα.
Κορεσμός: CPU, φορτίο avg, GC, δίσκος IOps/καθυστέρηση, δίκτυο, πισίνα αναμονής.
Business SLI: ≤ 5s επιτυχία κατάθεσης, ≤ 2s επιβεβαίωση παραγγελίας.

Πάρτε τα κατώτατα όρια από το SLO (π.χ. "99. 95% 300 m ), παρακολούθηση του ρυθμού καύσης κατά τη διάρκεια της διαδρομής.


7) Εύρεση σημείων συμφόρησης (τεχνική)

1. Σταθερή προθέρμανση του συστήματος κατά 60-80% του φορτίου στόχου.
2. Αύξηση των βαθμίδων (κεκλιμένο επίπεδο) → διόρθωση όπου αυξάνεται το p95/p99 και ο ρυθμός σφάλματος.

3. Ταίριασμα p99 με:
  • ουρές σε ομάδες (DB/HTTP),
  • ανάπτυξη της WAIT/κλειδαριών (DB),
  • GC-παύση/σωρός,
  • αναμεταδόσεις δικτύου/απώλεια πακέτων,
  • αστοχίες λανθάνουσας/κρύπτης δίσκου.
  • 4. Εντοπισμός: δυαδική αναζήτηση μέσω διαδρομής ερωτήματος, προφίλ (CPU/OBI/lock-profile).
  • 5. Διορθώστε τη «φιάλη» → ρυθμίζοντας → επαναλαμβάνοντας το τρέξιμο.

8) Συμπεριφορά υπό πίεση

Χαριτωμένη υποβάθμιση: όρια, διακόπτες κυκλωμάτων, ουρές αντίθλιψης, αποδεκτές για επεξεργασία.
Retrays: μέγιστο 1, idempotent μόνο. νευρικότητα· ο προϋπολογισμός επανακαταμέτρησης ≤ το 10% της RPS.
Αποτυχία-άνοιγμα/αποτυχία-κλείσιμο: για μη κρίσιμες εξαρτήσεις, επιτρέψτε την αποτυχία-άνοιγμα (cache/stubs).
Βλάβη κατακράτησης: απομόνωση των δεξαμενών/ποσοστώσεων (διαφράγματα), ταχεία χρονομέτρηση, «ομαλή» απενεργοποίηση των λειτουργιών (σημαίες χαρακτηριστικών).


9) Εργαλεία (επιλογή καθηκόντων)

k6 (JavaScript, ανοικτό/ανοικτό μοντέλο, γρήγορο, βολικό σε CI).
JMeter (πλούσιο σε οικοσύστημα, GUI/CLI, πρόσθετα, αλλά βαρύτερο).
Gatling (Scala DSL, υψηλές επιδόσεις).
Locust (Python, ευελιξία γραφής).
Vegeta/hey/wrk (μικρο-πάγκοι και γρήγορος έλεγχος).

Κανόνας: ένα «κύριο» εργαλείο + ελαφρύ CLI για στυλό καπνού σε PR.


10) Παραδείγματα (snippets)

10. 1 k6 (ανοικτό μοντέλο με τιμή άφιξης)

js import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' },  // до 500 rps
{ target: 800, duration: '5m' },  // стресс
{ target: 0,  duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0.005'],
},
};

export default function () {
const res = http.get(`${__ENV.BASE_URL}/api/catalog?limit=20`);
sleep(Math.random() 2); // think-time
}

10. 2 JMeter (ιδέα προφίλ)

Thread Group + Stepping Thread или Concurrency Thread (open-like).
Προκαθορισμένες αιτήσεις HTTP, διαχειριστής Cookie, σύνολο δεδομένων CSV.
Backend ακροατής → InfluxDB/Grafana; Ισχυρισμοί ανά χρόνο/κωδικό.

10. Ακρίδες (Python)

python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0.2, 2.0)
@task(5)
def browse(self): self.client.get("/api/catalog?limit=20")
@task(1)
def buy(self): self.client.post("/api/checkout", json={"sku":"A1","qty":1})

11) Στοιχεία, συσχέτιση, προετοιμασία

Δεδομένα σπόρων: κατάλογοι, χρήστες, ισοζύγια, μάρκες - όπως στις πωλήσεις.
Μάσκα PII/ανωνυμοποίηση; δημιουργία συνθετικών πάνω από πραγματικές διανομές.
Συσχέτιση: Εξαγωγή ταυτοτήτων/σημάτων από απαντήσεις (RegExp/JSONPath) και χρήση σε μεταγενέστερα στάδια.


12) Παρατηρησιμότητα κατά τις διαδρομές

Ταμπλό RED (τιμή, σφάλματα, διάρκεια) κατά μήκος των διαδρομών.
Υποδείγματα - μετάβαση από τις μετρήσεις στα ίχνη (trace_id).
Αρχεία καταγραφής σφαλμάτων: δειγματοληψία + συσσώρευση, αντίγραφα/ταυτότητα.
Σύστημα: CPU/GC/σωρός, δίσκοι/δίκτυο, αναμονή πισίνας.
DB: top queries, locks, index scans, bloat.


13) Πύλες αυτοματισμού και επιδόσεων

CI: σύντομες διαδρομές συγχώνευσης (π.χ. k6 2-3 λεπτά) με κατώφλια.
Νυχτερινή/εβδομαδιαία: μακρύς εμποτισμός/πίεση σε ξεχωριστό μέσο. εκθέσεις και τάσεις.
Canary κυκλοφορίες: ανάλυση του SLO (ποσοστό σφάλματος, p95) ως «πύλη» της προώθησης.
Οπισθοδρόμηση: γραμμή βάσης έναντι τρέχουσας κατασκευής· προειδοποίηση για επιδείνωση> X%.


14) Σχεδιασμός χωρητικότητας και κόστος

Καμπύλες throughput→latency: ορίστε το σημείο γόνατος - αφού το p99 μεγαλώσει απότομα.
Κλίμακα: Μέτρηση της απόδοσης κλιμάκωσης (δέλτα RPS/κόμβος δέλτα).
Κόστος: «RPS ανά $/ώρα», αποθεματικό για εκδηλώσεις αιχμής + αποθεματικό DR.


15) Αντι-μοτίβα

Χτυπήστε το στήριγμα χωρίς έλεγχο ή δοκιμή σε «κενό» περιβάλλον, όχι όπως το prod.
Κλειστό μοντέλο με σταθερές VU που κρύβουν υπερφόρτωση.
Έλλειψη χρόνου σκέψης/δεδομένων - μη ρεαλιστικές κρύπτες ή αντίστροφα - θύελλα στην πηγή.
Ένα σενάριο «/ping «αντί της προσαρμοσμένης ροής.
Έλλειψη παρατηρησιμότητας: «βλέπουμε μόνο RPS και μέση καθυστέρηση».
Μη ελεγχόμενες επαναλήψεις → αυτο-DDoS.
Ανάμειξη της δοκιμής και βελτιστοποιήσεις χωρίς καθορισμό υποθέσεων/αλλαγών.


16) Κατάλογος σημείων ελέγχου (0-30 ημέρες)

0- 7 ηµέρες

Καθορισμός προφίλ κυκλοφορίας SLI/SLO και στόχων (μίξη, χρόνος σκέψης, δεδομένα).
Επιλέξτε το εργαλείο (k6/JMeter/Locust), ανεβάστε τα ταμπλό RED.
Προετοιμασία των δεδομένων για το περίπτερο και τους σπόρους, απενεργοποίηση των ορίων/captchas τρίτων.

8-20 ημέρες

Σενάρια κατασκευής: ανοικτό μοντέλο (ποσοστό άφιξης), κρύο/ζεστό/ζεστό κρύπτη.
Τρέξιμο φορτίου → ακραίες τάσεις → ακίδα· να καθορίζουν το σημείο του γόνατος και τα σημεία συμφόρησης.
Εφαρμογή πυλών επιδόσεων σε ΚΚΠ (μικρο-run).

21- 30 ηµέρες

Δοκιμή εμποτισμού 4-24 ώρες: διαρροές GC/μετατόπιση, σταθεροποίηση.
Όρια εγγράφων, σχέδιο χωρητικότητας, εικονογραφήσεις «RPS→p95/oshibki».
Προετοιμασία του runbook «πώς να αυξήσει τα όρια/κλίμακα» και «πώς να υποβαθμιστεί».


17) Μετρήσεις διάρκειας

Υπάρχουν ρεαλιστικά προφίλ (μείγμα, χρόνος σκέψης, δεδομένα) που καλύπτουν ≥ το 80% της κίνησης.
Τα RED ταμπλό + ιχνηλάτηση συνδέονται για όλες τις δοκιμές.
Οι πύλες επιδόσεων μπλοκάρουν τις εκλύσεις κατά την οπισθοδρόμηση p95/σφάλματα.
Η χωρητικότητα και το σημείο γόνατος τεκμηριώνονται από βασικές υπηρεσίες.
Το μηνιαίο εμποτισμό/άγχος τρέχει και εκθέσεις προόδου.
Η αντοχή στην «ακίδα» επιβεβαιώνεται από την αυτόματη κλίμακα και την απουσία βλάβης του καταρράκτη.


18) Συμπέρασμα

Η δοκιμή φορτίου είναι μια τακτική τεχνική πρακτική, όχι μια εφάπαξ "μέτρηση. "Μοντέλο πραγματικών χρηστών (ανοικτό μοντέλο), μέτρηση τι αντανακλά την εμπειρία του πελάτη (SLI/SLO), διατήρηση της παρατηρησιμότητας και των πυλών σε CI/CD, διεξαγωγή τρεξίματος στρες/ακίδα/μούσκεμα και διόρθωση του σημείου γόνατος. Στη συνέχεια, τα γεγονότα αιχμής και οι μαύροι κύκνοι μετατρέπονται σε διαχειρίσιμα σενάρια, και η απόδοση μετατρέπεται σε μια προβλέψιμη και μετρήσιμη παράμετρο της πλατφόρμας σας.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.