[套装书]凤凰架构:构建可靠的大型分布式系统+架构师的自我修炼:技术、架构和未来(2册)

作者
周志明 李智慧
丛书名
出版社
机械工业出版社
ISBN
9782106221755
简要
简介
内容简介书籍计算机书籍 ---------------------------8081487 - 凤凰架构:构建可靠的大型分布式系统--------------------------- 内容简介 这是一本从架构视角讲解如何构建大型分布式系统的著作,是超级畅销书《深入理解Java虚拟机》的作者周志明多年架构和研发经验的总结,得到了多位行业资深架构专家的联袂推荐。 全书共16章,分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分。 第1部分 演进中的架构(第1章) 着重介绍了软件开发历史中多种主流架构风格出现的契机、解决的问题以及带来的新缺陷。 第二部分 架构师的视角(第2~5章) 总结了一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等。 第三部分 分布式的基石(第6~10章) 重点讨论了“不同架构风格是应该在技术规范上统一,还是由应用系统自行解决”这个问题,给出了解决思路、方法和常见工具。 第四部分 不可变基础设施(第11~15章) 重点讲解了基础设施不变性的目的、原理与实现途径,包括虚拟化容器、容器间网络、持久化存储、资源与调度、服务网格等内容。 第五部分 技术方法论(第16章) 面向技术决策者集中讨论了与分布式、微服务、架构等相关的理论话题,将解决问题的能力归纳、总结、升华为方法论。 全书以实践为导向,一个案例贯穿全书,同时给出了基于Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程。 . ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 本书共38章,分四个部分。 第 一部分是架构师的基础知识修炼。软件的基础知识原理主要是操作系统、数据结构、数据库原理等,书中会从常见的问题入手,直达这些基础技术本质的原理,并覆盖这些基础技术的关键技术点,帮助读者理解这些基础技术原理和日常开发工作的关联关系,对这些基础技术有一个全新的认知。 第二部分是架构师的程序设计修炼。讲述如何设计一个强大灵活、易复用、易维护的软件,在这个过程中,应该依赖哪些工具和方法,遵循哪些原则和思想,使用哪些模式和手段。 第三部分是架构师的架构方法修炼。围绕目前主要的互联网分布式架构以及大数据、物联网架构分析这些架构背后的原理,详解它们都遵循了怎样的驱动力和设计思想,以及如何通过这些技术实现系统的高可用和高性能。 第四部分是架构师的思维修炼。软件开发是一个实践性很强的活动,如果只是学习技术,那就是在纸上谈兵。只有将知识技能应用到工作实践中,才能真正体会到技术的关键点在哪里。如何在工作中处理好各种关系,得到充分的授权和信任,在工作中实践自己的技术思想,并为公司创造更多的价值,使自己的技术成长和职业发展进入互相促进的正向通道,也是架构师需要修炼与提升的。
目录
[套装书具体书目]
8079921 - 架构师的自我修炼:技术、架构和未来 - 9787111679363 - 机械工业出版社 - 定价 89
8081487 - 凤凰架构:构建可靠的大型分布式系统 - 9787111683919 - 机械工业出版社 - 定价 99



---------------------------8081487 - 凤凰架构:构建可靠的大型分布式系统---------------------------


