猜你喜欢
高性能架构之道:分布式、并发编程、数据库调优、缓存设计、IO模型、前端优化、高可用

高性能架构之道:分布式、并发编程、数据库调优、缓存设计、IO模型、前端优化、高可用

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

本书是一本理论联系实际的软件架构设计指导书,旨在帮助读者完成高性能软件系统的架构设计工作。书中涉及分布式、并发编程、数据库调优、缓存、IO、前端性能优化等方面的理论知识,并在理论知识的基础上推导其实践技巧。本书最后还运用书中知识完成了一个实际软件项目的架构设计工作。本书适合软件架构师、工程师、学生阅读,以帮助其完善软件开发知识体系和提升其软件架构设计能力。

作者简介

易哥(笔名),毕业于浙江大学、山东大学,高级软件系统架构师、网络工程师、数据库工程师、软件测试工程师、注册电气工程师。在校成绩前1%,获得国家奖学金两次,一等奖学金四次,科技创新大赛一等奖三次,以及五四青年科学奖等。主要科研方向为机器学习、分布式算法、容错算法在无线传感网络中的应用,相关论文获得IEEE通信协会最佳论文奖。曾担任网站技术部门负责人,具有丰富的互联网开发经验。先后设计和实现了众多系统和平台,也是活跃的开源开发者。现专注软件系统架构设计与后端开发,著有书籍《通用源码阅读指导书》《高性能架构之道》等。

前言

近年来,随着移动互联网的蓬勃发展,数字经济迎来爆发式增长。百花齐放的互联网服务已经潜移默化地渗透到人们衣、食、住、行的方方面面。软件服务的运行质量,已经不仅仅影响着用户体验,更成为关系到社会民生的大事。

从信息化、数字化时代迈入智能化时代,软件系统架构也是不断演进的,从传统的单体式,发展到SOA,再到微服务,乃至如今火热的云原生。在不断地以技术创新驱动业务创新的同时,所面临的技术挑战也在与日俱增。对于高并发、大流量的互联网分布式系统来说,一个微小的技术方案差异,就可能导致性能表现天壤之别。而性能问题不仅仅带来了运行成本的增加,更是系统稳定性的隐患。

构建高性能、高可靠的软件系统,是无数开发者的不懈追求。然而软件架构设计是一项高度依赖理论知识体系与工程实践经验的工作,如果没有合适的学习渠道,往往进步缓慢。

本书作者对软件性能有着独到见解,在软件架构设计、性能保障方面均有丰富经验。本书首先站在体系化的理论高度,从软件质量的特性维度出发,推导出软件性能的度量模型,解答了“什么是高性能软件架构”。并且结合多年经验,贯穿完整技术栈介绍了提升软件架构性能的知识与技巧。最后用一个实战案例,帮助读者充分消化理解所学的知识。这是一本值得广大技术爱好者与从业者品读学习的好书。

童庭坚

PerfMa首席技术官

TVP腾讯云最具价值专家

中商联智库顾问

?

2019年我出版了《通用源码阅读指导书——MyBatis源码详解》一书,向大家分享源码阅读相关的知识和技巧。书籍面市后,收到了不错的反响,有的读者表示学到了许多的编程知识,有的读者表示透彻理解了MyBatis的源码,有的读者表示终于迈入了源码阅读的大门。繁体版也在台湾地区上市了,这让我感觉每个坐在电脑前十指连弹的夜都是值得的。

然而,我也发现很多开发者在进行软件架构设计时缺乏体系化的思维,只能在试错、总结中不断摸索提升,痛苦而缓慢。而且,这种提升方式容易留下知识盲区。可是这些问题都很难通过源码阅读来补足。

因此,我决定写一本体系化的架构书籍分享给大家。书籍中不仅要包含理论知识、实践技巧、工程方案,更要将这些知识体系化地连接起来,以帮助大家建立一个完备的知识体系。这就是我写作本书的原因。

