猜你喜欢
架构设计2.0:大型分布式系统架构方法论与实践(博文视点出品)

架构设计2.0:大型分布式系统架构方法论与实践(博文视点出品)

书籍作者:余春龙 ISBN:9787121425073
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2717
创建日期:2022-11-07 发布日期:2022-11-07
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书深刻总结了作者在大型互联网公司长期的实战经验,系统阐述了构建大型分布式系统所需要的技术架构与业务架构方法论,并进行了详尽的实践剖析。全书分为三大部分:第1部分完整讨论了分布式架构的几大核心问题,包括高并发、高可靠、高可用、数据一致性(包括分布式事务、Paxos/Raft一致性算法)、跨城容灾与异地多活、CAP理论;第2部分从业务架构思维、需求分析、业务建模、领域驱动设计与微服务等角度探讨业务架构;第3部分是案例实战,通过众多的业界实际案例对理论有更为直观的介绍。通过本书,读者可以对构建大型分布式系统的方法论有全局的认识,对软件架构的核心能力有深刻的理解,对个人的技术成长起到一定的借鉴作用,提升思维认知。


本书不仅适合工程师、架构师阅读,也适合包括企业系统开发人员在内的软件开发从业人员阅读。


作者简介

余春龙,中科院软件所硕士毕业,先后在多家一线互联网公司任架构师,历经各种大规模研发团队的架构实践,在海量高并发高可用架构、业务建模、领域驱动设计、技术规划与技术管理等方面具备丰富的工程经验,形成了自己完整的一套架构方法论。

编辑推荐
适读人群 :本书适合工程师、架构师阅读,也适合企业系统开发人员在内的软件开发从业者阅读。

《软件架构设计:大型网站技术架构与业务架构融合之道》《Java并发实现原理:JDK源码剖析》作者,互联网公司架构师。

内容丰富,系统化地阐述了构建大型分布式系统所需要的技术架构与业务架构方法论,并辅与详尽的实践案例剖析。

体系完整,从分布式架构的几大核心问题入手,过渡到业务架构思维、需求分析、业务建模、领域驱动设计与微服务等,探讨业务架构,最后通过众多的业界实际案例来对理论有一个更为直观的介绍。


前言

本书是《软件架构设计:大型网站技术架构与业务架构融合之道》的进阶版本:和上一本书相比,本书省略了基础理论知识、计算机功底、技术管理的相关内容,更聚焦于分布式架构和业务架构这两个最重要的板块,在方法论上做更深入细致的探讨,同时补充了更为翔实的实战案例。


自始至终,作者最在意的还是“方法论”的建立。在《软件架构设计:大型网站技术架构与业务架构融合之道》中也是以“方法论”为主线的,但更偏重理论,没有详细展开讲实战案例。本书将一步步由浅入深地展开介绍很多详细的案例,同时在方法论层面进行更为细致的论述。


这里所讲的方法论,不是讨论解决问题的“具体技术或者框架”,而是真实解决“问题”本身。不是说解决问题的方案不重要,而是“定义问题,提出问题,往往比解决问题更加重要!”同样的问题,用C++、Java等不同语言和技术框架解决时,解决方案会有差异;在电商、广告、金融等不同业务场景中,解决方案也会有差异,但问题本身却是一样的。


比如分布式ID生成器,不管用什么语言写,也不管用在什么业务场景中,都有它本身固有的几个问题要解决。


比如消息中间件,要实现消息的不重不漏,也是一个无论在何种开发语言和业务场景中都需要解决的共性问题。


比如高可用切换导致的“脑裂“问题,无论在基础架构,还是在业务系统中,都会遇到。


比如高可用切换导致的数据一致性问题,无论在Kafka、MySQL,还是在Redis等系统中也会遇到。


方法论的作用是建立“迁移学习”的思维。迁移学习指的是当遇到新业务、新技术时,可以把之前的分析和解决问题的方法,快速地用到新的领域,提升学习效率。


而实践是什么呢?实践只是针对这个问题,在某种特定的业务场景下的其中一种解决方案。本书会列举不少实践案例,但不管怎么列举,都没办法把所有业务场景或实践全部枚举出来。解决方案可能是无穷的,但问题本身却是有限的。只有明白了这点,才能在新的业务场景和技术框架下,用同样的思考方式去解决问题:技术框架一直在变,业务场景也一直在变,解决问题的方案也随之在变,但那些“问题”却是永恒的。


