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)

Bấm "Chạy Client-side"…

Server-side (K8s Service, AWS ELB)

Bấm "Chạy Server-side"…

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

Lần lượt A→B→C, chia đều theo số request

Least-connections

Gửi tới instance có ít connection mở nhất

Random

Chọn ngẫu nhiên 1 instance

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