


本书系统讲解复杂系统架构设计知识,兼具理论深度与实践价值。全书分为三部分,先阐述系统设计基础概念、分布式系统属性及核心定理与数据结构;再详解DNS、负载均衡器、数据库、分布式缓存等核心组件的设计与实现;最后通过API设计、安全防护等实践内容及URL短链、仿Twitter/Instagram/Google Docs等真实案例,结合面试指南与实用手册,助力读者掌握系统设计思维。本书面向软件工程师、面试求职者等群体,既夯实理论基础,又提供实操方法,帮助应对系统设计面试与实际工作中的复杂问题。
封面
前折页
书名页
版权
前言
作者简介
审校者简介
第一部分 系统设计基础
第1章 系统设计基础知识
1.1 什么是系统设计
1.1.1 软件系统
1.1.2 分布式软件系统
1.1.3 理解系统设计
1.2 系统设计的类型有哪些
1.2.1 高层系统设计
1.2.2 系统架构
1.2.3 数据流
1.2.4 可扩展性
1.2.5 容错性
1.2.6 低层系统设计
1.2.7 算法
1.2.8 数据结构
1.2.9 API
1.2.10 代码优化
1.3 系统设计在业界的重要性
1.4 凸显系统设计重要性的实践案例
1.5 总结
第2章 分布式系统属性
2.1 酒店客房预订示例
2.2 一致性
2.2.1 强一致性
2.2.2 最终一致性
2.3 可用性
2.4 理解分区容错性
2.4.1 网络分区
2.4.2 分区容错性
2.5 延迟
2.6 持久性
2.7 可靠性
2.8 容错性
2.9 可扩展性
2.9.1 垂直扩展
2.9.2 水平扩展
2.10 总结
第3章 分布式系统核心定理和数据结构
3.1 CAP定理
3.2 PACELC定理
3.2.1 Paxos
3.2.2 Raft
3.3 BGP
3.3.1 拜占庭故障
3.3.2 拜占庭容错
3.3.3 现代拜占庭容错
3.4 FLP不可能性定理
3.5 一致性哈希
3.6 布隆过滤器
3.7 计数最小草图
3.8 超对数计数
3.9 总结
第二部分 分布式系统的核心组件
第4章 分布式系统的基础组件:DNS、负载均衡器与应用网关
4.1 DNS探析
4.2 DNS的可扩展性、可靠性与一致性
4.2.1 可扩展性
4.2.2 可靠性
4.2.3 一致性
4.3 负载均衡器
4.3.1 部署负载均衡器
4.3.2 负载均衡器的优点
4.3.3 全局负载均衡与本地负载均衡
4.3.4 DNS和GSLB
4.3.5 负载均衡算法
4.3.6 位于开放系统互连模型各层级的负载均衡
4.3.7 部署负载均衡器
4.3.8 实现负载均衡器
4.4 应用网关
4.5 微服务架构
4.6 云原生部署方案
4.7 本地化部署方案
4.8 总结
第5章 设计与实现系统组件——数据库与存储
5.1 数据库
5.1.1 数据库类型
5.1.2 关系数据库
5.1.3 NoSQL数据库
5.1.4 对比关系数据库与NoSQL数据库
5.2 键值存储
5.2.1 什么是键值存储
5.2.2 在分布式系统中的应用
5.2.3 设计键值存储系统
5.3 可扩展性与数据复制
5.3.1 提升可扩展性
5.3.2 一致性哈希
5.3.3 虚拟节点
5.3.4 数据冗余策略
5.4 实现get和put函数
5.4.1 实现get和put操作
5.4.2 使用r和w
5.5 键值存储的容错机制与故障识别
5.5.1 管理临时故障
5.5.2 处理永久故障
5.5.3 提升环形成员关系以用于检测故障
5.6 系统设计面试:键值存储的设计要点与策略
5.7 DynamoDB
5.7.1 无固定样式
5.7.2 API函数
5.7.3 DynamoDB的数据分区
5.7.4 DynamoDB的吞吐量优化
5.7.5 DynamoDB的高可用性
5.8 列族数据库
5.9 HBase
5.10 图数据库
5.11 Neo4j图数据库
5.12 关系建模与图建模
5.12.1 图建模
5.12.2 向现有图结构添加新节点
5.13 总结
5.14 参考文献
第6章 分布式缓存
6.1 什么是缓存
6.1.1 什么是分布式缓存
6.1.2 分布式缓存与常规缓存有何区别
6.1.3 应用场景
6.1.4 使用分布式缓存的优势
6.1.5 使用分布式缓存的挑战
6.2 设计分布式缓存
6.2.1 需求
6.2.2 设计历程
6.3 主流分布式缓存方案
6.3.1 Redis
6.3.2 Memcached
6.3.3 如何在Redis与Memcached之间选择
6.4 总结
第7章 发布/订阅系统与分布式队列
7.1 分布式系统的演进历程
7.2 设计发布/订阅系统
7.2.1 发布/订阅系统的关键特征
7.2.2 发布/订阅系统的设计要点
7.3 Kafka
7.4 Kafka Streams
7.5 Kinesis
7.6 总结
第三部分 系统设计实践
第8章 系统组件的设计与实现:API、安全与指标
8.1 REST API
8.1.1 REST API的设计原则
8.1.2 REST API的应用场景
8.1.3 优势与不足
8.2 gRPC API
8.2.1 gRPC API的设计原则
8.2.2 gRPC API的应用场景
8.2.3 优势与不足
8.3 对比REST与gRPC
8.4 API安全
8.4.1 认证
8.4.2 授权
8.4.3 API的安全通信
8.4.4 速率限制
8.5 分布式系统日志
8.5.1 集中式日志
8.5.2 实施分布式日志的最佳实践
8.6 分布式系统的指标
8.6.1 指标类型
8.6.2 度量指标的开源工具
8.6.3 实施指标的最佳实践
8.7 分布式系统的告警
8.7.1 设计高效告警
8.7.2 开源告警工具
8.7.3 实施告警的最佳实践
8.8 分布式系统的链路追踪
8.8.1 分布式链路追踪
8.8.2 分布式链路追踪的开源工具
8.8.3 实施链路追踪的最佳实践
8.9 最佳实践
8.10 总结
第9章 系统设计——URL短链服务
9.1 实际应用场景
9.1.1 功能性需求
9.1.2 非功能性需求
9.2 客户端API需求
9.3 估算与计算
9.4 系统设计
9.4.1 核心挑战
9.4.2 数据库的选择
9.4.3 高层架构方案
9.5 需求验证
9.6 总结
第10章 系统设计——邻近服务
10.1 实际应用场景
10.2 功能性需求
10.3 非功能性需求
10.4 客户端API需求
10.5 估算与计算
10.6 系统设计
10.6.1 高层系统设计
10.6.2 核心挑战
10.6.3 最终的高层架构方案
10.7 需求验证
10.8 总结
第11章 设计仿Twitter服务
11.1 功能性需求
11.2 非功能性需求
11.3 数据模型
11.4 规模计算
11.5 高层系统设计
11.6 设计推文服务
11.6.1 数据存储
11.6.2 推文创建流程
11.6.3 推文检索流程
11.6.4 缓存
11.7 设计用户服务
11.7.1 数据存储
11.7.2 用户注册流程
11.7.3 身份认证流程
11.7.4 关注/取消关注流程
11.7.5 获取关注者与被关注者
11.8 低层系统设计——时间线服务
11.8.1 数据流
11.8.2 时间线检索流程
11.8.3 基于推送的更新机制
11.9 设计搜索服务
11.9.1 数据流与索引
11.9.2 搜索查询处理
11.9.3 相关性评分与排序
11.10 其他考量因素
11.11 总结
第12章 设计仿Instagram服务
12.1 功能性需求
12.2 非功能性需求
12.3 设计数据模型
12.4 规模计算
12.5 高层系统设计
12.6 低层系统设计
12.6.1 设计照片上传服务
12.6.2 信息流服务
12.6.3 用户服务
12.7 其他考量因素
12.8 总结
第13章 设计仿Google Docs服务
13.1 功能性需求
13.2 非功能性需求
13.3 数据模型
13.4 规模计算
13.4.1 假设前提
13.4.2 存储需求
13.4.3 带宽考量
13.4.4 处理能力
13.5 高层系统设计
13.6 低层系统设计
13.6.1 设计文档服务
13.6.2 设计协作服务
13.6.3 设计访问控制服务
13.7 其他考量因素与最佳实践
13.8 总结
第14章 设计仿Netflix服务
14.1 功能性需求
14.2 非功能性需求
14.3 设计数据模型
14.4 规模计算
14.4.1 假设前提
14.4.2 存储容量估算
14.4.3 带宽估算
14.4.4 处理能力估算
14.5 高层系统设计
14.6 低层系统设计
14.6.1 视频服务
14.6.2 视频上传与存储
14.6.3 视频编码与转码
14.6.4 视频流媒体
14.6.5 缓存与内容分发
14.6.6 用户服务
14.6.7 用户认证与访问授权
14.6.8 用户资料管理
14.6.9 数据库与缓存
14.6.10 推荐服务
14.7 CDN
14.7.1 CDN架构与内容分发
14.7.2 请求路由与视频流传输
14.7.3 自适应比特率流媒体
14.7.4 内容安全与数字版权管理
14.8 总结
第15章 面试指南
15.1 系统设计面试备考指南
15.1.1 基础概念解析
15.1.2 学习常见系统设计模式
15.1.3 系统设计实践
15.1.4 从在线资源中学习
15.1.5 培养和提升沟通技能
15.1.6 回顾与反思
15.2 面试要点与技巧
15.2.1 理解问题描述
15.2.2 分解问题
15.2.3 关键操作步骤
15.2.4 高效沟通设计方案
15.3 总结
第16章 系统设计实用手册
16.1 针对具体的应用场景,如何选择数据存储方案
16.2 针对具体的应用场景,如何选择数据结构
16.3 针对不同的应用场景,如何选择组件
16.4 针对不同的应用场景,如何选择协议
16.5 针对不同的核心挑战,采用何种解决方案
16.6 总结
后折页
封底
机械工业出版社 京icp备14043556号-1 (署)网出证(京)字第214号 Copyright (C) 2001 CmpBook. All Rights Reserved