软件架构设计:大型网站技术架构与业务架构融合之道
- ISBN:9787121356032
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:256
- 出版时间:2019-01-01
- 条形码:9787121356032 ; 978-7-121-35603-2
本书特色
揭秘互联网高并发、高可用、可扩展架构核心技术 囊括计算机功底、技术架构、业务架构、职业发展四大维度,建立系统的架构设计方法论 诠释技术架构与业务架构的融合方法 软件架构设计的本质,是对问题域空间反复运用演绎、抽象、归纳等方法,进而找到适合当前阶段的设计方案的过程。既要考虑软件随业务发展的横纵向扩展性,也要考虑软件自身的可行性、稳定性和可维护性等技术因素。本书作者结合了自身多年架构设计实践经验和多个业界经典案例,帮助读者理解、总结了许多实用的软件架构设计思路,以及软件设计过程中经常遇到的“道、术、虚、实”。 ——白沿松(花名太阳) 阿里巴巴高级技术专家 不同于一些白皮书、技术规范或国外大神的译作,本书从技术出发,所述内容精而不杂,从技术功底到业务场景分析,特别是处处结合作者自身感悟,向广大读者展示了如何建立一种成体系的思维方式和学习方法,让方法论不再晦涩难懂。无论工作三五年的程序员,还是工作八九年的老手,看这本书都会有收获,有共鸣。 ——桂艳军 某金融科技公司技术总监 架构师,从事软件行业几年的代码工匠皆可称之。然而,从基本原理到底层算法,再到中间应用、上层模块架构,甚至更往上一层的业务领域建模,能尽数领悟者不多见,能领悟且能实战总结者甚少,能总结又能循序渐进娓娓道来者,更是凤毛麟角。作者将十年工作经验凝聚于本书, 若读者能够细细研读,仔细领会,并能结合自身业务和领域,学一而实践三,必将收益良多。 ——谭国富 腾讯高级工程师
内容简介
本书系统化地梳理了软件架构的方法论与实践。通过本书,读者可以对业务软件的架构方法学有一个全局的认识,同时对软件架构需要的核心能力有深刻的理解,对个人的技术成长之路起到一定借鉴作用。本书内容包括大规模分布式架构涉及的语言、框架、中间件等内容,同时本书将跳出某种具体的语言框架来总结梳理架构的核心思维,这种思维适用于用任何一种语言框架解决任何一种业务问题。
目录
第1部分 什么是架构
第1章 五花八门的架构师职业 2
1.1 架构师职业分类 2
1.2 架构的分类 2
第2章 架构的道与术 5
2.1 何为道,何为术 5
2.2 道与术的辩证关系 6
第2部分 计算机功底
第3章 语言 10
3.1 层出不穷的编程语言 10
3.2 精通一门语言 10
第4章 操作系统 12
4.1 缓冲I/O和直接I/O 12
4.2 内存映射文件与零拷贝 14
4.2.1 内存映射文件 14
4.2.2 零拷贝 15
4.3 网络I/O模型 17
4.3.1 实现层面的网络I/O模型 17
4.3.2 Reactor模式与Preactor模式 20
4.3.3 select、epoll的LT与ET 20
4.3.4 服务器编程的1+N+M模型 22
4.4 进程、线程和协程 24
4.5 无锁(内存屏障与CAS) 27
4.5.1 内存屏障 27
4.5.2 CAS 30
第5章 网络 31
5.1 HTTP 1.0 31
5.1.1 HTTP 1.0的问题 31
5.1.2 Keep-Alive机制与Content-Length属性 31
5.2 HTTP 1.1 32
5.2.1 连接复用与Chunk机制 32
5.2.2 Pipeline与Head-of-line Blocking问题 33
5.2.3 HTTP/2出现之前的性能提升方法 34
5.2.4 “一来多回”问题 35
5.2.5 断点续传 36
5.3 HTTP/2 36
5.3.1 与HTTP 1.1的兼容 37
5.3.2 二进制分帧 37
5.3.3 头部压缩 39
5.4 SSL/TLS 39
5.4.1 背景 39
5.4.2 对称加密的问题 40
5.4.3 双向非对称加密 41
5.4.4 单向非对称加密 42
5.4.5 中间人攻击 43
5.4.6 数字证书与证书认证中心 44
5.4.7 根证书与CA信任链 45
5.4.8 SSL/TLS协议:四次握手 47
5.5 HTTPS 48
5.6 TCP/UDP 49
5.6.1 可靠与不可靠 49
5.6.2 TCP的“假”连接(状态机) 51
5.6.3 三次握手(网络2将军问题) 53
5.6.4 四次挥手 54
5.7 QUIC 56
5.7.1 不丢包(Raid5算法和Raid6算法) 57
5.7.2 更少的RTT 58
5.7.3 连接迁移 58
第6章 数据库 59
6.1 范式与反范式 59
6.2 分库分表 59
6.2.1 为什么要分 60
6.2.2 分布式ID生成服务 60
6.2.3 拆分维度的选择 60
6.2.4 Join查询问题 61
6.2.5 分布式事务 61
6.3 B+树 62
6.3.1 B+树逻辑结构 62
6.3.2 B+树物理结构 63
6.3.3 非主键索引 65
6.4 事务与锁 66
6.4.1 事务的四个隔离级别 66
6.4.2 悲观锁和乐观锁 67
6.4.3 死锁检测 71
6.5 事务实现原理之1:Redo Log 72
6.5.1 Write-Ahead 73
6.5.2 Redo Log的逻辑与物理结构 74
6.5.3 Physiological Logging 75
6.5.4 I/O写入的原子性(Double Write) 76
6.5.5 Redo Log Block结构 77
6.5.6 事务、LSN与Log Block的关系 78
6.5.7 事务Rollback与崩溃恢复(ARIES算法) 80
6.6 事务实现原理之2:Undo Log 86
6.6.1 Undo Log是否一定需要 86
6.6.2 Undo Log(MVCC) 88
6.6.3 Undo Log不是Log 89
6.6.4 Undo Log与Redo Log的关联 90
6.6.4 各种锁 91
6.7 Binlog与主从复制 94
6.7.1 Binlog与Redo Log的主要差异 94
6.7.2 内部XA – Binlog与Redo Log一致性问题 95
6.7.3 三种主从复制方式 96
6.7.3 并行复制 97
第7章 框架、软件与中间件 99
7.1 对生态体系的认知 99
7.2 框架 99
7.3 软件与中间件 100
第3部分 技术架构之道
第8章 高并发问题 104
8.1 问题分类 104
8.1.1 侧重于“高并发读”的系统 104
8.1.2 侧重于“高并发写”的系统 105
8.1.3 同时侧重于“高并发读”和“高并发写”的系统 106
8.2 高并发读 108
8.2.1 策略1:加缓存 108
8.2.2 策略2:并发读 109
8.2.3 策略3:重写轻读 110
8.2.4 总结:读写分离(CQRS架构) 113
8.3 高并发写 114
8.3.1 策略1:数据分片 114
8.3.2 策略2:任务分片 115
8.3.3 策略3:异步化 117
8.3.4 策略4:批量 123
8.3.5 策略5:串行化+多进程单线程+异步I/O 124
8.4 容量规划 125
8.4.1 吞吐量、响应时间与并发数 125
8.4.2 压力测试与容量评估 127
第9章 高可用与稳定性 129
9.1 多副本 129
9.2 隔离、限流、熔断和降级 130
9.3 灰度发布与回滚 135
9.4 监控体系与日志报警 136
第10章 事务一致性 138
10.1 随处可见的分布式事务问题 138
10.2 分布式事务解决方案汇总 139
10.2.1 2PC 139
10.2.2 *终一致性(消息中间件) 141
10.2.3 TCC 145
10.2.4 事务状态表+调用方重试+接收方幂等 147
10.2.5 对账 148
10.2.6 妥协方案:弱一致性+基于状态的补偿 149
10.2.7 妥协方案:重试+回滚+报警+人工修复 151
10.2.8 总结 152
第11章 多副本一致性 153
11.1 高可用且强一致性到底有多难 153
11.1.1 Kafka的消息丢失问题 153
11.1.2 Kafka消息错乱问题 156
11.2 Paxos算法解析 158
11.2.1 Paxos解决什么问题 158
11.2.2 复制状态机 161
11.2.3 一个朴素而深刻的思想 163
11.2.4 Basic Paxos算法 164
11.2.5 Multi Paxos算法 167
11.3 Raft算法解析 169
11.3.1 为“可理解性”而设计 169
11.3.2 单点写入 170
11.3.3 日志结构 171
11.3.4 阶段1:Leader选举 174
11.3.5 阶段2:日志复制 176
11.3.6 阶段3:恢复阶段 177
11.3.7 安全性保证 177
11.4 Zab算法解析 180
11.4.1 Replicated State Machine vs. Primary-Backup System 180
11.4.2 zxid 182
11.4.3 “序”:乱序提交 vs. 顺序提交 182
11.4.4 Leader选举:FLE算法 184
11.4.5 正常阶段:2阶段提交 186
11.4.6 恢复阶段 186
11.5 三种算法对比 187
第12章 CAP理论 189
12.1 CAP理论的误解 189
12.2 现实世界不存在“强一致性”(PACELC理论) 190
12.3 典型案例:分布式锁 192
第4部分 业务架构之道
第13章 业务意识 196
13.1 产品经理vs.需求分析师 196
13.2 什么叫作一个“业务” 198
13.3 “业务架构”的双重含义 199
13.4 “业务架构”与“技术架构”的区分 200
第14章 业务架构思维 202
14.1 “伪”分层 202
14.2 边界思维 204
14.3 系统化思维 205
14.4 利益相关者分析 206
14.5 非功能性需求分析(以终为始) 208
14.6 视角(横看成岭侧成峰) 209
14.7 抽象 210
14.8 建模 213
14.9 正交分解 215
第15章 技术架构与业务架构的融合 218
15.1 各式各样的方法论 218
15.2 为什么要“领域驱动” 218
15.3 “业务流程”不等于“系统流程” 221
15.4 为何很难设计一个好的领域模型 222
15.5 领域驱动设计与微服务架构的“合” 223
15.6 领域驱动设计与读写分离(CQRS) 224
15.7 业务分层架构模式 225
15.8 管道—过滤器架构模式 226
15.9 状态机架构模式 226
15.10 业务切面/业务闭环架构模式 228
第5部分 从架构到技术管理
第16章 个人素质的提升 232
16.1 能力模型 232
16.2 影响力的塑造 234
第17章 团队能力的提升 237
17.1 不确定性与风险把控 237
17.2 以价值为中心的管理 239
17.3 团队培养 241
作者简介
余春龙,中科院软件所计算机硕士毕业。热衷于高并发高可用架构、业务建模、领域驱动设计,在十年的工作中,经历过游戏、社交、广告、电商等各种类型的项目,积累了较丰富的工程经验。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥37.7¥65.0 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥48.2¥79.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0