具体描述
内容简介
书中包含以下内容:
? 深入分析你已经在使用的系统,并学习如何更高效地使用和运维这些系统
? 通过识别不同工具的优缺点,作出更明智的决策
? 了解一致性、可伸缩性、容错性和复杂度之间的权衡
? 理解分布式系统研究,这些研究是现代数据库构建的基石
? 走到一些主流在线服务的幕后,学习它们的架构
作者简介
Martin Kleppmann,是英国剑桥大学的一名分布式系统研究员。在此之前他曾是软件工程师和企业家,在 Linkedin 和 Rapportive 工作过,从事大规模数据基础设施相关的工作。Martin 经常在大会做演讲,写博客,也是开源贡献者。 精彩书评
“这本书太棒了,它在分布式系统理论和实际工程之间的巨大鸿沟上架起了一座桥梁。多希望十年前就能读到这本书,那么这些年来我犯的很多错误就都能避免了。”
——Jay Kreps(Apache Kafka 创始人,Confluent CEO)
“这是一本软件工程师的必读之作。《设计数据密集型应用》是能够连接理论和实践的稀有资料,它能帮助开发者在设计和实现数据基础设施及系统的时候作出明智的决策。”
——Kevin Scoot(微软CTO)
目录
Part I. Foundations of Data Systems
1. Reliable, Scalable, and Maintainable Applications 3
Thinking About Data Systems 4
Reliability 6
Hardware Faults 7
Software Errors 8
Human Errors 9
How Important Is Reliability? 10
Scalability 10
Describing Load 11
Describing Performance 13
Approaches for Coping with Load 17
Maintainability 18
Operability: Making Life Easy for Operations 19
Simplicity: Managing Complexity 20
Evolvability: Making Change Easy 21
Summary 22
2. Data Models and Query Languages 27
Relational Model Versus Document Model 28
The Birth of NoSQL 29
The Object-Relational Mismatch 29
Many-to-One and Many-to-Many Relationships 33
Are Document Databases Repeating History? 36
Relational Versus Document Databases Today 38
Query Languages for Data 42
Declarative Queries on the Web 44
MapReduce Querying 46
Graph-Like Data Models 49
Property Graphs 50
The Cypher Query Language 52
Graph Queries in SQL 53
Triple-Stores and SPARQL 55
The Foundation: Datalog 60
Summary 63
3. Storage and Retrieval 69
Data Structures That Power Your Database 70
Hash Indexes 72
SSTables and LSM-Trees 76
B-Trees 79
Comparing B-Trees and LSM-Trees 83
Other Indexing Structures 85
Transaction Processing or Analytics? 90
Data Warehousing 91
Stars and Snowflakes: Schemas for Analytics 93
Column-Oriented Storage 95
Column Compression 97
Sort Order in Column Storage 99
Writing to Column-Oriented Storage 101
Aggregation: Data Cubes and Materialized Views 101
Summary 103
4. Encoding and Evolution 111
Formats for Encoding Data 112
Language-Specific Formats 113
JSON, XML, and Binary Variants 114
Thrift and Protocol Buffers 117
Avro 122
The Merits of Schemas 127
Modes of Dataflow 128
Dataflow Through Databases 129
Dataflow Through Services: REST and RPC 131
Message-Passing Dataflow 136
Summary 139
Part II. Distributed Data
5. Replication 151
Leaders and Followers 152
Synchronous Versus Asynchronous Replication 153
Setting Up New Followers 155
Handling Node Outages 156
Implementation of Replication Logs 158
Problems with Replication Lag 161
Reading Your Own Writes 162
Monotonic Reads 164
Consistent Prefix Reads 165
Solutions for Replication Lag 167
Multi-Leader Replication 168
Use Cases for Multi-Leader Replication 168
Handling Write Conflicts 171
Multi-Leader Replication Topologies 175
Leaderless Replication 177
Writing to the Database When a Node Is Down 177
Limitations of Quorum Consistency 181
Sloppy Quorums and Hinted Handoff 183
Detecting Concurrent Writes 184
Summary 192
6. Partitioning 199
Partitioning and Replication 200
Partitioning of Key-Value Data 201
Partitioning by Key Range 202
Partitioning by Hash of Key 203
Skewed Workloads and Relieving Hot Spots 205
Partitioning and Secondary Indexes 206
Partitioning Secondary Indexes by Document 206
Partitioning Secondary Indexes by Term 208
Rebalancing Partitions 209
Strategies for Rebalancing 210
Operations: Automatic or Manual Rebalancing 213
Request Routing 214
Parallel Query Execution 216
Summary 216
7. Transactions 221
The Slippery Concept of a Transaction 222
The Meaning of ACID 223
Single-Object and Multi-Object Operations 228
Weak Isolation Levels 233
Read Committed 234
Snapshot Isolation and Repeatable Read 237
Preventing Lost Updates 242
Write Skew and Phantoms 246
Serializability 251
Actual Serial Execution 252
Two-Phase Locking (2PL) 257
Serializable Snapshot Isolation (SSI) 261
Summary 266
8. The Trouble with Distributed Systems 273
Faults and Partial Failures 274
Cloud Computing and Supercomputing 275
Unreliable Networks 277
Network Faults in Practice 279
Detecting Faults 280
Timeouts and Unbounded Delays 281
Synchronous Versus Asynchronous Networks 284
Unreliable Clocks 287
Monotonic Versus Time-of-Day Clocks 288
Clock Synchronization and Accuracy 289
Relying on Synchronized Clocks 291
Process Pauses 295
Knowledge, Truth, and Lies 300
The Truth Is Defined by the Majority 300
Byzantine Faults 304
System Model and Reality 306
Summary 310
9. Consistency and Consensus 321
Consistency Guarantees 322
Linearizability 324
What Makes a System Linearizable? 325
Relying on Linearizability 330
Implementing Linearizable Systems 332
The Cost of Linearizability 335
Ordering Guarantees 339
Ordering and Causality 339
Sequence Number Ordering 343
Total Order Broadcast 348
Distributed Transactions and Consensus 352
Atomic Commit and Two-Phase Commit (2PC) 354
Distributed Transactions in Practice 360
Fault-Tolerant Consensus 364
Membership and Coordination Services 370
Summary 373
Part III. Derived Data
10. Batch Processing 389
Batch Processing with Unix Tools 391
Simple Log Analysis 391
The Unix Philosophy 394
MapReduce and Distributed Filesystems 397
MapReduce Job Execution 399
Reduce-Side Joins and Grouping 403
Map-Side Joins 408
The Output of Batch Workflows 411
Comparing Hadoop to Distributed Databases 414
Beyond MapReduce 419
Materialization of Intermediate State 419
Graphs and Iterative Processing 424
High-Level APIs and Languages 426
Summary 429
11. Stream Processing 439
Transmitting Event Streams 440
Messaging Systems 441
Partitioned Logs 446
Databases and Streams 451
Keeping Systems in Sync 452
Change Data Capture 454
Event Sourcing 457
State, Streams, and Immutability 459
Processing Streams 464
Uses of Stream Processing 465
Reasoning About Time 468
Stream Joins 472
Fault Tolerance 476
Summary 479
12. The Future of Data Systems 489
Data Integration 490
Combining Specialized Tools by Deriving Data 490
Batch and Stream Processing 494
Unbundling Databases 499
Composing Data Storage Technologies 499
Designing Applications Around Dataflow 504
Observing Derived State 509
Aiming for Correctness 515
The End-to-End Argument for Databases 516
Enforcing Constraints 521
Timeliness and Integrity 524
Trust, but Verify 528
Doing the Right Thing 533
Predictive Analytics 533
Privacy and Tracking 536
Summary 543
Glossary 553
Index 559
《智能系统中的数据洞察与架构之道》 在这日新月异的科技浪潮中,数据已然成为驱动社会进步的核心引擎。从海量传感器收集的实时流,到支撑庞大电商平台的海量交易记录,再到人工智能模型训练所需的丰富数据集,数据以各种形态渗透进我们生活的方方面面,并深刻地影响着商业决策、科学研究乃至社会治理。然而,如何有效地存储、处理、分析和利用这些规模空前、类型多样、速度飞快的数据,已成为摆在技术从业者和决策者面前的一大挑战。 《智能系统中的数据洞察与架构之道》正是为了应对这一时代课题而诞生的。本书并非仅仅罗列技术名词或操作手册,而是致力于深入剖析支撑现代智能系统的核心数据原理,探讨如何构建能够应对复杂数据挑战的 robust(健壮)且 scalable(可扩展)的架构。我们希望带领读者超越表面的技术实现,去理解数据在系统中的生命周期,掌握驱动系统性能和可靠性的底层逻辑。 一、 理解数据的本质:从比特到价值 在着手构建数据系统之前,首要的是对数据本身有深刻的理解。本书将首先深入探讨数据的不同形态和特性。我们会从最基础的离散数据、连续数据讲起,进而讨论结构化数据、半结构化数据和非结构化数据之间的差异及其对存储和处理方式的影响。例如,关系型数据库中的表格数据、JSON/XML等格式的半结构化数据、以及图像、文本、音频等非结构化数据,它们在数据模型、查询语言和索引策略上都有着显著的区别。 更进一步,我们将解析数据的“量”(Volume)、“速”(Velocity)、“多样性”(Variety)以及“真实性”(Veracity)这些大数据时代的核心特征。这四“V”并非孤立存在,而是相互交织,共同塑造了数据系统的设计复杂度。理解这些特征,才能为后续的架构设计打下坚实的基础,避免盲目选择不适用的技术方案。 二、 数据存储的艺术:权衡与选择 数据存储是整个数据系统的基石。本书将带领读者全面审视各种主流的数据存储范式,并深入分析它们的设计哲学、适用场景以及各自的优缺点。 关系型数据库(Relational Databases):我们不会止步于SQL语法,而是探讨其背后ACID(Atomicity, Consistency, Isolation, Durability)事务模型的重要性,理解索引如何提升查询效率,以及表连接、数据规范化等概念如何影响数据的一致性和冗余。我们将讨论垂直扩展和水平扩展的策略,以及在面对超大规模数据时,传统关系型数据库可能面临的挑战。 NoSQL数据库:本书将对NoSQL家族进行细致的梳理,不仅仅是列举,而是深入理解其核心思想。 键值存储(Key-Value Stores):如Redis, Memcached,分析其极致的简单性和高吞吐量的秘密,以及在缓存、会话管理等场景的应用。 文档数据库(Document Databases):如MongoDB, Couchbase,探讨其灵活的模式,适合存储半结构化数据,以及在内容管理、用户配置等场景的优势。 列族数据库(Column-Family Stores):如Cassandra, HBase,理解其大规模并行处理能力,适合时间序列数据、日志存储等场景,以及其CAP(Consistency, Availability, Partition Tolerance)理论下的权衡。 图数据库(Graph Databases):如Neo4j, ArangoDB,深入理解其用于表示和查询复杂关系网络的强大能力,在社交网络、推荐系统、知识图谱等领域的应用。 数据仓库与数据湖(Data Warehouses and Data Lakes):我们会区分两者的概念,探讨数据仓库的结构化、面向主题的特点,以及其在商业智能(BI)和报告分析中的作用。同时,深入理解数据湖的灵活性,允许存储原始数据,并支持后续的多种分析处理,为高级分析和机器学习提供源头活水。 三、 数据处理的挑战:效率与实时性 海量数据的存储仅仅是第一步,如何高效地处理这些数据,提取有价值的信息,才是系统的核心价值所在。 批处理(Batch Processing):深入解析Hadoop MapReduce等经典批处理框架的设计理念,理解其分布式计算模型,以及在ETL(Extract, Transform, Load)和离线分析中的应用。我们还会探讨Spark等新一代批处理引擎,理解其内存计算的优势,以及在数据清洗、特征工程等场景的强大表现。 流处理(Stream Processing):在实时化趋势日益明显的今天,流处理技术变得至关重要。本书将详细介绍Apache Kafka, Flink, Storm等流处理平台。我们将探讨消息队列在解耦和缓冲中的作用,理解流处理的窗口机制、状态管理以及事件时间(Event Time)与处理时间(Processing Time)的区别。从实时推荐、欺骗检测到物联网数据监控,流处理正在重塑我们对实时信息的需求。 混合处理(Hybrid Processing):在实际应用中,批处理和流处理往往需要协同工作。我们将探讨如何构建能够同时满足离线分析和实时响应需求的混合架构,例如 Lambda 架构和 Kappa 架构的演进与对比。 四、 系统设计原则:可靠性、可扩展性与一致性 任何优秀的数据系统,都离不开对可靠性、可扩展性和一致性这三大核心原则的深刻把握。 可靠性(Reliability):故障是分布式系统不可避免的一部分。本书将探讨多种确保系统可靠性的机制,包括数据冗余、副本同步、故障检测与恢复、容错设计等。我们会分析单点故障(Single Point of Failure, SPOF)的风险,以及如何通过分布式共识算法(如Raft, Paxos)来保证数据的一致性。 可扩展性(Scalability):随着数据量的增长和用户请求的增加,系统必须能够平滑地扩展。我们将深入讨论垂直扩展(Scale Up)和水平扩展(Scale Out)的优劣,以及分片(Sharding)、分区(Partitioning)、负载均衡(Load Balancing)等技术如何实现系统的横向扩展。理解无状态服务与有状态服务的差异,以及如何设计能够弹性伸缩的微服务架构。 一致性(Consistency):在分布式系统中,保持数据的一致性是一个复杂且充满挑战的问题。我们将深入探讨CAP理论,理解其在分布式系统设计中的指导意义,以及强一致性(Strong Consistency)、最终一致性(Eventual Consistency)、因果一致性(Causal Consistency)等不同一致性模型。并讨论如何根据业务需求在可用性和一致性之间做出权衡。 五、 架构模式与最佳实践 理解了数据原理、存储和处理技术,以及核心设计原则,本书将进一步引导读者掌握实际的架构模式和最佳实践。 微服务架构与数据管理:如何在微服务环境中有效地管理数据,包括服务间的数据同步、分布式事务的处理、以及API网关在数据访问中的作用。 数据管道(Data Pipelines):如何设计和构建高效、可靠的数据管道,实现数据的自动化采集、转换、加载和分发,连接不同的数据存储和处理系统。 事件驱动架构(Event-Driven Architecture, EDA):理解事件在现代分布式系统中的核心地位,如何利用事件驱动的模式来解耦系统、实现高响应性和实时性。 可观测性(Observability):如何设计系统以实现有效的监控、日志记录和追踪,以便在出现问题时能够快速定位和诊断。 六、 安全与合规 在数据密集型应用中,数据安全和合规性是不可逾越的红线。本书将触及数据加密、访问控制、身份认证、数据脱敏以及GDPR等相关法规要求,提醒读者在设计和实施过程中必须考虑的安全性与合规性因素。 《智能系统中的数据洞察与架构之道》致力于为读者提供一套完整的知识体系,帮助您在理解数据本质的基础上,构建出高效、可靠、可扩展且安全的智能数据系统。无论您是数据库工程师、后端开发人员、数据科学家,还是系统架构师,本书都将为您打开一扇通往数据驱动未来的大门,助您在瞬息万变的科技领域中,把握先机,引领创新。