赞誉
自序
前言
第一部分 演进中的架构
第1章 服务架构演进史2
1.1 原始分布式时代2
1.2 单体系统时代5
1.3 SOA时代8
1.4 微服务时代12
1.5 后微服务时代16
1.6 无服务时代19
第二部分 架构师的视角
第2章 访问远程服务24
2.1 远程服务调用24
2.1.1 进程间通信24
2.1.2 通信的成本26
2.1.3 三个基本问题28
2.1.4 统一的RPC30
2.1.5 分裂的RPC32
2.2 REST设计风格34
2.2.1 理解REST35
2.2.2 RESTful的系统37
2.2.3 RMM41
2.2.4 不足与争议45
第3章 事务处理48
3.1 本地事务49
3.1.1 实现原子性和持久性50
3.1.2 实现隔离性54
3.2 全局事务57
3.3 共享事务62
3.4 分布式事务64
3.4.1 CAP与ACID64
3.4.2 可靠事件队列67
3.4.3 TCC事务69
3.4.4 SAGA事务72
第4章 透明多级分流系统75
4.1 客户端缓存76
4.1.1 强制缓存77
4.1.2 协商缓存79
4.2 域名解析81
4.3 传输链路83
4.3.1 连接数优化84
4.3.2 传输压缩88
4.3.3 快速UDP网络连接90
4.4 内容分发网络92
4.4.1 路由解析92
4.4.2 内容分发95
4.4.3 CDN应用96
4.5 负载均衡97
4.5.1 数据链路层负载均衡99
4.5.2 网络层负载均衡101
4.5.3 应用层负载均衡104
4.5.4 均衡策略与实现106
4.6 服务端缓存107
4.6.1 缓存属性108
4.6.2 缓存风险117
第5章 架构安全性120
5.1 认证121
5.1.1 认证的标准121
5.1.2 认证的实现128
5.2 授权129
5.2.1 RBAC130
5.2.2 OAuth 2133
5.3 凭证140
5.3.1 Cookie-Session140
5.3.2 JWT142
5.4 保密147
5.4.1 保密的强度147
5.4.2 客户端加密148
5.4.3 密码存储和验证149
5.5 传输151
5.5.1 摘要、加密与签名151
5.5.2 数字证书154
5.5.3 传输安全层157
5.6 验证160
第三部分 分布式的基石
第6章 分布式共识166
6.1 Paxos168
6.1.1 Paxos的诞生169
6.1.2 算法流程169
6.1.3 工作实例172
6.2 Multi Paxos174
6.3 Gossip协议178
第7章 从类库到服务180
7.1 服务发现180
7.1.1 服务发现的意义181
7.1.2 可用与可靠182
7.1.3 注册中心实现185
7.2 网关路由186
7.2.1 网关的职责186
7.2.2 网络I/O模型188
7.2.3 BFF网关190
7.3 客户端负载均衡191
7.3.1 客户端负载均衡器193
7.3.2 代理负载均衡器194
7.3.3 地域与区域196
第8章 流量治理198
8.1 服务容错198
8.1.1 容错策略199
8.1.2 容错设计模式201
8.2 流量控制209
8.2.1 流量统计指标210
8.2.2 限流设计模式211
8.2.3 分布式限流215
第9章 可靠通信217
9.1 零信任网络217
9.1.1 零信任安全模型的特征218
9.1.2 Google的实践探索220
9.2 服务安全222
9.2.1 建立信任222
9.2.2 认证223
9.2.3 授权227
第10章 可观测性230
10.1 事件日志233
10.1.1 输出233
10.1.2 收集与缓冲235
10.1.3 加工与聚合236
10.1.4 存储与查询237
10.2 链路追踪239
10.2.1 追踪与跨度239
10.2.2 数据收集240
10.2.3 追踪规范化243
10.3 聚合度量244
10.3.1 指标收集245
10.3.2 存储查询248
10.3.3 监控预警250
第四部分 不可变基础设施
第11章 虚拟化容器254
11.1 容器的崛起256
11.1.1 隔离文件:chroot256
11.1.2 隔离访问:名称空间257
11.1.3 隔离资源:cgroups258
11.1.4 封装系统:LXC259
11.1.5 封装应用:Docker260
11.1.6 封装集群:Kubernetes263
11.2 以容器构建系统266
11.2.1 隔离与协作266
11.2.2 韧性与弹性271
11.3 以应用为中心的封装275
11.3.1 Kustomize276
11.3.2 Helm与Chart277
11.3.3 Operator与CRD279
11.3.4 开放应用模型284
第12章 容器间网络288
12.1 Linux网络虚拟化288
12.1.1 网络通信模型289
12.1.2 干预网络通信291
12.1.3 虚拟化网络设备294
12.1.4 容器间通信304
12.2 容器网络与生态306
12.2.1 CNM与CNI306
12.2.2 CNM到CNI308
12.2.3 网络插件生态310
第13章 持久化存储314
13.1 Kubernetes存储设计314
13.1.1 Mount和Volume316
13.1.2 静态存储分配318
13.1.3 动态存储分配322
13.2 容器存储与生态325
13.2.1 Kubernetes存储架构325
13.2.2 FlexVolume与CSI327
13.2.3 从In-Tree到Out-of-Tree329
13.2.4 容器插件生态331
第14章 资源与调度336
14.1 资源模型336
14.2 服务质量与优先级337
14.3 驱逐机制340
14.4 默认调度器342
第15章 服务网格346
15.1 透明通信的涅槃347
15.1.1 通信成本347
15.1.2 数据平面352
15.1.3 控制平面358
15.2 服务网格与生态360
15.2.1 服务网格接口361
15.2.2 通用数据平面API363
15.2.3 服务网格生态364
第五部分 技术方法论
第16章 向微服务迈进368
16.1 目的:微服务的驱动力369
16.2 前提:微服务需要的条件371
16.3 边界:微服务的粒度375
16.4 治理:理解系统复杂性377
16.4.1 静态的治理378
16.4.2 发展的治理380
附录A 技术演示工程实践383
附录B 部署Kubernetes集群402



---------------------------8079921 - 架构师的自我修炼:技术、架构和未来---------------------------


