Bộ tài liệu chuyên sâu về Hệ thống Phân tán, viết cho Backend Engineer, Senior Engineer, Tech Lead và Architect. Triết lý xuyên suốt: Business Growth → Single Machine → Single Point of Failure → Scalability Problem → Distributed Systems → New Problems → Trade-off → Solutions → Production.


Cách đọc bộ tài liệu này

Distributed Systems không phải là tập hợp các công nghệ như Kafka, Redis hay Kubernetes. Đó là một lĩnh vực nghiên cứu về cách nhiều máy tính phối hợp giải quyết một bài toán chung, trong khi luôn phải đối mặt với: độ trễ mạng không xác định, phần cứng hỏng bất kỳ lúc nào, phần mềm có bug, và sự thật khó chịu nhất — không node nào biết chắc trạng thái thật của node khác.

Mọi cơ chế trong tài liệu này (Replication, Consensus, Sharding, Distributed Lock…) đều được giải thích từ góc nhìn người thiết kế hệ thống, không phải người dùng thư viện. Trước mỗi giải pháp, hãy tự hỏi 4 câu:

  1. Tại sao giải pháp này tồn tại?
  2. Nếu không giải quyết thì điều gì xảy ra?
  3. Chúng ta đánh đổi điều gì?
  4. Tại sao không có giải pháp hoàn hảo?

Mục lục

Level 1 – Foundation

ChươngNội dung
01 – FoundationsVì sao Distributed Systems tồn tại. Scalability, Availability, Reliability, Fault Tolerance. Scale Up vs Scale Out. Các vấn đề chỉ xuất hiện khi có nhiều node.

Level 2 – Engineering

ChươngNội dung
02 – CommunicationRPC, REST, gRPC, Message Queue, Event Streaming, Service Discovery, API Gateway.
03 – Consistency ModelsStrong / Eventual / Causal Consistency, Read Your Writes, Monotonic Reads, Quorum.
04 – CAP & PACELCCAP Theorem, PACELC, những hiểu lầm phổ biến, cách Spanner/DynamoDB “lách” CAP.
05 – ReplicationLeader-Follower, Multi-Leader, Leaderless, Sync vs Async Replication.
06 – PartitioningSharding, Consistent Hashing, Range vs Hash Partition, Hot Partition, Rebalancing.
07 – ConsensusConsensus Problem, Raft, Paxos, Leader Election, Split Brain, Quorum, Failure Detection.

Level 3 – Senior Level

ChươngNội dung
08 – Distributed Transactions2PC, Saga, Outbox/Inbox Pattern, Idempotency, Compensation.
09 – Event-driven ArchitectureEvent Bus, Event Streaming, CQRS, Event Sourcing, Domain/Integration Event.
10 – Distributed CacheCache Aside, Read/Write Through, Write Behind, Stampede, Penetration, Avalanche, Breakdown.
11 – Reliability PatternsRetry, Timeout, Circuit Breaker, Bulkhead, Backpressure, Rate Limiting, DLQ, Graceful Degradation.
12 – Time trong hệ phân tánClock Drift, NTP, Lamport Clock, Vector Clock, TrueTime.

Level 4 – Principal Level

ChươngNội dung
13 – Multi-region & Disaster RecoveryGeo Replication, Active-Active vs Active-Passive, Data Locality, DR, Cost Optimization, Evolutionary Architecture.
14 – Case StudiesURL Shortener, E-commerce, Banking/Payment, Chat, Notification, Ride Hailing, Social Feed, Search, Video Streaming, AI Platform.

Quy ước

  • Thuật ngữ chuyên ngành (Consensus, Quorum, Leader Election, Replication…) giữ nguyên tiếng Anh.
  • Diagram dùng ASCII và Mermaid (render tốt trên GitHub/GitLab/VS Code).
  • Mỗi chương kết thúc bằng: Những điều bắt buộc phải nhớ, Hiểu lầm phổ biến, Câu hỏi tự kiểm tra, Paper kinh điển nên đọc.

Bản đồ tư duy tổng thể

Business Growth (users tăng 10x)
        │
        ▼
Single Machine ──── giới hạn vật lý: CPU, RAM, Disk IO, Network
        │
        ▼
Single Point of Failure ──── 1 máy chết = toàn bộ hệ thống chết
        │
        ▼
Scalability Problem ──── Scale Up chạm trần → buộc phải Scale Out
        │
        ▼
Distributed Systems ──── nhiều node phối hợp
        │
        ▼
New Problems ──── network partition, partial failure, clock drift,
        │          không có shared memory, không có global "now"
        ▼
Trade-off ──── CAP/PACELC, latency vs consistency, cost vs reliability
        │
        ▼
Solutions ──── Replication, Partitioning, Consensus, Event-driven, Cache...
        │
        ▼
Production ──── monitoring, capacity planning, DR, cost, con người vận hành

Không có bước nào trong chuỗi trên là “miễn phí”. Mỗi mũi tên đi xuống là một lần bạn đổi một vấn đề đã hiểu rõ lấy một tập vấn đề mới phức tạp hơn — với hy vọng rằng tập vấn đề mới, dù khó, là giải được, còn vấn đề cũ (giới hạn vật lý của một máy) là không giải được.