Độ trễ và Thông lượng trong Hệ thống Phân tán

Tổng quan về hai đại lượng cốt lõi trong thiết kế hệ thống phân tán: Độ trễ (Latency) và Thông lượng (Throughput), mối quan hệ ràng buộc giữa chúng qua lý thuyết hàng đợi và giới hạn đồng thời.

latencythroughputperformancedistributed-systems
Cập nhật: 23 tháng 10, 2026

Tổng quan

Trong thiết kế hệ thống phân tán, Latency và Throughput là hai đại lượng cốt lõi phản ánh hiệu năng của hệ thống. Chúng mô tả hai góc nhìn khác nhau nhưng không độc lập — chúng được ràng buộc chặt chẽ qua lý thuyết hàng đợi (Little's Law).

📌 Các khái niệm cơ bản

  • Latency (Độ trễ) — Thời gian từ lúc gửi request đến khi nhận được response. Công thức tại mỗi node: R = Wq + S, trong đó Wq là thời gian chờ trong hàng đợi và S là thời gian xử lý (Service Time). Đây là đại lượng micro-level — đo trên từng request.
  • Throughput (Thông lượng) — Số lượng request hệ thống xử lý thành công trong một đơn vị thời gian (ví dụ: requests/second). Đây là đại lượng macro-level — phản ánh khả năng tổng thể của hệ thống.
  • Bandwidth (Băng thông) — Throughput lý thuyết tối đa mà hệ thống có thể đạt được trong điều kiện lý tưởng. Bandwidth là giới hạn trên của Throughput.
  • Goodput — Throughput thực tế hữu ích, sau khi loại bỏ overhead (retransmissions, protocol headers, retries). Goodput ≤ Throughput ≤ Bandwidth.

Latency và Throughput không phải nghịch đảo đơn giản của nhau. Khi hệ thống tiến gần tới bão hòa, mối quan hệ này trở nên phi tuyến — Latency tăng theo đường hyperbol trong khi Throughput bị giới hạn bởi tài nguyên vật lý.

Để hiểu sâu hơn, hãy tham khảo Hardware Latency Hierarchy và Tail Latency at Scale.

Kiến trúc phân tầng của Latency

Latency end-to-end không phải một con số đơn lẻ — nó là tổng hợp của nhiều tầng xử lý. Tại mỗi tầng, request phải chịu cả thời gian chờ đợi (Queuing) lẫn thời gian xử lý thực tế (Service Time). Sơ đồ dưới đây mô tả hành trình của một request qua các tầng:

Đang tải sơ đồ...

🔍 Phân tích từng thành phần

  • Propagation Delay — Phụ thuộc vào khoảng cách vật lý và tốc độ ánh sáng. Ví dụ: US → EU ≈ 70-80ms RTT.
  • Transmission Delay — Phụ thuộc vào kích thước payload và bandwidth của đường truyền.
  • Queuing Delay — Biến thiên mạnh nhất, phụ thuộc vào mức tải hiện tại. Đây là nguyên nhân chính gây ra tail latency.
  • Processing (R = Wq + S) — Tại mỗi server, request chờ trong hàng đợi (Wq) rồi mới được xử lý (S). Nhiều node xếp nối tiếp sẽ nhân lên tổng latency.

Tham khảo chi tiết về thời gian truy cập phần cứng tại Hardware Latency Hierarchy.

Mối quan hệ Latency – Throughput

Mối quan hệ giữa Latency và Throughput tuân theo đường cong hyperbol từ lý thuyết hàng đợi M/M/1. Khi hệ thống tiến gần tới bão hòa (utilization ρ → 1), latency tăng phi tuyến tính:

text
R = S / (1 - ρ)

Trong đó:
  R  = Response Time (Latency trung bình)
  S  = Service Time (thời gian xử lý khi không có hàng đợi)
  ρ  = Utilization (tỷ lệ sử dụng tài nguyên, 0 ≤ ρ < 1)

Bảng dưới đây minh họa với Service Time S = 10ms. Khi utilization tăng từ 50% lên 99%, Latency tăng từ 2× lên 100× so với service time gốc:

⚠️ Quy tắc thực hành: Hầu hết các hệ thống production nên duy trì utilization dưới 70-80% để tránh vùng latency tăng vọt. Vượt qua 90%, hệ thống trở nên cực kỳ nhạy cảm — chỉ cần thêm một lượng nhỏ traffic cũng có thể gây ra cascading latency spikes.

Tìm hiểu thêm về mô hình toán học tại Little's Law và Queueing Theory.

Đo lường đúng cách

Average (trung bình) là chỉ số gây hiểu lầm. Trong hệ thống phân tán, phân bố latency thường lệch phải (right-skewed) — đa số request nhanh, nhưng một số ít request chậm bất thường. Average che giấu những request chậm này.

📊 Ví dụ thực tế

So sánh hai service với ~1000 requests:

text
                Service A       Service B
  Average:      51ms            50ms          ← Gần như giống nhau!
  P50:          48ms            45ms
  P95:          63ms            450ms         ← Chênh lệch 7× !
  P99:          78ms            2,300ms       ← Chênh lệch 29× !

Nếu chỉ nhìn average, ta kết luận hai service tương đương. Nhưng P95 và P99 cho thấy Service B có vấn đề nghiêm trọng với tail latency — cứ 20 request lại có 1 request chậm gấp 9× trung bình.

✅ Nguyên tắc đo lường

  • Luôn sử dụng Percentiles (P50, P95, P99, P99.9) thay vì average.
  • P50 cho biết trải nghiệm "điển hình" của user.
  • P99 cho biết trải nghiệm tệ nhất mà 1% user phải chịu — quan trọng hơn nhiều trong hệ thống phân tán vì fan-out effect.
  • Cẩn thận với Coordinated Omission — lỗi đo lường phổ biến khiến kết quả benchmark sai lệch nghiêm trọng.

Xem chi tiết tại Latency Percentile Metrics.

Các yếu tố ảnh hưởng đến Latency và Throughput

Hiệu năng hệ thống bị chi phối bởi nhiều yếu tố, từ phần cứng đến kiến trúc phần mềm:

  • Hardware Latency Hierarchy — Thời gian truy cập khác nhau hàng triệu lần giữa L1 cache (~1ns) và disk I/O (~10ms). Lựa chọn storage layer ảnh hưởng trực tiếp đến service time. → Chi tiết
  • Thread Contention & Context Switching — Khi nhiều thread tranh chấp cùng một lock hoặc tài nguyên, overhead từ context switching và wait time tăng đáng kể, đặc biệt trên hệ thống high-concurrency.
  • Garbage Collection (GC) Pauses — Trong JVM, Go, .NET: GC pause có thể gây ra latency spike hàng chục đến hàng trăm ms, tạo ra tail latency không dự đoán được.
  • Network Latency & Topology — Khoảng cách vật lý, số hop, congestion trên đường truyền. Cross-region calls có thể thêm 50-200ms RTT.
  • Queueing Delays — Tại mỗi điểm xử lý (load balancer, thread pool, database connection pool), request phải chờ. Nhiều hàng đợi xếp chồng tạo hiệu ứng cộng dồn. → Adaptive Concurrency Control
  • Fan-out Effect — Trong kiến trúc microservices, một request gốc có thể fan-out thành hàng chục sub-requests. Latency tổng bị chi phối bởi request chậm nhất (slowest-of-N). → Tail Latency at Scale

Tài liệu liên quan

🔗 Chủ đề cốt lõi

📚 Chủ đề mở rộng