前言
第一部分  架构师的基础知识修炼
第1章 操作系统原理:程序是如何运行和崩溃的 2
1.1 程序是如何运行起来的 2
1.2 一台计算机如何同时处理数以百计的任务 4
1.3 系统为什么会变慢,为什么会崩溃 5
1.4 小结 7
第2章 数据结构原理:Hash表的时间复杂度为什么是O(1) 8
2.1 数组的结构 8
2.2 链表的结构 9
2.3 Hash表的结构 10
2.4 栈的结构 12
2.5 队列的结构 13
2.6 树的结构 14
2.7 小结 14
第3章 Java虚拟机原理:JVM为什么被称为机器 16
3.1 JVM的构造 17
3.2 JVM的垃圾回收 19
3.3 Web应用程序在JVM中的执行过程 22
3.4 小结 24
第4章 网络编程原理:一个字符的互联网之旅 25
4.1 DNS域名解析原理 26
4.2 CDN 27
4.3 HTTP的结构 28
4.4 TCP的结构 29
4.5 链路层负载均衡原理 32
4.6 小结 33
第5章 文件系统原理:用1分钟遍历一个100TB的文件 34
5.1 硬盘结构原理 35
5.2 文件系统原理 36
5.3 RAID硬盘阵列原理 37
5.4 分布式文件系统架构原理 39
5.5 小结 40
第6章 数据库原理:SQL为什么要预编译 42
6.1 数据库架构与SQL执行过程 43
6.2 使用PrepareStatement执行SQL的好处 45
6.3 数据库文件存储与索引工作原理 46
6.4 小结 48
第7章 编程语言原理:面向对象编程是编程的终极形态吗 49
7.1 软件编程的远古时代 49
7.2 机器与汇编语言时代 51
7.3 高级编程语言时代 51
7.4 面向对象编程时代 52
7.5 编程语言的未来 53
7.6 小结 54
第二部分  架构师的程序设计修炼
第8章 软件设计的方法论:软件为什么要建模 56
8.1 什么是软件建模 57
8.2 4+1视图模型 58
8.3 UML建模 59
8.4 小结 60
第9章 软件设计实践:使用UML完成一个设计文档 61
9.1 用类图设计对象模型 61
9.2 用序列图描述系统调用 62
9.3 用组件图进行模块设计 63
9.4 用部署图描述系统物理架构 64
9.5 使用用例图进行需求分析 65
9.6 用状态图描述对象状态变迁 66
9.7 用活动图描述调用流程 66
9.8 使用合适的UML模型构建一个软件设计文档 67
9.9 软件架构设计文档示例模板 68
9.10 小结 74
第10章 软件设计的目的:糟糕的程序差在哪里 75
10.1 糟糕的设计有多糟糕 76
10.2 一个设计“腐坏”的例子 77
10.3 解决之道 78
10.4 小结 80
第11章 软件设计的开闭原则:不修改代码却能实现需求变更 81
11.1 什么是开闭原则 81
11.2 一个违反开闭原则的例子 82
11.3 使用策略模式实现开闭原则 84
11.4 使用适配器模式实现开闭原则 85
11.5 使用观察者模式实现开闭原则 86
11.6 使用模板方法模式实现开闭原则 88
11.7 小结 89
第12章 软件设计的依赖倒置原则:不依赖代码却可以复用它的功能 91
12.1 依赖倒置原则 91
12.2 依赖倒置的关键是接口所有权的倒置 93
12.3 使用依赖倒置来实现高层模块复用 94
12.4 小结 96
第13章 软件设计的里氏替换原则:正方形可以继承长方形吗 97
13.1 里氏替换原则 98
13.2 一个违反里氏替换原则的例子 99
13.3 正方形可以继承长方形吗 100
13.4 子类不能比父类更严格 101
13.5 小结 102
第14章 软件设计的单一职责原则:一个类文件打开后最好不要超过一屏 104
14.1 单一职责原则 107
14.2 一个违反单一职责原则的例子 107
14.3 从Web应用架构演进看单一职责原则 108
14.4 小结 110
第15章 软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法 112
15.1 接口隔离原则 113
15.2 一个使用接口隔离原则优化的例子 114
15.3 接口隔离原则在迭代器设计模式中的应用 117
15.4 小结 117
第16章 设计模式基础:不会灵活应用设计模式,就没有掌握面向对象编程 119
16.1 面向对象编程的本质是多态 119
16.2 设计模式的精髓是对多态的使用 121
16.3 小结 123
第17章 设计模式应用:编程框架中的设计模式 125
17.1 什么是框架 125
17.2 Web容器中的设计模式 127
17.3 JUnit中的设计模式 129
17.4 小结 132
第18章 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应 133
18.1 反应式编程 135
18.2 反应式编程框架Flower的基本原理 135
18.3 反应式编程框架Flower的设计方法 138
18.4 反应式编程框架Flower的落地效果 140
18.5 小结 141
第19章 组件设计原则:组件的边界在哪里 143
19.1 组件内聚原则 144
19.2 组件耦合原则 145
19.3 小结 147
第20章 领域驱动设计:35岁的程序员应该写什么样的代码 148
20.1 领域模型模式 149
20.2 领域驱动设计 151
20.3 小结 154
第三部分  架构师的架构方法修炼
第21章 分布式架构:如何应对高并发的用户请求 156
21.1 垂直伸缩与水平伸缩 157
21.2 互联网分布式架构演化 157
21.3 小结 163
第22章 缓存架构:减少不必要的计算 165
22.1 通读缓存 166
22.2 旁路缓存 168
22.3 缓存注意事项 171
22.4 小结 173
第23章 异步架构:避免互相依赖的系统间耦合 174
23.1 使用消息队列实现异步架构 175
23.2 消息队列异步架构的好处 178
23.3 小结 180
第24章 负载均衡架构:用10行代码实现一个负载均衡服务 181
24.1 HTTP重定向负载均衡 181
24.2 DNS负载均衡 183
24.3 反向代理负载均衡 184
24.4 IP负载均衡 184
24.5 数据链路层负载均衡 186
24.6 小结 187
第25章 数据存储架构:改善系统的数据存储能力 188
25.1 数据库主从复制 188
25.2 数据库分片 190
25.3 关系数据库的混合部署 193
25.4 NoSQL数据库 196
25.5 小结 197
第26章 搜索引擎架构:瞬间完成海量数据检索 199
26.1 搜索引擎倒排索引 199
26.2 搜索引擎结果排序 202
26.3 小结 205
第27章 微服务架构:微服务究竟是“灵丹”还是“毒药” 206
27.1 单体架构的困难和挑战 206
27.2 微服务框架原理 208
27.3 微服务架构的落地实践 210
27.4 小结 211
第28章 高性能架构:除了代码,还可以在哪些地方优化性能 212
28.1 性能指标 212
28.2 性能测试 213
28.3 性能优化 215
28.4 小结 219
第29章 高可用架构:淘宝应用升级时,为什么没有停机 220
29.1 高可用的度量 221
29.2 高可用的架构 222
29.3 小结 225
第30章 安全性架构:为什么说用户密码泄露是程序员的问题 227
30.1 数据加密与解密 227
30.2 HTTP攻击与防护 230
30.3 小结 233
第31章 大数据架构:思想和原理 234
31.1 HDFS分布式文件存储架构 235
31.2 MapReduce大数据计算架构 236
31.3 Hive大数据仓库架构 238
31.4 Spark快速大数据计算架构 240
31.5 大数据流计算架构 242
31.6 小结 242
第32章 AI与物联网架构:从智能引擎到物联网平台 243
32.1 大数据平台架构 244
32.2 智能推荐算法 245
32.3 物联网大数据架构 249
32.4 小结 250
第33章 区块链技术架构:区块链到底能做什么 251
33.1 比特币与区块链原理 251
33.2 联盟链与区块链的企业级应用 255
33.3 小结 257
第四部分  架构师的思维修炼
第34章 技术修炼之道:同样工作十几年,为什么有的人成为资深架构师,有的人失业 260
34.1 德雷福斯模型 261
34.2 如何在工作中成长 263
34.3 小结 264
第35章 技术进阶之道:你和世界上顶级的程序员差几个等级 265
35.1 软件技术的生态江湖与等级体系 265
35.2 技术进阶之捷径 267
35.3 小结 269
第36章 技术落地之道:你真的知道自己要解决的问题是什么吗 270
36.1 确定会议真正要解决的问题是什么 271
36.2 不需要去解决别人的问题,提醒他问题的存在即可 272
36.3 去解决那些被人们习以为常而忽略了的问题 273
36.4 小结 273
第37章 技术沟通之道:如何解决问题 275
37.1 让有能力解决问题的人感受到问题的存在 275
37.2 “直言有讳” 276
37.3 想解决一个大家都不关注的问题,可以等问题变得更糟 277
37.4 如果不填老师想要的答案,你就得不了分 278
37.5 小结 278
第38章 技术管理之道:真的要转管理吗 280
38.1 彼得定律 281
38.2 用目标驱动 282
38.3 小结 283
附录A 软件开发技术的第一性原理 284
附录B 我的架构师成长之路 287
附录C 无处不在的架构之美 293
附录D 软件架构师之道 298

推荐

车牌查询
桂ICP备20004708号-3