Lesson 63 — Service Discovery & Load Balancing
Ba module tương tác minh hoạ bài học: (1) Client-side vs server-side discovery — animate hai luồng gọi; (2) So sánh thuật toán LB — cùng một stream request chạy qua round-robin / least-connections / random, xem phân phối lệch ra sao; (3) Consistent hashing ring — thêm/bớt node, đếm số key bị remap để thấy remap tối thiểu (≈ K/N thay vì ≈ K).
1. Client-side vs Server-side discovery
Cùng một mục tiêu — order-svc gọi payment-svc
(3 instance) — nhưng hai kiến trúc khác nhau. Bấm để xem từng bước.
Client-side: client tự hỏi registry rồi gọi thẳng (1 hop ít hơn).
Server-side: client chỉ gọi LB, LB lo phần còn lại.
Client-side (Eureka, gRPC LB)
Server-side (K8s Service, AWS ELB)
2. So sánh thuật toán Load Balancing
3 instance A, B, C. Mỗi request có "chi phí" ngẫu nhiên (1–5 đơn vị thời gian) — nên có request nặng, có request nhẹ. Cùng một chuỗi request được đưa qua 3 thuật toán. Thanh đo = số connection đang mở (tải thực) của mỗi instance. Quan sát: round-robin chia đều theo số request nhưng có thể lệch tải; least-conn bám theo tải thực; random có thể lệch.
Round-robin
Least-connections
Random
Tổng request: 0
3. Consistent hashing ring
Vòng tròn [0, 360) (rút gọn cho dễ nhìn). Mỗi node đặt vài
điểm ảo (virtual node) lên ring; mỗi key thuộc node ảo đầu tiên theo chiều kim đồng hồ.
Có 200 key phân bố trên ring. Thêm/bớt node và xem bao nhiêu key bị remap —
sẽ chỉ ~K/N, không phải toàn bộ.
node ảo key