本书结合作者多年在大型互联网公司的各种项目经验,将对于方法论的总结和思考贯穿于全书。希望读者最终收获的不仅是某个实战案例,还有理论的提升。


如何阅读本书?

对于刚入行的新人来说,建议先阅读《软件架构设计:大型网站技术架构与业务架构融合之道》,对架构的知识体系有一个全面认知,之后再重点阅读本书的相关章节。


对于有经验的从业者,可以选取自己感兴趣的章节阅读。


具体来说,全书分成了三大部分:

第1部分:分布式架构。这部分将介绍如何应对高并发、高可靠、高可用、一致性、跨城容灾等方面的问题。

第2部分:业务架构。这部分将介绍如何从技术延展到业务,如何做需求分析、建模、领域驱动设计和微服务拆分等。

第3部分:案例实战。结合作者在大型互联网公司的各种案例,把第1部分和第2部分综合在一起考虑,讲解分布式架构和业务架构的思维是如何在项目中运用的。


由于时间有限,书中不足之处在所难免,敬请广大读者批评指正!

作者


目录

第1部分 分布式架构
第1章 高并发 4
1.1 问题分类 4
1.1.1 侧重于“高并发读”的系统 4
1.1.2 侧重于“高并发写”的系统 6
1.1.3 同时侧重于“高并发读”和“高并发写”的系统 7
1.2 高并发读 8
1.2.1 策略1:动静分离与CDN加速 8
1.2.2 策略2:加缓存 9
1.2.3 策略3:并发读与Pipeline 10
1.2.4 策略4:批量读 12
1.2.5 策略5:重写轻读 12
1.2.6 总结:读写分离(CQRS架构) 14
1.3 高并发写 16
1.3.1 策略1:数据分片 16
1.3.2 策略2:任务分片 17
1.3.3 策略3:异步化与Pipeline 19
1.3.4 策略4:批量 26
1.3.5 策略5:串行化+多进程单线程+异步I/O 27
第2章 高可靠 29
2.1 容量评估与规划 29
2.1.1 理论基础:吞吐量、响应时间与并发数三者关系 29
2.1.2 容量规划 31
2.1.3 单机最大QPS估算方法1: CPU密集型与I/O密集型的区分 32
2.1.4 单机最大QPS估算方法2:压力测试 33
2.2 过载保护:限流与熔断 35
2.2.1 限流的两种限制维度 35
2.2.2 单机限流的算法 35
2.2.3 单机限流的实现 37
2.2.4 中央限流 40
2.2.5 熔断 41
2.3 超时与重试 42
2.4 隔离 43
2.5 有损服务与降级 44
2.6 灰度发布、备份与回滚 45
2.7 监控体系与日志报警 47
第3章 分布式事务 50
3.1 随处可见的分布式事务问题 51
3.1.1 缓存和数据库的一致性问题 51
3.1.2 消息中间件和数据库的一致性问题 51
3.1.3 两个数据库的一致性问题 51
3.1.4 服务和数据库的一致性问题 51
3.1.5 两个服务的一致性问题 52
3.1.6 两个文件的一致性问题 52
3.2 分布式事务解决方案汇总 52
3.2.1 2PC 52
3.2.2 最终一致性:第一种实现方案 56
3.2.3 最终一致性:第二种实现方案(基于事务消息) 59
3.2.4 TCC 61
3.2.5 事务状态表+事务补偿 63
3.2.6 同步双写(多写)+异步对账 64
3.2.7 妥协方案:弱一致性+基于状态的事后补偿 66
3.2.8 妥协方案:重试+回滚+报警+人工修复 68
3.2.9 阿里云Seata框架 68
3.2.10 总结 73
第4章 高可用 74
4.1 高可用架构的思维框架 74
4.1.1 如何实现故障探测 75
4.1.2 如何解决脑裂问题 75
4.1.3 如何做到数据一致性 76
4.1.4 如何做到对客户端透明 76
4.1.5 如何解决高可用依赖的连环套问题 76
4.2 接入层高可用 78
4.2.1 DNS层高可用:广域网负载均衡 79
4.2.2 接入网关高可用:局域网负载均衡 79
4.2.3 Nginx高可用 81
4.2.4 Tomcat高可用 81
4.3 业务逻辑层(微服务层)高可用 82
4.4 存储层高可用 83
4.4.1 RedisCluster的高可用案例 83
4.4.2 HDFS的高可用案例 85
第5章 高可用:多副本一致性算法 89
5.1 高可用且强一致性到底有多难 89
5.1.1 Kafka的消息丢失问题 89
5.1.2 Kafka的消息错乱问题 93
5.1.3 MySQL半同步复制数据不一致问题 94
5.2 Paxos算法解析 96
5.2.1 Paxos解决什么问题 96
5.2.2 复制状态机 99
5.2.3 一个朴素而深刻的想法 101
5.2.4 Basic Paxos算法 102
5.2.5 Multi Paxos算法 105
5.3 Raft算法解析 108
5.3.1 为“可理解性”而设计 108
5.3.2 单点写入 108
5.3.3 日志结构 109
5.3.4 阶段1:Leader选举 113
5.3.5 阶段2:日志复制 115
5.3.6 阶段3:恢复阶段 116
5.3.7 安全性保证 116
5.4 Zab算法解析 119
5.4.1 复制状态机与Primary-Backup System 119
5.4.2 zxid 121
5.4.3 “序”:乱序提交与顺序提交 122
5.4.4 Leader选举:FLE算法 124
5.4.5 正常阶段:2阶段提交 125
5.4.6 恢复阶段 126
5.5 三种算法对比与工程实现 127
第6章 高可用:跨城容灾与异地多活 129
6.1 跨城的关键物理约束:时延 129
6.2 多IDC无复制架构 130
6.2.1 单写多读架构 130
6.2.2 各IDC自治架构 132
6.3 同城同步复制,跨城异步复制:2地3中心 133
6.4 跨城同步复制:3地5中心 133
6.5 跨城异步复制 135
6.5.1 不能容忍数据不一致:实现部分的强一致 136
6.5.2 可以容忍数据不一致:事后修复 137
6.5.3 加快异步复制速度 137
6.6 单元化 138
6.6.1 到底什么是单元化 138
6.6.2 什么系统不能单元化 140
第7章 CAP理论 142
7.1 CAP理论的误解 142
7.2 现实世界不存在“强一致性”(PACELC理论) 143
第2部分 业务架构
第8章 业务架构定义 148
8.1 各式各样的方法论 148
8.2 什么不是业务架构 149
8.3 以终为始:业务架构到底解决哪些问题 150
第9章 深刻理解现实世界:识别“真正的”需求 153
9.1 探究问题的本源 153
9.2 系统化思维 154
9.3 信息传播的递减效应 155
9.4 主要矛盾与次要矛盾 156
9.5 产品手段与技术手段的权衡 156
第10章 深刻理解现实世界:从整体上去看待需求 158
10.1 利益相关者分析:看需求先看人 158
10.2 金字塔原理:不重不漏地拆解问题 160
10.3 需求的两种表现形式:业务流程与业务规则 162
10.4 “业务”的闭环性 163
第11章 不同粒度的建模方法与原则 165
11.1 单个系统内部的建模方法与原则 165
11.1.1 建模的通用思维:搭积木 165
11.1.2 面向对象建模的基本步骤 167
11.2 问题空间 169
11.2.1 深刻理解专业名词 169
11.2.2 重要信息“显性化” 170
11.2.3 抽象 171
11.3 解决方案空间 174
11.3.1 重构 174
11.3.2 设计模式 175
11.3.3 面向对象的五大原则(SOLID原则) 178
11.4 跨系统、跨团队的建模方法与原则 179
11.4.1 康威定律 179
11.4.2 领域的划分:高内聚与低耦合 181
11.4.3 边界思维:接口的设计比实现重要得多 182
11.4.4 多视角描述同一个架构:架构4+1/5+1视图 184
第12章 常用架构模式 186
12.1 分层架构模式与“伪分层” 186
12.2 管道-过滤器架构模式 189
12.3 状态机架构模式 190
12.4 业务切面/业务闭环架构模式 192
12.5 规则引擎 193
12.5.1 什么是规则 194
12.5.2 业务代码如何抽象成一条条规则 194
12.5.3 规则描述语言DSL 196
12.5.4 规则引擎的两种执行方式 197
12.6 工作流引擎 198
第13章 领域驱动设计 200
13.1 传统开发模式:面向数据库表的“面条式”代码 200
13.2 DDD的基本概念 201
13.3 DDD的方法论 203
13.3.1 领域模型和数据模型的区别 203
13.3.2 基于DDD的分层架构 203
13.3.3 领域模型和数据模型如何映射 204
13.3.4 DDD中的读写分离模式 206
第14章 DDD的折中与微服务架构 207
14.1 软件建模本身的困难 207
14.2 “无建模”带来的各种问题 209
14.3 DDD的困难 210
14.4 折中后的DDD 211
14.4.1 宏观层面:遵循子域、限界上下文、微服务三者的映射关系 211
14.4.2 微观层面:不遵循DDD的方法论 212
14.5 三个不同层次的读写分离架构 212
第3部分 案例实战
第15章 基础架构案例实战 216
15.1 分布式锁 216
15.1.1 分布式锁的使用场景 216
15.1.2 分布式锁的常用实现方式与问题 216
15.1.3 用串行化代替分布式锁 217
15.2 服务注册与服务发现中心 219
15.2.1 服务注册与服务发现中心的基本原理 219
15.2.2 服务路由表的数据延迟与解决方案 220
15.2.3 服务注册中心应该是AP系统,还是CP系统 221
15.2.4 配置中心应该是AP系统,还是CP系统 222
15.3 分布式ID生成系统 222
15.3.1 全局唯一,趋势递增 223
15.3.2 全局唯一,单调递增 225
15.3.3 全局唯一,连续递增 229
第16章 C端业务系统案例实战 230
16.1 电商库存系统 230
16.1.1 业务背景与需求分析 230
16.1.2 高并发读与写:中央缓存与本地缓存的权衡 234
16.1.3 数据一致性:幂等问题 238
16.1.4 数据一致性:扣减多个商品的原子性问题 239
16.1.5 数据一致性:并发更新的锁问题 239
16.1.6 数据一致性:流水和库存表如何对账 240
16.1.7 业务架构进阶之一:一个库存模型同时支持自营与平台
两个商业模式 241
16.1.8 业务架构进阶之二:分区售卖问题 243
16.1.9 业务架构进阶之三:供应链库存(不光要管售卖,还要管采购) 244
16.1.10 业务架构进阶之四:以“单据”为中心的库存对账 245
16.1.11 业务架构进阶之五:先采后卖,还是先卖后采 247
16.2 秒杀系统 249
16.2.1 需求分析 249
16.2.2 异步秒杀与同步秒杀 250
16.2.3 同步秒杀系统的设计 252
16.2.4 防刷问题 253
16.2.5 名额归还问题 254
16.2.6 同步与异步的相结合 254
16.2.7 层层限流,保护最终的核心系统 255
16.3 Feeds流 255
16.3.1 需求分析 255
16.3.2 无限长列表的实现 256
16.3.3 写扩散和读扩散的相结合 258
16.3.4 评论的实现 259
第17章 B端业务系统案例实战 261
17.1 规则引擎平台 261
17.1.1 规则引擎的典型应用场景 261
17.1.2 四种技术选型 263
17.1.3 规则的存储与版本管理 265
17.1.4 可视化规则编辑 266
17.1.5 特征库、动作库管理 268
17.1.6 特征数据库 269
17.1.7 总结 270
17.2 工作流引擎平台 271
17.2.1 没有工作流引擎,如何做业务开发 271
17.2.2 工作流引擎的基本思路 273
17.2.3 工作流引擎与微服务编排引擎、分布式事务的Saga模式的区别与
联系 274
17.2.4 BPMN标准 278
17.2.5 工作流引擎的技术选型与Activiti介绍 281
17.2.6 对Activiti的裁剪 283
17.2.7 Activiti的性能问题与对Activiti的扩展 284
17.2.8 工作流引擎与微服务/DDD方法论的冲突 285
17.3 权限管理系统 286
17.3.1 权限管理系统的由来 286
17.3.2 权限如何抽象:权限Code 287
17.3.3 权限的进一步抽象 288
17.3.4 权限模型 289
17.3.5 权限系统的实现方式 289
17.3.6 API权限与微服务鉴权 292
第18章 大数据与中台案例实战 295
18.1 严格区分在线业务逻辑与离线业务逻辑 295
18.2 警惕后台离线任务 298
18.3 合理利用大数据交互式查询引擎 300
18.4 中台 301
18.4.1 什么不是中台 301
18.4.2 业务中台 303
18.4.3 数据中台 304
18.4.4 中台和组织架构 307

产品特色