Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Các kỹ thuật xử lý

Các kỹ thuật và patterns phổ biến để giải quyết vấn đề trong system design.


1. Sharding (Partitioning)

Chia database thành các shard nhỏ hơn dựa trên shard key.

Sharding strategies

  • Range‑based: Chia theo khoảng giá trị (A-M, N-Z).
  • Hash‑based: Dùng hash function để map vào shard.
  • Directory‑based: Lookup table để map key → shard.

Challenges

  • Hotspots: Một shard nhận nhiều traffic hơn.
  • Cross‑shard queries: Query dữ liệu từ nhiều shard phức tạp.
  • Re‑sharding: Khó khăn khi cần thay đổi shard strategy.

2. Replication

Sao chép dữ liệu sang nhiều nodes để tăng availability và reliability.

Replication patterns

  • Master‑Slave: Chỉ master nhận writes, slaves phục vụ reads.
  • Multi‑Master: Nhiều node có thể write, cần conflict resolution.
  • Masterless: Mọi node đều ngang hàng (Cassandra).

Sync vs Async replication

  • Sync: Strong consistency, higher latency.
  • Async: Eventual consistency, lower latency.

3. Consistency Models

Strong consistency

Mọi read nhận được write mới nhất. Phù hợp cho financial transactions.

Eventual consistency

Sau một thời gian, tất cả replicas sẽ converge. Phù hợp cho social media, comments.

CAP theorem

Trong distributed system, chỉ có thể đảm bảo hai trong ba:

  • Consistency: Mọi node thấy cùng một data tại cùng một thời điểm.
  • Availability: Mọi request nhận được response (không guarantee là latest).
  • Partition tolerance: Hệ thống vẫn hoạt động khi có network partition.

4. Rate Limiting

Giới hạn số request từ một client để bảo vệ hệ thống.

Algorithms

  • Token bucket: Tokens được thêm vào bucket với rate cố định.
  • Leaky bucket: Requests được xử lý với rate cố định.
  • Fixed window: Giới hạn số request trong một khoảng thời gian cố định.
  • Sliding window: Giới hạn số request trong khoảng thời gian sliding.

Implementation

  • API Gateway level.
  • Middleware/Service level.
  • Distributed rate limiting với Redis.

5. Idempotency

Đảm bảo thực hiện một operation nhiều lần mà kết quả không thay đổi.

Techniques

  • Unique request ID: Client gửi ID, server check nếu đã xử lý thì return kết quả cũ.
  • Idempotent API design: PUT /users/123 luôn update cùng một trạng thái.
  • Database constraints: Unique key để tránh duplicate.

Use cases

  • Payment processing (tránh double charge).
  • Order creation.
  • Form submissions.

6. Circuit Breaker

Ngăn hệ thống gọi service đang fail liên tục.

States

  • Closed: Bình thường, calls được thực hiện.
  • Open: Service đang fail, calls bị chặn ngay lập tức.
  • Half‑Open: Thử một vài calls để check service đã recovery chưa.

Implementation

  • C#: Polly library.
  • Java: Hystrix, Resilience4j.
  • Go: gobreaker.

← Phương pháp tiếp cận thiết kế | Xem tiếp: Case Studies →