内容简介
本书深结了作者在大型互联网公司的实战经验,系统化地阐述了构建大型分布式系统所需要的技术架构与业务架构方法论,并辅与详尽的实践剖析。全书分为三大部分:第1部分完整讨论了分布式架构的几大核心问题括高并发、高可靠、高可用、数据一致括分布式事务、Paxos/Raft一致算法)、跨城容灾与异地多活、CAP理论;第2部分从业务架构思维、需求分析、业务建模、领域驱动设计与微服务等角度探讨业务架构;第3部分是案例实战,通过众多的业界实际案例来对理论有一个更为直观的介绍。通过本书,读者可以对构建大型复杂系统的方法论有全局的认识,对软件架构的核心能力有深刻的理解,对个人的技术成长起到的借鉴作用,提升思维认知。本书不仅适合工程师、架构师阅读,也适合企业系统开发人员在内的软件开发从业人员阅读。
目录
第1部分 分布式架构第1章 高并发 41.1 问题分类 41.1.1 侧重于“高并发读”的系统 41.1.2 侧重于“高并发写”的系统 61.1.3 同时侧重于“高并发读”和“高并发写”的系统 71.2 高并发读 81.2.1 策略1:动静分离与CDN加速 81.2.2 策略2:加缓存 91.2.3 策略3:并发读与Pipeline 101.2.4 策略4:批量读 121.2.5 策略5:重写轻读 121.2.6 结:读写分离(CQRS架构) 141.3 高并发写 161.3.1 策略1:数据分片 161.3.2 策略2:任务分片 171.3.3 策略3:异步化与Pipeline 191.3.4 策略4:批量 261.3.5 策略5:串行化+多进程单线程+异步I/O 27第2章 高可靠 292.1 容量评估与规划 292.1.1 理论基础:吞吐量、响应时间与并发数三者关系 292.1.2 容量规划 312.1.3 单机大QPS估算方法1: CPU密集型与I/O密集型的区分 322.1.4 单机大QPS估算方法2:压力测试 332.2 过载保护:限流与熔断 352.2.1 限流的两种限制维度 352.2.2 单机限流的算法 352.2.3 单机限流的实现 372.2.4 中央限流 402.2.5 熔断 412.3 超时与重试 422.4 隔离 432.5 有损服务与降级 442.6 灰度发布、备份与回滚 452.7 监控体系与日志报警 47第3章 分布式事务 503.1 随处可见的分布式事务问题 513.1.1 缓存和数据库的一致问题 513.1.2 消息中间件和数据库的一致问题 513.1.3 两个数据库的一致问题 513.1.4 服务和数据库的一致问题 513.1.5 两个服务的一致问题 523.1.6 两个文件的一致问题 523.2 分布式事务解决方案 523.2.1 2PC 523.2.2 终一致:种实现方案 563.2.3 终一致:种实现方案(基于事务消息) 593.2.4 TCC 613.2.5 事务状态表+事务补偿 633.2.6 同步双写(多写)+异步对账 643.2.7 妥协方案:弱一致+基于状态的事后补偿 663.2.8 妥协方案:重试+回滚+报警+人工修复 683.2.9 阿里云Seata框架 683.2.10 结 73第4章 高可用 744.1 高可用架构的思维框架 744.1.1 如何实现故障探测 754.1.2 如何解决脑裂问题 754.1.3 如何做到数据一致 764.1.4 如何做到对客户端透明 764.1.5 如何解决高可用依赖的连环套问题 764.2 接入层高可用 784.2.1 DNS层高可用:广域网负载均衡 794.2.2 接入网关高可用:局域网负载均衡 794.2.3 Nginx高可用 814.2.4 Tomcat高可用 814.3 业务逻辑层(微服务层)高可用 824.4 存储层高可用 834.4.1 RedisCluster的高可用案例 834.4.2 HDFS的高可用案例 85第5章 高可用:多副本一致算法 895.1 高可用且强一致到底有多难 895.1.1 Kafka的消息丢失问题 895.1.2 Kafka的消息错乱问题 935.1.3 MySQL半同步数据不一致问题 945.2 Paxos算法解析 965.2.1 Paxos解决什么问题 965.2.2 状态机 995.2.3 一个朴素而深刻的想法 1015.2.4 Basic Paxos算法 1025.2.5 Multi Paxos算法 1055.3 Raft算法解析 1085.3.1 为“可理解”而设计 1085.3.2 单点写入 1085.3.3 日志结构 1095.3.4 阶段1:Leader选举 1135.3.5 阶段2:日志 1155.3.6 阶段3:恢复阶段 1165.3.7 保证 1165.4 Zab算法解析 1195.4.1 状态机与Primary-Backup System 1195.4.2 zxid 1215.4.3 “序”:与顺序提交 1225.4.4 Leader选举:FLE算法 1245.4.5 正常阶段:2阶段提交 1255.4.6 恢复阶段 1265.5 三种算法对比与工程实现 127第6章 高可用:跨城容灾与异地多活 1296.1 跨城的关键物理约束:时延 1296.2 多IDC无架构 1306.2.1 单写多读架构 1306.2.2 各IDC自治架构 1326.3 同城同步,跨城异步:2地3中心 1336.4 跨城同步:3地5中心 1336.5 跨城异步 1356.5.1 不能容忍数据不一致:实现部分的强一致 1366.5.2 可以容忍数据不一致:事后修复 1376.5.3 加快异步速度 1376.6 单元化 1386.6.1 到底什么是单元化 1386.6.2 什么系统不能单元化 140第7章 CAP理论 1427.1 CAP理论的误解 1427.2 现实世界不存在“强一致”(PACELC理论) 143第2部分 业务架构第8章 业务架构定义 1488.1 各式各样的方法论 1488.2 什么不是业务架构 1498.3 以终为始:业务架构到底解决哪些问题 150第9章 深刻理解现实世界:识别“真正的”需求 1539.1 探究问题的本源 1539.2 系统化思维 1549.3 信息传播的递减效应 1559.4 主要矛盾与次要矛盾 1569.5 产品手段与技术手段的权衡 156第10章 深刻理解现实世界:从整体上去看待需求 15810.1 利益相关者分析:看需求先看人 15810.2 金字塔原理:不重不漏地拆解问题 16010.3 需求的两种表现形式:业务流程与业务规则 16210.4 “业务”的闭环 163第11章 不同粒度的建模方法与原则 16511.1 单个系统内部的建模方法与原则 16511.1.1 建模的通用思维:搭积木 16511.1.2 面向对象建模的基本步骤 16711.2 问题空间 16911.2.1 深刻理解专业名词 16911.2.2 重要信息“显化” 17011.2.3 抽象 17111.3 解决方案空间 17411.3.1 重构 17411.3.2 设计模式 17511.3.3 面向对象的五大原则(SOLID原则) 17811.4 跨系统、跨团队的建模方法与原则 17911.4.1 康威定律 17911.4.2 领域的划分:高内聚与低耦合 18111.4.3 边界思维:接口的设计比实现重要得多 18211.4.4 多视角描述同一个架构:架构4+1/5+1视图 184第12章 常用架构模式 18612.1 分层架构模式与“伪分层” 18612.2 管道-过滤器架构模式 18912.3 状态机架构模式 19012.4 业务切面/业务闭环架构模式 19212.5 规则引擎 19312.5.1 什么是规则 19412.5.2 业务代码如何抽象成一条条规则 19412.5.3 规则描述语言DSL 19612.5.4 规则引擎的两种执行方式 19712.6 工作流引擎 198第13章 领域驱动设计 20013.1 传统开发模式:面向数据库表的“面条式”代码 20013.2 DDD的基本概念 20113.3 DDD的方法论 20313.3.1 领域模型和数据模型的区别 20313.3.2 基于DDD的分层架构 20313.3.3 领域模型和数据模型如何映射 20413.3.4 DDD中的读写分离模式 206第14章 DDD的折中与微服务架构 20714.1 软件建模本身的困难 20714.2 “无建模”带来的各种问题 20914.3 DDD的困难 21014.4 折中后的DDD 21114.4.1 宏观层面:遵循子域、限界上下文、微服务三者的映射关系 21114.4.2 微观层面:不遵循DDD的方法论 21214.5 三个不同层次的读写分离架构 212第3部分 案例实战第15章 基础架构案例实战 21615.1 分布式锁 21615.1.1 分布式锁的使用场景 21615.1.2 分布式锁的常用实现方式与问题 21615.1.3 用串行化代替分布式锁 21715.2 服务注册与服务发现中心 21915.2.1 服务注册与服务发现中心的基本原理 21915.2.2 服务路由表的数据延迟与解决方案 22015.2.3 服务注册中心应该是AP系统,还是CP系统 22115.2.4 配置中心应该是AP系统,还是CP系统 22215.3 分布式ID生成系统 22215.3.1 全局,趋势递增 22315.3.2 全局,单调递增 22515.3.3 全局,连续递增 229第16章 C端业务系统案例实战 23016.1 电商库存系统 23016.1.1 业务背景与需求分析 23016.1.2 高并发读与写:中央缓存与本地缓存的权衡 23416.1.3 数据一致:幂等问题 23816.1.4 数据一致:扣减多个商品的原子问题 23916.1.5 数据一致:并发更新的锁问题 23916.1.6 数据一致:流水和库存表如何对账 24016.1.7 业务架构进阶之一:一个库存模型同时支持自营与平台 两个商业模式 24116.1.8 业务架构进阶之二:分区售卖问题 24316.1.9 业务架构进阶之三:供应链库存(不光要管售卖,还要管采购) 24416.1.10 业务架构进阶之四:以“单据”为中心的库存对账 24516.1.11 业务架构进阶之五:先采后卖,还是先卖后采 24716.2 系统 24916.2.1 需求分析 24916.2.2 异步与同步 25016.2.3 同步系统的设计 25216.2.4 防刷问题 25316.2.5 名额归还问题 25416.2.6 同步与异步的相结合 25416.2.7 层层限流,保护终的核心系统 25516.3 Feeds流 25516.3.1 需求分析 25516.3.2 无限长列表的实现 25616.3.3 写扩散和读扩散的相结合 25816.3.4 评论的实现 259第17章 B端业务系统案例实战 26117.1 规则引擎平台 26117.1.1 规则引擎的典型应用场景 26117.1.2 四种技术选型 26317.1.3 规则的存储与版本管理 26517.1.4 可视化规则编辑 26617.1.5 特征库、动作库管理 26817.1.6 特征数据库 26917.1.7 结 27017.2 工作流引擎平台 27117.2.1 没有工作流引擎,如何做业务开发 27117.2.2 工作流引擎的基本思路 27317.2.3 工作流引擎与微服务编排引擎、分布式事务的Saga模式的区别与 联系 27417.2.4 BPMN标准 27817.2.5 工作流引擎的技术选型与Activiti介绍 28117.2.6 对Activiti的裁剪 28317.2.7 Activiti的能问题与对Activiti的扩展 28417.2.8 工作流引擎与微服务/DDD方法论的冲突 28517.3 权限管理系统 28617.3.1 权限管理系统的由来 28617.3.2 权限如何抽象:权限Code 28717.3.3 权限的进一步抽象 28817.3.4 权限模型 28917.3.5 权限系统的实现方式 28917.3.6 API权限与微服务鉴权 292第18章 大数据与中台案例实战 29518.1 严格区分在线业务逻辑与离线业务逻辑 29518.2 警惕后台离线任务 29818.3 合理利用大数据交互式查询引擎 30018.4 中台 30118.4.1 什么不是中台 30118.4.2 业务中台 30318.4.3 数据中台 30418.4.4 中台和组织架构 307



VIP会员