在本书中,我们将从“高性能架构”这一点出发,系统地介绍高性能架构相关的各个方面。

书中涉及很多理论知识,我尽量通过示例使得它们简单易懂;书中有很多架构技巧,我尽量通过总结使得它们清晰明了。在本书的最后,还会以书中的架构体系为依据,开发一套高性能的分布式权限系统。

从理论知识到架构技巧,再到项目实践,本书力求给出一套完整的知识体系,指引大家完成高性能系统的架构设计。

第1章介绍了高性能和架构这两个概念。包括高性能代表的具体指标,架构的具体含义与主要内容。

第2章介绍了分流设计。即如何使用内容分发网络、多地址直连、反向代理等手段将用户的请求分散到不同的系统上,从而降低每个系统的并发数。

第3章介绍了与服务并行相关的设计。首先,介绍了并行与并发的概念。其次,在此基础上介绍了集群系统、分布式系统、微服务系统。包括各类系统的特点、实现难点等。服务并行设计能够进一步将系统内的请求进行分流,从而提升系统性能。

第4章介绍了多进行、多线程、多协程等运算并发手段,并给出了相应的实例。尤其是对常见的多线程进行了深入介绍,包括线程的状态转换、应用场景、使用方法、协作方法等。通过运算并发设计,能够显著提升系统的并发能力。

第5章介绍了输入输出设计。首先介绍了IO的分类维度、层级。然后详细介绍了常见的五种IO模型,包括这些模型之间的演化逻辑,并给出了这些模型的实际使用示例。

第6章介绍了数据库设计与优化手段。从最基本的关系型数据库设计开始,介绍了关系型数据库设计的设计范式、反范式。在此基础上,还介绍了各类索引的原理、使用条件,各类锁的特点,死锁的产生与解除,事务及其隔离级别等。在章节的最后还介绍了面向巨量存储数据时数据库该如何优化,以及一些非传统的数据库和数据库中间件。

第7章介绍了缓存设计的方法和技巧。这一章从缓存的收益说起,推导提升缓存收益的方法。然后在此基础上,给出了提升缓存收益的具体实施手段,包括缓存要素的设计、更新机制的设计、清理机制的设计、风险点的处理、位置的设计等。最后还介绍了写缓存的收益计算和实践方案。

第8章介绍了系统可靠性设计的相关知识。首先,介绍了可靠性的概念与具体的衡量指标。其次,在此基础上介绍了提升系统可靠性的手段。这一章将帮助我们构建高可靠性的系统。

第9章介绍了应用保护的基础知识和实践手段。这些知识和手段能提升应用在突发状况下的工作状况。

第10章介绍了前端高性能的相关知识。这是一个相对独立的一章。首先,分析了前端工作过程中的性能关键点。其次,针对这些关键点给出了前端性能优化的手段。具有较强的概括性和指导性。

第11章介绍了架构设计中架构设计风格和软件生命周期这两个方面的基础知识。这些知识将指导我们体系化地进行软件架构工作。

第12章是一个项目实践。本章以前面各章介绍的高性能架构知识为依据,完整地开展了一个高性能软件系统的架构工作,包括理论推导、模型设计、概要设计、详细设计等各个环节,向读者展示了一个完整的高性能架构过程。本章的内容能帮助读者学会如何在实践中灵活运用前面各章的知识。

本书力求理论联系实践,既给出了高性能架构的相关理论与推导,又给出了具体的实施策略与技巧,还通过项目实践完成了一个高性能软件的架构设计。希望大家在阅读本书后,能够建立高性能架构领域的完整知识体系。

致谢

书籍的写作出版要经历很长的过程,从规划到研究,从初稿到终稿,从编辑到面市。在这个过程中,我要感谢许多人。其间,我得到了领导的大力支持和鼓励,得到了业内专家的审阅和指导,也得到了国内外学术及工程领域多位朋友的帮助。性能领域的资深专家童庭坚在百忙中审阅了书籍初稿,并为本书作序。电子工业出版社的众多编辑也为本书倾力付出。

信息技术浪潮带来了巨大的机会,作为软件开发者的你我有幸站到了这一机会面前,我们每个人都应该做出自己的一份贡献,或伟大,或渺小,为自己,为社会。

真心希望本书能够给你带来架构能力和软件开发能力的提升。

加油,愿你我早日成为自己的灿烂星辰!


易哥

2020年10月于上海

?


目录

第1章 高性能架构 001
1.1 软件架构 001
1.2 软件的质量 003
1.3 高性能概述 004
1.4 软件性能指标 005
1.4.1 吞吐量 006
1.4.2 并发数 006
1.4.3 平均响应时间 007
1.4.4 可靠性指标 008
1.5 性能指标之间的关系 009
1.5.1 并发数对吞吐量的影响 009
1.5.2 并发数对平均响应时间的影响 011
1.5.3 平均响应时间对并发数的影响 012
1.5.4 可靠性指标与其他指标的关系 013
1.6 高性能架构总结 013
第2章 分流设计 014
2.1 内容分发网络 014
2.1.1 内容分发网络的结构 015
2.1.2 内容分发网络的原理 017
2.2 多地址直连 019
2.3 反向代理 021
第3章 服务并行设计 026
3.1 并行与并发 026
3.2 集群系统 028
3.2.1 无状态的节点集群 028
3.2.2 单一服务节点集群 029
3.2.3 信息共享的节点集群 031
3.2.4 信息一致的节点集群 032
3.3 分布式系统 034
3.4 微服务系统 036
第4章 运算并发 038
4.1 多进程 038
4.2 多线程 039
4.2.1 线程的状态及转换 039
4.2.2 多线程的应用场景 041
4.2.3 多线程的创建 042
4.2.4 线程池 046
4.2.5 多线程资源协作 050
4.2.6 多线程进度协作 056
4.3 多协程 069
4.4 运算并发总结 072
第5章 输入输出设计 074
5.1 概念梳理 074
5.1.1 同步与异步 074
5.1.2 阻塞与非阻塞 075
5.2 IO模型 077
5.3 IO模型的层级关系 078
5.4 阻塞式IO模型 079
5.5 非阻塞式IO模型 081
5.6 信号驱动式IO模型 082
5.7 复用式IO模型 083
5.8 异步式IO模型 086
5.9 输入输出模型总结 088
第6章 数据库设计与优化 090
6.1 数据库设计概述 090
6.2 关系型数据库设计 091
6.2.1 设计范式介绍 093
6.2.2 反范式设计 101
6.3 索引原理与优化 102
6.3.1 索引的原理 103
6.3.2 索引生效分析 107
6.3.3 索引的使用 109
6.3.4 索引的利弊 116
6.4 数据库引擎 116
6.5 数据库锁 117
6.5.1 乐观锁 118
6.5.2 悲观锁 119
6.6 死锁 120
6.7 事务 122
6.7.1 事务并发导致的问题 123
6.7.2 事务隔离级别 124
6.7.3 自建事务 126
6.8 巨量数据的优化 128
6.8.1 表分区 128
6.8.2 分库分表 132
6.8.3 读写分离 134
6.9 非传统数据库 138
6.9.1 内存数据库 139
6.9.2 列存储数据库 140
6.9.3 面向对象数据库 140
6.9.4 文档数据库 140
6.9.5 图数据库 141
6.10 数据库中间件 141
第7章 缓存设计 143
7.1 缓存的收益 143
7.2 缓存的键与值 145
7.2.1 缓存的键 145
7.2.2 缓存的值 149
7.3 缓存的更新机制 151
7.3.1 时效性更新机制 151
7.3.2 主动更新机制 152
7.4 缓存的清理机制 155
7.4.1 时效式清理 156
7.4.2 数目阈值式清理 157
7.4.3 非强引用式清理 161
7.4.4 清理策略使用实践 164
7.5 缓存的风险点 165
7.5.1 缓存穿透 165
7.5.2 缓存雪崩 166
7.5.3 缓存击穿 166
7.5.4 缓存预热 167
7.6 缓存的位置 168
7.6.1 客户端缓存 169
7.6.2 静态缓存 172
7.6.3 服务缓存 173
7.6.4 数据库缓存 173
7.7 写缓存 174
7.7.1 写缓存的收益问题 175
7.7.2 写缓存实践 175
第8章 可靠性设计 177
8.1 软件可靠性概述 177
8.2 软件可靠性指标 178
8.2.1 失效概率 178
8.2.2 失效强度 179
8.2.3 失效率 179
8.3 模块连接方式与可靠性 179
8.3.1 串联系统的可靠性 179
8.3.2 并联系统的可靠性 180
8.3.3 冗余系统的可靠性 180
8.3.4 模块连接方式的可靠性讨论 181
8.4 软件失效模型 181
8.5 可靠性设计 182
8.5.1 消除单点依赖 183
8.5.2 化串联为并联 183
8.5.3 采用集群 184
第9章 应用保护 185
9.1 应用保护概述 185
9.2 隔离 187
9.3 限流 189
9.3.1 时间窗限流法 189
9.3.2 漏桶限流法 190
9.3.3 令牌限流法 192
9.4 降级 193
9.5 熔断 196
9.6 恢复 198
第10章 前端高性能 200
10.1 前端工作分析 200
10.1.1 前端加载过程 200
10.1.2 前端性能分析 201
10.2 资源下载优化 203
10.2.1 资源压缩 203
10.2.2 减少请求 205
10.2.3 资源缓存 210
10.3 页面解析优化 214
10.3.1 顺应解析流程 214
10.3.2 应用新型前端框架 216
10.4 懒加载 216
10.5 预操作 217
第11章 架构设计理论 219
11.1 软件架构风格 219
11.1.1 管道过滤器架构风格 220
11.1.2 面向对象架构风格 220
11.1.3 基于组件的架构风格 221
11.1.4 事件驱动架构风格 221
11.1.5 分层架构风格 221
11.1.6 C/S架构风格 222
11.1.7 三层C/S架构风格 223
11.1.8 B/S架构风格 224
11.2 软件生命周期 225
11.2.1 需求阶段 226
11.2.2 模型设计 227
11.2.3 概要设计 228
11.2.4 详细设计 228
11.2.5 质量指标设计 229
11.2.6 方案预研 229
11.2.7 软件开发 229
第12章 高性能架构实践 231
12.1 需求概述 231
12.2 权限系统的相关理论 234
12.2.1 权限模型 234
12.2.2 访问控制方式 240
12.3 模型设计 241
12.3.1 模型调研 241
12.3.2 模型应用 242
12.4 概要设计 249
12.5 数据层详细设计 253
12.5.1 RBAC数据表的范式设计 253
12.5.2 RBAC数据表的反范式设计 254
12.5.3 RBAC数据表的最终设计 255
12.5.4 MatrixAuth管理类数据表设计 257
12.5.5 MatrixAuth的数据层结构 259
12.6 缓存详细设计 260
12.7 服务端详细设计 261
12.7.1 数据源动态切换 261
12.7.2 数据冗余的一致性保证 263
12.7.3 服务端的操作接口 263
12.8 客户端详细设计 265
12.8.1 可控角色的权限验证 265
12.8.2 自由角色的权限验证 267
12.8.3 用户信息、角色关联信息推送 268
12.9 MatrixAuth项目实践总结 268
12.9.1 MatrixAuth的高性能设计 268
12.9.2 需求完成度分析 270
12.9.3 MatrixAuth的使用简介 270
参考文献 273