新書推薦:
《
思想的光照:马寅初先生诞辰140周年纪念文集
》
售價:NT$
398.0
《
入门级AI机器人制作与图形化编程
》
售價:NT$
347.0
《
怎样上好常态课:小学数学教学24例
》
售價:NT$
319.0
《
祈愿女神
》
售價:NT$
325.0
《
新反智时代(历史学堂)
》
售價:NT$
374.0
《
索恩丛书·死敌:太平洋战争,1944~1945
》
售價:NT$
704.0
《
天历探原
》
售價:NT$
301.0
《
正义的刻度:如何用经济学思维衡量公平正义?
》
售價:NT$
403.0
|
編輯推薦: |
性能的重要性越来越高,但是要想真正实现高性能,必须具有架构思维,从多个层面进行设计和优化。
在AI时代,具有性能 架构这种综合性能力的技术人将成为企业中的高薪者。
本书以方法论为基础,站在架构层面,以网络、通信、客户端、单服务器、数据库为优化方向,深入解读软件全栈优化解决方案,内含4大主流产品优化案例。可以帮助你成为企业中的高端人才。
|
內容簡介: |
这是一本从点、线、面、体4个维度深度解读分布式系统性能优化方法的专业工具书,更是一套全栈性能优化解决方案。其中,“点”指的是代码中的单个语句或函数,“线”指的是代码中的执行路径,“面”则上升到模块、子系统级别,“体”则指的是整个系统。4个维度对应4个不同的优化层次,只有这4个维度配合,才可以真正实现分布式系统的整体性优化。
全书融合了5位长期(最长有近30年工作经验)从事软件开发及优化工作的一线专家的实践经验和深刻理解,不仅从理论层面深入解读了性能优化的本质,还从软件开发整体流程的角度构建性能优化体系和评估策略。全书本着“没有jue对的好设计,只有适合的设计”的理念展开介绍,不仅提供可落地的技巧,还直指本质,让读者知其然并知其所以然,从而设计出适合自己的性能优化方案。
本书共分为17章。
第1~4章 主要介绍作者对性能优化的理解以及性能优化体系及评测方法,这部分的目的是帮读者形成性能优化方法论,其中包括架构的本质、性能优化的本质、性能优化策略、性能优化4个维度、影响性能的因素、性能测试工具、性能测试方法和流程等重点内容。
第5~9章 对网络、通信、客户端、单服务实体、数据库这5个性能约束特点进行深度剖析,并给出具体的优化方法与策略。
第10章和第11章分别对缓存系统、消息队列在性能优化中的应用进行解读,这两个是实现高性能的途径,也是研发人员必须掌握的技巧。
第12~15章通过对智能音箱、网上商城、营销红包、交易系统4个典型案例性能设计与优化的全面解读,帮读者学以致用,并更深刻理解性能优化的原理。
第16章和第17章分别介绍全链路观测或压测的具体实现方法与应用场景,以及云原生技术对性能的影响。
|
關於作者: |
于君泽 某大型互联网公司前资深技术专家,在营销、支付、财务等业务中台方面有丰富的经验。畅销书《深入分布式缓存》 《程序员的三门课》联合作者,《持续架构实践》联合译者,公众号“技术琐话”主理人,独立咨询顾问。培训和咨询内容包括数字化转型、业务中台、持续架构实践、内建质量、异地团队搭建与发展等。
曹洪伟 百度DuerOS原首席布道师,渡鸦原CTO,近30年产研经验,曾就职于美国高通等世界500强企业。创业项目有Mobile SFA、O2O应用商店和大学生发现式移动社交等。作为全栈工匠,对嵌入式系统runtime和应用框架有深刻理解,对驱动、OS、框架、App、前端、后台、分布式系统、数据库、大数据平台、AI应用等均有涉足,对系统高并发、稳定性、性能有体系性见解。目前任诺谛智能的首席架构师,从事AI应用赋能及智能硬件的研发工作,工作之余维护公众号及CSDN博客:wireless_com。
李伟山 某知名人工智能公司前CTO,在数字化、人工智能、电商和金融等领域积累了丰富的平台架构设计经验,擅长组建产品研发团队、塑造部门文化、提升团队效能、打造学习型技术团队。具备丰富的项目管理经验,精通IPD和敏捷开发流程管理。
秦金卫(网名kimmking) Apache Dubbo、ShardingSphere PMC,某集团前高级总监,某商业银行研发中心前负责人。关注互联网、电商、金融、支付、区块链等领域,有近20年研发管理和架构经验。《微服务架构实战》 《JVM核心技术32讲》作者之一。近3年参与2家国有大行的分布式新核心项目,主导了分布式技术平台、微服务、单元化等的设计与实现。目前作为独立顾问从事金融行业数字化转型、分布式微服务架构、单元化架构、开源治理与信创、非功能体系建设等相关的咨询与培训工作。
陈龙泉 某大型互联网公司技术专家,有十多年的大型互联网项目开发经验。喜欢对技术进行深度思考,在性能优化、线上故障排查、系统稳定性建设等领域有丰富的实践经验。
|
目錄:
|
目 录
前言 性能是软件非功能特性的基本面
认知篇
第1章 软件架构的时空观 2
1.1 软件架构的时空定义 2
1.2 软件架构的分类 3
1.2.1 体系结构上的分类 3
1.2.2 流程决策上的架构分类 4
1.3 软件架构设计的原则与模式 5
1.3.1 软件架构设计的原则 5
1.3.2 软件架构设计的模式 6
1.4 软件架构的常用技术栈 8
1.5 本章小结 10
第2章 软件性能的时空观 11
2.1 软件性能的宏观多维模型 11
2.1.1 系统边界 12
2.1.2 内部结构 13
2.1.3 外部效应 13
2.1.4 连接输入 14
2.1.5 本节小结 14
2.2 软件性能的一般含义 14
2.3 软件性能的时空视角 15
2.3.1 系统性能的时间指标 16
2.3.2 软件性能的空间指标 17
2.3.3 系统性能指标的时空关联 18
2.3.4 常见的软件性能指标 18
2.4 软件性能的描述方式与工具 19
2.4.1 软件性能的时间描述——
时序图 20
2.4.2 软件性能的空间描述——
组件描述直方图 20
2.5 软件的性能测试与监控 20
2.5.1 性能测试 21
2.5.2 监控性能拐点 21
2.5.3 容量规划 22
2.6 本章小结 22
第3章 软件性能优化体系 23
3.1 软件性能优化策略 23
3.1.1 控制资源需求相关因素 24
3.1.2 管理资源相关因素 25
3.2 基于“点”的性能优化 27
3.3 基于“线”的性能优化 28
3.4 基于“面”的性能优化 30
3.5 基于“体”的性能优化 33
3.5.1 第一阶段:常规优化 34
3.5.2 第二阶段:使用缓存与
读写分离 34
3.5.3 第三阶段:异步化与事务 35
3.6 性能优化的PDCA 37
3.7 性能与其他非功能要素 38
3.8 本章小结 39
第4章 性能测试与评估 40
4.1 软件性能的度量 40
4.1.1 性能测试的目的及意义 40
4.1.2 性能测试的度量指标 42
4.1.3 常见基础设施性能指标 44
4.2 性能测试常用工具 45
4.2.1 性能测试场景 45
4.2.2 性能测试工具简介 47
4.2.3 性能测试工具选择 51
4.3 性能测试的方法、误区和流程 53
4.3.1 性能测试的方法 53
4.3.2 性能测试的误区 54
4.3.3 性能测试的流程 56
4.4 性能测试的结果分析与评估 61
4.4.1 施压机器的指标观测 62
4.4.2 软件的指标分析 64
4.4.3 软件的事后评估 69
4.5 本章小结 71
实践篇
第5章 网络性能 74
5.1 互联网的性能问题 74
5.1.1 规模问题 75
5.1.2 距离瓶颈 75
5.2 内容分发的方式与性能 75
5.2.1 集中托管 75
5.2.2 数据中心 76
5.2.3 分布式CDN 76
5.2.4 P2P网络 77
5.3 CDN的选择 77
5.4 应用层的网络性能优化 78
5.4.1 减少传输层开销 79
5.4.2 寻找更好的路由 79
5.4.3 内容预取 79
5.4.4 使用压缩和增量编码 79
5.4.5 边缘组装 80
5.4.6 边缘计算 80
5.5 计算密集型应用的性能提升——
高性能网络 80
5.5.1 Inf iniband网络与RDMA 81
5.5.2 RDMA的关键特性 82
5.5.3 RDMA的上层接口 83
5.5.4 RDMA的底层实现 85
5.5.5 RDMA的性能优势与
主要应用场景 86
5.6 网络性能观测工具 86
5.6.1 网络可观测性建设 87
5.6.2 网络分析工具 88
5.7 本章小结 89
第6章 通信性能 90
6.1 面向互联网的软件 90
6.1.1 网络应用并非只是计算 90
6.1.2 计算中的通信视角 91
6.1.3 网络应用的通信视角 92
6.2 通信协议的分层设计与优化 94
6.2.1 通信协议的分层设计 94
6.2.2 通信协议的优化 95
6.3 软件通信中的数据组织 95
6.3.1 XML、JSON和
Protocol Buffer 96
6.3.2 性能视角的数据包大小 96
6.4 软件通信中的复用机制 97
6.5 软件通信的纠错处理 98
6.5.1 前向纠错与重传纠错 98
6.5.2 重传机制 99
6.6 软件通信中的流量控制 100
6.6.1 反向压力 100
6.6.2 减负载 100
6.6.3 熔断 101
6.7 通信协议的优化示例:基于
HTTP的性能优化 102
6.7.1 链路复用 102
6.7.2 数据压缩 103
6.7.3 SSL加速 103
6.8 本章小结 103
第7章 客户端性能/前端性能
优化 105
7.1 性能优化指标 105
7.1.1 以用户为中心的性能指标 106
7.1.2 三大核心指标 107
7.1.3 前端性能测量工具汇总 112
7.2 前端系统优化 113
7.2.1 HTTP中的性能优化 113
7.2.2 代码压缩 116
7.2.3 JavaScript中的性能优化 117
7.2.4 Webpack优化 121
7.2.5 Vue项目性能优化 128
7.3 客户端系统优化 131
7.3.1 Flutter项目优化 131
7.3.2 PC端QT项目优化 138
7.3.3 客户端性能监控的思考 139
7.4 本章小结 140
第8章 单服务实体的性能优化 141
8.1 单服务实体性能问题定位的
简单策略 141
8.1.1 度量指标 142
8.1.2 资源列表 142
8.1.3 功能模块图 143
8.1.4 度量方法 143
8.1.5 软件资源 143
8.1.6 性能定位的简单策略 144
8.2 操作系统的配置优化 144
8.3 代码性能的基础保障——
静态分析 146
8.4 API的性能约定 147
8.4.1 面向API的性能分类 147
8.4.2 API的性能约定 149
8.5 资源池的应用 151
8.5.1 连接池 152
8.5.2 线程池 155
8.5.3 内存池 156
8.6 本章小结 157
第9章 数据库性能 158
9.1 从数据库技术发展看性能问题 158
9.1.1 数据库对系统性能的影响 158
9.1.2 数据库技术的整体发展 159
9.1.3 关系数据库的诸多挑战 159
9.1.4 NoSQL运动的百花齐放 164
9.1.5 分布式演进的步步为营 164
9.1.6 分布式数据库的风起云涌 168
9.2 面向分布式应用的数据库
性能分析 170
9.2.1 制定数据库性能规划目标 170
9.2.2 通过压测了解数据库性能 170
9.2.3 分析应用数据库性能瓶颈 171
9.2.4 数据库性能优化一般方法 171
9.3 MySQL的常见优化方法 174
9.3.1 操作系统参数优化 174
9.3.2 数据库配置优化 175
9.3.3 数据库设计优化 178
9.3.4 SQL查询优化 184
9.3.5 SQL写入优化 187
9.3.6 应用连接池优化 187
9.4 本章小结 189
第10章 缓存的应用 190
10.1 无处不在的缓存 191
10.2 客户端缓存 192
10.2.1 页面缓存 192
10.2.2 浏览器缓存 194
10.2.3 App上的缓存 195
10.3 网络端缓存 196
10.3.1 Web代理缓存 196
10.3.2 边缘缓存 197
10.4 服务端缓存 198
10.4.1 平台级缓存 198
10.4.2 分布式缓存的应用 198
10.5 数据库缓存 199
10.5.1 数据库缓存:MySQL的
查询缓存 199
10.5.2 检验Query Cache的
合理性 200
10.5.3 数据库缓存:InnoDB的
缓存性能 200
10.6 营销场景案例:优惠券
(红包)发放与核销 202
10.7 电商案例:应用多级缓存
模式支撑海量读服务 204
10.7.1 多级缓存介绍 204
10.7.2 如何缓存数据 205
10.8 本章小结 208
第11章 消息队列 210
11.1 消息队列概述 210
11.2 消息队列使用场景 211
11.2.1 削峰填谷 211
11.2.2 应用解耦 213
11.2.3 异步处理 213
11.2.4 分布式事务一致性 214
11.2.5 大数据分析 218
11.3 消息中间件的选型 219
11.3.1 RocketMQ 221
11.3.2 RabbitMQ 222
11.3.3 ActiveMQ 223
11.3.4 Kafka 223
11.4 本章小结 224
案例篇
第12章 小度音箱的性能优化 228
12.1 智能音箱的组成和系统架构 228
12.1.1 对话式AI操作系统——
DuerOS 229
12.1.2 智能音箱的典型工作
流程 231
12.2 小度音箱的性能分析 232
12.2.1 核心的性能指标 232
12.2.2 核心指标的度量 232
12.3 小度音箱系统的网络拓扑
优化 234
12.4 小度音箱系统的应用协议
优化 234
12.5 小度音箱系统的业务逻辑
优化 235
12.5.1 智能音箱业务中的
延时分布 236
12.5.2 预测预取 236
12.5.3 连接池的应用 237
12.6 小度音箱系统的缓存应用 238
12.7 本章小结 238
第13章 网上商城的性能优化 239
13.1 网上商城的架构与业务流程 239
13.1.1 核心模块 242
13.1.2 核心业务 242
13.2 商城系统的性能指标 244
13.3 网上商城核心模块的性能
优化 245
13.3.1 商品管理 245
13.3.2 用户管理 248
13.3.3 购物车管理 251
13.3.4 订单管理 254
13.3.5 秒杀系统设计 257
13.4 本章小结 274
第14章 典型并发场景——
营销红包的性能优化 275
14.1 类支付宝红包系统的业务流
和挑战 275
14.1.1 类支付宝红包业务动作
和潜在技术挑战分析 275
14.1.2 讨论方案:大商户红包
热点问题 276
14.1.3 多级缓存策略 277
14.1.4 讨论方案:单笔支付咨询
多红包问题 277
14.2 类微信红包系统的业务流和
挑战 278
14.2.1 类微信红包业务动作
分析 278
14.2.2 异步化 278
14.2.3 SET化:分拆资源 279
14.2.4 无并发写的实践 279
14.3 预加载和考虑备案 280
14.4 性能优化策略与案例的关系 281
14.5 本章小结 282
第15章 支付系统/核心交易
系统的性能优化 283
15.1 支付系统/核心交易系统的
架构特点 284
15.1.1 支付系统的作用 284
15.1.2 支付系统的架构 285
15.2 交易系统的链路优化 291
15.3 对账系统的设计 302
15.3.1 对账系统概述 302
15.3.2 对账需求分析 304
15.3.3 对账流程和规则设计 305
15.3.4 对账系统实现说明 311
15.4 本章小结 312
扩展篇
第16章 全链路性能压测 314
16.1 全链路性能压测的背景与
价值 314
16.2 端到端全链路监控分析 315
16.2.1 APM技术 316
16.2.2 Apache Skywalking 316
16.3 线上流量复制与染色 318
16.3.1 流量复制 318
16.3.2 流量复制工具 318
16.3.3 流量染色 321
16.4 全链路压测的数据安全与
隔离 321
16.4.1 数据隔离 322
16.4.2 影子库与影子表 322
16.4.3 ShardingSphere的影子库
功能 323
16.5 全链路压测下相关系统的
改造 324
16.5.1 业务系统的改造 324
16.5.2 消息队列的改造 326
16.5.3 外调服务的挡板功能 326
16.5.4 缓存中间件的改造 327
16.6 全链路压测的行业案例 328
16.6.1 滴滴出行的全链路压测 328
16.6.2 美团全链路压测自动化
实践 329
16.6.3 饿了么全链路压测平台 331
16.7 本章小结 331
第17章 云原生技术为性能带来的
机遇与变革 333
17.1 云原生弹性的实现原理 334
17.1.1 Kubernetes的资源类型 334
17.1.2 Kubernetes的资源管理和
调度 339
17.1.3 Kubernetes的资源动态
调整能力 342
17.1.4 Kubernetes的资源碎片
问题 345
17.2 云原生的可观测性 346
17.2.1 可观测性与传统监控的
区别 347
17.2.2 可观测性的维度 349
17.3 云原生要解决的性能问题、
带来的挑战及应对 353
17.3.1 云原生解决了哪些性能
问题 353
17.3.2 云原生带来了哪些新的
挑战 354
17.3.3 如何应对云原生带来的
挑战 355
17.4 本章小结 356
|
內容試閱:
|
前 言
性能是软件非功能特性的基本面
性能是软件系统的一种质量属性,可以定义为“软件系统与其环境交互以获得价值和避免损失的程度”。性能就是在空间资源和时间资源有限的条件下,衡量软件系统正常工作的概率或程度。
狭义上讲,软件系统的性能优化指的是在尽可能少地占用系统资源的前提下,尽可能提高运行速度。
本书首先从性能优化的认知和方法论开始介绍,然后介绍如何建立性能测试与评估的体系。巴斯、克莱门茨和凯兹曼在《软件架构实践》一书中提到,性能是指软件系统满足时间需求的能力。相较国外性能方面的经典著作,本书的重点放在软件系统层面,如对网络、通信、客户端、单服务实体、数据库等方面的性能约束特点进行阐述,提出具体的优化方法与策略,并深入剖析缓存系统、消息队列在性能优化中的应用。
本书还通过具体的实践案例(如智能音箱、商城、营销红包、交易系统等)介绍各种性能设计与优化方法的应用,并解读全链路观测和压测的具体实现方法与应用场景,最后介绍云原生技术对性能的影响。
本书提出性能优化的点、线、面、体方法。其中,“点”指的是代码中的单个语句或函数,可以通过代码级别的优化来提升性能;“线”指的是代码中的执行路径,可以通过对算法和数据结构的优化来提升性能;“面”则上升到模块、子系统级别;“体”则指的是整个系统,可以通过整体性优化来提升性能。
笔者认为,性能是软件非功能特性的基本面。软件性能与稳定性、容量、可用性、扩展性、成本都存在一定的关系。性能低下,系统会被拖慢,服务会堵塞,此时稳定性是一个问题。同时还容易出现级联故障,可用性本身也会受影响。另外,性能与成本、扩展性的关系尤其大。我们知道,对于无状态服务,可以通过添加服务节点的方式来实现持续扩展以满足业务需求。但是,每一个节点都会有成本。通过对设计方案和代码的优化,需要扩展的节点数量可能大大减少,从而降低成本。单节点的容量会大幅度提升。
回到实际工作场景,如高管看报表场景,虽然此时容量低,并发低,用户量很少,但是必须高性能,需要在1s内打开页面并完成渲染,同时要求数据有足够高的准确性。而商品秒杀场景,用户量巨大,需要确保不超卖(数据准确性控制),系统能良好地提供服务(可用性)、快速响应用户,不能被拖垮(高性能 高稳定性)。
没有绝对的好设计,只有适合的设计,因此往往需要在设计上进行取舍。比如数据一致性和可用性之间的取舍:在分布式系统中,为了保证数据的一致性,在进行数据更新时需要等待所有副本都更新完成才能返回响应,这会影响系统的可用性。为了提高系统的可用性,虽然可以采用异步复制的方式,即在更新主副本后,异步更新其他副本,但会牺牲数据的一致性。另外,还有数据一致性和性能之间的取舍、可用性和性能之间的取舍等。
一本书,一旦交付给读者,评判权就不在作者了,希望阅读本书的读者将自己对本书的意见或建议告诉我们。另外,书中存在错漏之处,在所难免,若有发现,也欢迎反馈。我们在公众号“技术琐话”放了一个页面“《性能之道:分布式系统全栈性能优化》读者反馈”,欢迎大家批评和指正。
祝阅读愉快!
|
|