Εξισορρόπηση φορτίου και αποτυχία
Εξισορρόπηση φορτίου και αστοχία
1) Στόχοι και όροι
Η εξισορρόπηση κατανέμει την κυκλοφορία μεταξύ κρουσμάτων/ζωνών/περιοχών για επιδόσεις και ανθεκτικότητα.
Αποτυχία - ελεγχόμενη αποτυχία.
RTO/RPO - Στόχος χρόνου ανάκτησης και αποδεκτή απώλεια δεδομένων.
SLO: επίπεδο-στόχος διαθεσιμότητας/καθυστέρησης· χρησιμεύει ως «πύλη» αυτόματης ανατροπής και ανατροπής.
2) Επίπεδα εξισορρόπησης
2. 1 L4 (TCP/UDP)
Pros: απόδοση, απλότητα, TLS passthrough. Κατά: Δεν υπάρχει κατανόηση διαδρομής/cookies.
Παραδείγματα: NLB/GLB, HAProxy/Απεσταλμένος L4, IPVS.
2. 2 L7 (HTTP/gRPC)
Pros: δρομολόγηση διαδρομής/κεφαλίδες, βάρος καναρινιού, κολλώδες. Κατά: ακριβότερο σε ΚΜΕ/καθυστέρηση.
Παραδείγματα: Πύλη NGINX/HAProxy/Απεσταλμένος/Cloud ALB/API.
2. 3 Παγκόσμιο
DNS/GSLB: υγειονομικοί έλεγχοι + γεω/σταθμισμένη απάντηση.
Anycast/BGP: ένα IP παγκοσμίως, πλησιέστερο σημείο ανακοίνωσης.
CDN/Άκρη: Cache/Feilover στην περίμετρο.
3) Αλγόριθμοι κατανομής
Στρογγυλή ρομπότ/σταθμισμένη - βασική.
Ελάχιστες συνδέσεις/καθυστέρηση - για «βαριές» αιτήσεις.
Σταθερό hashing - stickiness χρήστη/ενοικιαστή χωρίς κεντρική συνεδρία.
Τοποθεσία με βάση το χασίς - για κρύπτες και κρατικές υπηρεσίες.
4) Σύνοδοι και κολλώδεις
Cookie-sticky: L7 LB ορίζει ένα cookie για να επιστρέψει στην περίπτωση.
Src-IP κολλώδες: στο L4, χειρότερο με NAT/CGNAT.
Συνεκτικό hashing: καλύτερο για οριζόντιες κρυψώνες/συνομιλίες.
Στόχος: Αν είναι δυνατόν, κάντε την υπηρεσία χωρίς απάτριδα, διαφορετικά - αφαιρέστε το κράτος (συνεδρίες σε Redis/DB) για να απλοποιήσετε την αποτυχία.
5) Αξιοπιστία: υγειονομικοί έλεγχοι και απομάκρυνση από την εναλλαγή
Ενεργοί έλεγχοι: HTTP 200/ανιχνευτές βαθιάς επιχειρηματικής πορείας (π.χ. «/healthz/αποσύρεται »με εξαρτήσεις).
Παθητική (ανίχνευση ακραίων τιμών): εκτίναξη εφεδρείας σε 5xx/timeouts.
Προθέρμανση: ομαλή συμπερίληψη νέων περιπτώσεων (αργή εκκίνηση).
Χαριτωμένη αποστράγγιση - Απομακρύνετε από τη δεξαμενή → περιμένετε την ολοκλήρωση των αιτήσεων.
nginx upstream api {
zone api 64k;
least_conn;
server app-1:8080 max_fails=2 fail_timeout=10s;
server app-2:8080 max_fails=2 fail_timeout=10s;
keepalive 512;
}
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 2;
Εξώτερη ανίχνευση του απεσταλμένου (θραύσμα):
yaml outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
6) Διαχείριση βλάβης: χρονοδιάγραμμα/επανάληψη δοκιμής/διακοπή κυκλώματος
Timeouts: μικρότερο από το timeout του πελάτη· να προσδιοριστεί ανά διαδρομή.
Επαναλήψεις: 1-2 με νευρικότητα και ιδιοτέλεια. απαγόρευση των retrays σε POST χωρίς πλήκτρα ταυτότητας.
Διακόπτης κυκλώματος: περιορισμός των ταυτόχρονων αιτήσεων/σφαλμάτων. «ημι-ανοικτή» ανάκτηση.
Προϋπολογισμοί: Περιορισμοί επαναπροσδιορισμού/συγχώνευση εκρήξεων ώστε να μην οργανωθεί αυτόνομο DDOS.
7) Μοτίβα Kubernetes
Δέσμη IP/NodePort/ Balancer/Ingress - βασικά πρωτόγονα.
Ετοιμότητα/Ζωντάνια: κυκλοφορία μόνο σε έτοιμα συμβούλια.
Ο προϋπολογισμός PodDisrationBudget δεν μπορεί να μειώσει τα αντίγραφα N ταυτόχρονα.
HPA/VPA: κλιμάκωση με μετρήσεις CPU/RED, σύνδεση με LB.
Τοπολογία/Τοπολογία Aware Hints: τοποθεσία ανά ζώνη.
Τύπος υπηρεσίας = Balancer (zonal): τουλάχιστον 2 αντίγραφα σε κάθε AZ.
yaml readinessProbe:
httpGet: { path: /healthz/dependencies, port: 8080 }
periodSeconds: 5 failureThreshold: 2
8) Διασυνοριακή και διαπεριφερειακή κυκλοφορία
Multi-AZ (εντός της περιοχής): κατανομή ομοιόμορφα (zonal LB), αποθήκευση - συγχρονισμένα αντίγραφα.
Πολυπεριφέρεια:- Ενεργός δράση: και οι δύο περιοχές εξυπηρετούν την κυκλοφορία. πιο περίπλοκη - χρειάζεστε αναπαραγωγή δεδομένων, συνέπεια και γεωγραφική δρομολόγηση.
- Ενεργός παθητική: εξυπηρετεί η κύρια περιοχή, αποθεματικό - "ζεστό/ζεστό/κρύο. "Ευκολότερη, ταχύτερη αλλαγή, αλλά υψηλότερη RPO.
- Geo-DNS (πλησιέστερη περιφέρεια).
- Σταθμισμένο DNS (καναρίνια/ανακατανομή).
- Με βάση την καθυστέρηση (μετρήσεις RTT).
- Αποτυχία = με σήματα υγείας/διαθεσιμότητας (ανιχνευτές από πολλαπλά σημεία πλεονεκτήματος).
9) Δεδομένα και αποτυχία
Cache/κατάσταση: εάν είναι δυνατόν - τοπικά· για Active-Active - CRDT/συνεπή hashes.
DB:- Συγχρονισμένη αναπαραγωγή = χαμηλή RPO, υψηλότερη καθυστέρηση.
- Ασύγχρονη = χαμηλότερη καθυστέρηση, αλλά RPO> 0.
- Ουρές αναμονής: αντανακλαστικά/πολυστρωματικά τοπικά. αφαίρεση γεγονότων.
- Σχεδιασμός της ταυτότητας των λειτουργιών και της μηχανικής αναπαραγωγής.
10) Περίμετρος: DNS/Anycast/BGP/CDN
DNS: σύντομη TTL (30-60) + υγειονομικοί έλεγχοι εκτός δικτύου σας.
Anycast: αρκετοί POP με ένα IP - ο πλησιέστερος λαμβάνει κίνηση, το feilover βρίσκεται σε επίπεδο δρομολόγησης.
CDN/Άκρη: κρύπτη και «πύλη» προστασίας, τα στατικά/μέσα εξυπηρετούνται όταν πέφτει η προέλευση· θωράκιση προέλευσης + пер -POP υγεία.
11) Σχηματισμοί δειγμάτων
HAProxy L7:haproxy defaults timeout connect 2s timeout client 15s timeout server 15s retries 2 option redispatch
backend api balance leastconn option httpchk GET /healthz/dependencies http-check expect status 200 server app1 app-1:8080 check inter 5s fall 2 rise 2 slowstart 3000 server app2 app-2:8080 check inter 5s fall 2 rise 2 slowstart 3000
NGINX κολλώδες cookie:
nginx upstream api {
hash $cookie_session_id consistent;
server app-1:8080;
server app-2:8080;
}
Απεσταλμένος επαναπροσδιορισμός/χρονοδιάγραμμα (διαδρομή):
yaml route:
timeout: 2s retry_policy:
retry_on: 5xx,connect-failure,reset num_retries: 1 per_try_timeout: 500ms
12) Αυτόματη βλάβη: σήματα και πύλες
Tech-SLI: 5xx-rate, p95/p99, κορεσμός, χειραψία TLS, επαναφορά TCP.
Business SLI: επιτυχία καταθέσεων/εκταμιεύσεων, χωρίς σφάλματα πληρωμών στον πάροχο υπηρεσιών πληρωμών.
Πύλες: σε περίπτωση υπέρβασης των κατώτατων ορίων, απενεργοποίηση της ζώνης/της περίπτωσης, αύξηση των βαρών της σταθερής δεξαμενής, αλλαγή GSLB.
Εγχειρίδιο λειτουργίας: οδηγίες ανατροπής βήμα προς βήμα.
13) Δοκιμές και επιθεωρήσεις (χάος και ημέρες παιχνιδιού)
Δοκιμές χάους: απενεργοποίηση AZ/περιοχές, υποβάθμιση DB/μνήμης, προσομοίωση απώλειας πακέτων.
Game-day: Training Faylover με ομάδες εφημερίας.
Διαγνωστικά: ιχνηλάτηση από περίμετρο σε backends, αντιστοίχιση σημειώσεων απελευθέρωσης και μετρήσεων.
14) Ασφάλεια και συμμόρφωση
mTLS μεταξύ LB↔servisy, WAF/Όρια ταχύτητας στην περίμετρο.
Ζώνες αστοχίας/κατάτμησης: απομόνωση ακτίνας έκρηξης.
Πολιτικές: απαγόρευση ενός μόνο σημείου βλάβης (SPOF), απαιτήσεις για «ελάχιστα αντίγραφα N/AZ».
15) Αντι-μοτίβα
Μία ζώνη LB/μία για όλη την κυκλοφορία (SPOF).
Δεν υπάρχει βαθύς έλεγχος «/healthz »(πράσινο - αλλά δεν υπάρχει DB/ουρά αναμονής).
Επανακαταμέτρηση χωρίς ταυτότητα → διπλές συναλλαγές/πληρωμές.
Κολλώδες ανά IP με μάζα NAT → ανισορροπία.
DNS feilover με υψηλή TTL (ώρες πριν από την αλλαγή).
Καμία χαριτωμένη αποστράγγιση όταν εξαντληθεί - διακοπή αιτήματος.
16) Κατάλογος ελέγχου εφαρμογής (0-45 ημέρες)
0- 10 ηµέρες
Post posts to the AZ ≥2, δυνατότητα ετοιμότητας/σωτηρίας, υγειονομικοί έλεγχοι.
Ρύθμιση L7-timeouts/retries (1 προσπάθεια), εξώτερη ανίχνευση.
Ενεργοποιήστε χαριτωμένη αποστράγγιση και αργή εκκίνηση.
11-25 ημέρες
Εισάγετε GSLB (γεωγραφικά/σταθμισμένα) ή Anycast για την περίμετρο.
Σταθμά καναρινιών/πολιτικές διαδρομών· κολλώδες μέσω cookie/συνεπές hash.
Πύλες SLO για αυτόματο feilover (p95/5xx + business SLI).
26-45 ημέρες
Περιφερειακή DR: Active-Active ή Active-Passive με μεταφραστικό τεστ.
Ημέρες χάους με AZ/περιφέρειες εκτός λειτουργίας, εκθέσεις RTO/RPO.
Αυτόματο runbook 'and (pause/shift/rollback scripts).
17) Μετρήσεις διάρκειας
Κάλυψη πολλαπλών AZ ≥ 99% των κρίσιμων διαδρομών.
Το DNS/GSLB/Anycast εφαρμόζεται σε δημόσια καταληκτικά σημεία.
MTTR όταν ένα AZ πέφτει <5 λεπτά (p95).
RPO για κρίσιμο στόχο ≤ δεδομένων (π.χ. ≤ 30 δευτερόλεπτα).
Τριμηνιαίες ημέρες παιχνιδιού και επιτυχής προγραμματισμένη feilover.
18) Συμπέρασμα
Αξιόπιστη εξισορρόπηση και αποτυχία είναι μια αρχιτεκτονική με στρώματα: τοπική L7-policies (χρονοδιαγράμματα/επαναλήψεις/CB, υγειονομικοί έλεγχοι), ορθή εμμονή και θραύση, σταθερότητα μεταξύ των ζωνών, και στην περίμετρο - GSLB/DNS/Anycast. Προσθήκη πυλών SLO, idempotency, χαριτωμένη αποστράγγιση και τακτικές δοκιμές χάους - και κάθε απώλεια ενός κόμβου, ζώνης ή ακόμη και περιοχής θα γίνει ένα διαχειρίσιμο γεγονός με προβλέψιμο RTO/RPO.