Module 1 — Tổng kết & cheat sheet
Recap bốn thước đo hệ dữ liệu: reliability, scalability, tail latency, maintainability. Cheat sheet một trang, glossary, pitfall tổng hợp và self-assessment.
TL;DR: Module 1 dựng ngôn ngữ đo cho cả track: reliability (chặn fault thành failure), scalability (mô tả tải bằng tham số), tail latency (đo bằng p99, không trung bình), maintainability (operability/simplicity/evolvability). Đây là trang để bookmark trước khi vào replication.
Đã đi qua những gì
Bốn bài đi từ "hệ có sai không" tới "sống với hệ dễ không". Reliability dạy phân biệt fault (bộ phận) vs failure (toàn cục) và vì sao redundancy độc lập là đòn chính. Scalability đổi câu hỏi mơ hồ "scale được không" thành định lượng theo load parameter, và so scale-up vs scale-out. Tail latency chỉ ra trung bình nói dối — phải đo bằng percentile, và tail bị khuếch đại khi fan-out. Maintainability khép lại bằng ba mặt mềm nhưng quyết định hệ sống bao lâu. Bốn thước đo này là bộ lọc để đánh giá mọi quyết định phân tán ở các module sau.
flowchart LR R["Reliability<br/>chan fault -> failure"] --> S["Scalability<br/>mo ta tai bang tham so"] S --> T["Tail latency<br/>do bang p99"] T --> M["Maintainability<br/>operability/simplicity/evolvability"]
🗺️ Cheat sheet
| Khái niệm | Cốt lõi | Pitfall |
|---|---|---|
| Fault vs failure | Fault = bộ phận lệch spec; failure = cả hệ ngừng phục vụ | Cố diệt mọi fault thay vì chặn leo thang |
| Redundancy | Nhân xác suất hỏng nhỏ — chỉ khi độc lập | Bản dư dùng chung điểm chết (SPOF) |
| Ba loại fault | Phần cứng (độc lập), phần mềm (tương quan), con người (lớn nhất) | Tưởng phần cứng đáng lo nhất |
| Load parameter | Con số mô tả tải: throughput, đọc/ghi, fan-out | Quên fan-out → đánh giá sai tải |
| Scale-up vs out | Máy mạnh hơn (trần) vs nhiều máy (phân tán) | Scale-up như phản xạ, tích nợ |
| Percentile | pN = N% request nhanh hơn ngưỡng | Đo bằng trung bình → giấu tail |
| Tail amplification | Fan-out N → độ trễ = chậm nhất → p99 đầu-cuối tệ hơn | Đo p99 từng service, quên end-to-end |
| SLO/SLA | Cam kết theo percentile | Cam kết "trung bình dưới X" (rỗng) |
| Maintainability | Operability + simplicity + evolvability | Bỏ vì không đo được → nợ ẩn |
📖 Glossary module
| Thuật ngữ | Định nghĩa 1 câu |
|---|---|
| Fault | Một bộ phận lệch khỏi spec (đĩa hỏng, node treo). |
| Failure | Cả hệ ngừng cung cấp dịch vụ người dùng cần. |
| Redundancy | Có sẵn bản dự phòng độc lập để một bản hỏng thì bản khác gánh. |
| Single point of failure | Điểm chết chung mà nó hỏng là mọi bản phụ thuộc cùng chết. |
| Load parameter | Đại lượng số mô tả tải (request/s, tỉ lệ đọc/ghi, fan-out...). |
| Fan-out | Một thao tác logic kéo theo nhiều thao tác thật. |
| Scale-up / scale-out | Máy mạnh hơn / nhiều máy hơn. |
| Percentile (pN) | Ngưỡng mà N% request nhanh hơn nó. |
| Tail latency | Độ trễ ở đuôi phân phối (p99+) — nhóm người dùng tệ nhất. |
| Tail amplification | Fan-out làm p99 đầu-cuối tệ hơn p99 từng thành phần. |
| SLO / SLA | Mục tiêu / cam kết mức dịch vụ, viết theo percentile. |
| Operability / Simplicity / Evolvability | Dễ vận hành / dễ hiểu (cắt phức tạp thừa) / dễ thay đổi. |
⚠️ Pitfall tổng hợp
- Diệt fault thay vì chịu fault: làm một thành phần "không bao giờ hỏng" → vẫn là SPOF. Đúng: giả định nó sẽ hỏng, đặt redundancy độc lập + failover.
- Redundancy tương quan: chạy nhiều bản giống hệt để chống bug phần mềm (cùng bug → cùng chết). Đúng: săn và loại điểm chết chung.
- Quên fan-out: mô tả tải chỉ bằng ghi logic. Đúng: đếm ghi thật (logic × fan-out).
- Đo bằng trung bình: dashboard đẹp, tail hỏng. Đúng: p50/p95/p99(.9) end-to-end.
- Bỏ maintainability vì không đo được: nợ ẩn lộ ra ở đội chậm dần. Đúng: coi nó là mục tiêu hạng nhất từ đầu.
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Phân biệt được fault vs failure và giải thích redundancy tăng reliability thế nào (và khi nào nó vô dụng)
- Nếu chưa: đọc lại bài 01 mục 2-4.
- Đo được độ trễ (response time) bằng percentile p50/p95/p99 và giải thích vì sao trung bình che tail latency
- Nếu chưa: đọc lại bài 03 mục 2-4 (gồm tail amplification).
- Chọn được chiến lược scaling (scale-up vs scale-out) theo tham số tải
- Nếu chưa: đọc lại bài 02 mục 2, 4.
- Đánh giá được maintainability của một hệ qua operability, simplicity, evolvability
- Nếu chưa: đọc lại bài 04 mục 2-4.
🚀 What's next
Với bốn thước đo trong tay, Module 2 — Nhân bản bắt đầu phân tán thật: giữ cùng dữ liệu trên nhiều node. Bạn sẽ thấy replication cải thiện reliability (redundancy) và scalability (đọc từ nhiều bản), nhưng trả giá bằng độ phức tạp và độ trễ đồng bộ — đúng kiểu đánh đổi bốn thước đo module này dạy bạn nhìn ra.
📚 Tài liệu mở rộng
- Sách: Designing Data-Intensive Applications (Martin Kleppmann) — Chương 1 là nguồn agnostic chuẩn cho cả bốn thước đo.
- Paper: Jeffrey Dean & Luiz Barroso, "The Tail at Scale" (CACM 2013) — nền tảng về tail latency ở quy mô lớn.
- Paper: Fred Brooks, "No Silver Bullet" (1986) — essential vs accidental complexity, gốc của simplicity.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên