⛁Designing Data-Intensive Applications
System DesignDistributed SystemsDatabases
Designing Data-Intensive Applications
Martin Kleppmann · O'Reilly Media · 2017
Tóm tắt tiếng Việt, chi tiết từng chương của cuốn sách kinh điển về system design: storage engine, replication, partitioning, transactions, consensus, batch và stream processing.
12 chương~3.5 giờ đọc0/12 đã đọc
①
Đọc nhanh trang Tổng quan để nắm bức tranh lớn.
②
Đọc sâu từng chương: giải thích, ví dụ, bảng so sánh, cạm bẫy.
③
Tự kiểm tra với câu hỏi ôn tập cuối mỗi chương.
Phần I — Foundations of Data Systems
Dữ liệu được mô hình hoá, lưu trữ và mã hoá thế nào trên một máy.
- 01Reliable, Scalable, and Maintainable ApplicationsĐịnh nghĩa rõ ràng ba mối quan tâm cốt lõi của mọi hệ thống data-intensive — reliability, scalability, maintainability — và đưa ra cách tư duy định lượng (load parameters, percentiles) để thảo luận về chúng thay vì dùng như buzzword.
- 02Data Models and Query LanguagesSo sánh các data model đa dụng — relational, document, graph (property graph, triple-store) — cùng các query language đi kèm (SQL, MapReduce, aggregation pipeline, Cypher, SPARQL, Datalog), để biết model nào hợp với loại quan hệ dữ liệu nào và vì sao declarative query lại thắng.
- 03Storage and RetrievalHiểu database lưu và tìm lại dữ liệu bên trong như thế nào, từ góc nhìn storage engine. Nắm hai trường phái storage engine cho OLTP (log-structured/LSM-tree và page-oriented/B-tree), sự khác biệt giữa OLTP và OLAP, và vì sao column-oriented storage thống trị data warehouse. Mục đích không phải để tự viết storage engine mà để chọn đúng engine và tune được nó cho workload của mình.
- 04Encoding and EvolutionHiểu cách dữ liệu được chuyển từ cấu trúc in-memory thành chuỗi byte (encoding) và các format phổ biến (JSON/XML, Thrift, Protocol Buffers, Avro) xử lý schema evolution ra sao. Nắm khái niệm backward/forward compatibility và cách chúng áp dụng cho ba kiểu dataflow: qua database, qua service (REST/RPC), và qua message passing — nền tảng để làm rolling upgrade không downtime.
Phần II — Distributed Data
Chuyện gì xảy ra khi dữ liệu nằm trên nhiều máy.
- 05ReplicationHiểu ba mô hình replication chính (single-leader, multi-leader, leaderless), các trade-off giữa synchronous và asynchronous, những bất thường do replication lag gây ra, và cách hệ thống phát hiện/giải quyết concurrent writes.
- 06PartitioningHiểu cách chia một dataset lớn thành nhiều partition (theo key range hoặc hash), cách secondary index tương tác với partitioning, các chiến lược rebalancing khi thêm/bớt node, và cách request được route tới đúng partition.
- 07TransactionsHiểu transaction thực sự đảm bảo gì (ACID), các isolation level yếu (read committed, snapshot isolation) chặn được và KHÔNG chặn được race condition nào (dirty read/write, read skew, lost update, write skew, phantom), và ba cách hiện thực serializability (serial execution, 2PL, SSI) cùng trade-off của chúng.
- 08The Trouble with Distributed SystemsNhìn thẳng vào mọi thứ có thể hỏng trong hệ phân tán — mạng không tin cậy, đồng hồ không tin cậy, process bị pause bất kỳ lúc nào — và học cách suy luận về "sự thật" khi một node không thể biết chắc điều gì (quorum, fencing token, system model, safety vs liveness).
- 09Consistency and ConsensusTìm các abstraction có guarantee mạnh (linearizability, total order broadcast, consensus) để ứng dụng có thể "quên" bớt các lỗi của hệ phân tán (mất gói, clock lệch, node pause/crash). Hiểu giới hạn của những gì làm được và không làm được, và vì sao nhiều bài toán thực tế (leader election, unique constraint, distributed commit, lock) thực chất đều quy về consensus.
Phần III — Derived Data
Ghép nhiều hệ thống lại với nhau: batch, stream và tương lai của data systems.
- 10Batch ProcessingHiểu batch processing — xử lý một tập dữ liệu đầu vào bounded (kích thước cố định, đã biết) để sinh ra output dẫn xuất — từ Unix pipeline tới MapReduce và các dataflow engine (Spark, Flink, Tez). Nắm các thuật toán join/grouping phân tán, cách chịu lỗi, và vì sao triết lý "input immutable, output thay thế hoàn toàn" giúp hệ dễ bảo trì.
- 11Stream ProcessingHiểu cách biểu diễn, truyền tải và xử lý event stream (dữ liệu unbounded, đến dần theo thời gian) — từ message broker truyền thống đến log-based broker như Kafka; thấy được mối liên hệ sâu sắc giữa database và stream (CDC, event sourcing); và nắm các vấn đề khó khi xử lý stream: thời gian, window, join, fault tolerance / exactly-once.
- 12The Future of Data SystemsTổng hợp toàn bộ cuốn sách thành một tầm nhìn: xây ứng dụng bằng cách kết hợp nhiều hệ thống chuyên biệt qua dataflow (log, derived data, "unbundling databases"), đạt correctness mà không cần distributed transaction (end-to-end argument, idempotence, timeliness vs integrity, auditing), và nhìn lại trách nhiệm đạo đức của kỹ sư khi làm việc với dữ liệu về con người.
Nội dung là bản tóm tắt tiếng Việt, không phải bản dịch và không thay thế sách gốc. Xem sách gốc tại O'Reilly ↗