高性能架构之道
书籍简介
《高性能架构之道》是一本理论联系实际的架构书籍。书中对高性能、架构、软件质量指标等概念进行了细致的阐述。并分章节详细介绍了实现高性能架构的手段,涵盖分布式、并发编程、数据库调优、缓存、IO、高可用、前端性能优化等众多知识。同时,在每个方面均涵盖相关的理论知识、实践技巧、工程方案。该书最后还运用书中知识完成了一个实际软件项目的架构设计工作,向大家完整展示了软件架构的全过程。
本书适合软件架构师、工程师、学生阅读,能极大帮助读者完善软件开发知识体系和提升其软件架构能力。
书籍购买地址: 京东
书籍购买地址: 京东
书籍目录
- 推荐序
- 前言
- 第1章 高性能架构
- 1.1 软件架构
- 1.2 软件的质量
- 1.3 高性能概述
- 1.4 软件性能指标
- 1.4.1 吞吐量
- 1.4.2 并发数
- 1.4.3 平均响应时间
- 1.4.4 可靠性指标
- 1.5 性能指标之间的关系
- 1.5.1 并发数对吞吐量的影响
- 1.5.2 并发数对平均响应时间的影响
- 1.5.3 平均响应时间对并发数的影响
- 1.5.4 可靠性指标与其他指标的关系
- 1.6 高性能架构
- 第2章 分流设计
- 2.1 内容分发网络
- 2.1.1 内容分发网络的结构
- 2.1.2 内容分发网络的原理
- 2.2 多地址直连
- 2.3 反向代理
- 2.1 内容分发网络
- 第3章 服务并行设计
- 3.1 并行与并发
- 3.2 集群系统
- 3.2.1 无状态的节点集群
- 3.2.2 单一服务节点集群
- 3.2.3 信息共享的节点集群
- 3.2.4 信息一致的节点集群
- 3.3 分布式系统
- 3.4 微服务系统
- 第4章 运算并发
- 4.1 多进程
- 4.2 多线程
- 4.2.1 线程的状态及转换
- 4.2.2 多线程的应用场景
- 用以提升效率
- 用以实现异步操作
- 4.2.3 多线程的创建
- 继承Thread类
- 基于Runable接口
- 基于Callable接口
- 4.2.4 线程池
- 4.2.4 多线程资源协作
- 内存模型
- 禁止并发修改
- 线程安全对象
- 线程独享资源
- 4.2.5 多线程进度协作
- 总分总式同步
- 栅栏式同步
- 总分总式同步
- 信号量
- 4.3 多协程
- 4.4 运算并发总结
- 第5章 输入输出设计
- 5.1 概念梳理
- 5.1.1 同步与异步
- 5.1.2 阻塞与非阻塞
- 5.2 IO模型
- 5.3 IO模型的层级关系
- 5.4 阻塞式IO模型
- 5.5 非阻塞式IO模型
- 5.6 信号驱动式IO模型
- 5.7 复用式IO模型
- 5.8 异步式IO模型
- 5.9 输入输出模型总结
- 5.1 概念梳理
- 第6章 数据库设计与优化
- 6.1 数据库设计概述
- 6.2 关系型数据库设计
- 6.2.1 设计范式介绍
- 第一范式
- 第二范式
- 第三范式
- BCNF
- 第四范式
- 第五范式
- 6.2.2 反范式设计
- 6.2.1 设计范式介绍
- 6.3 索引原理与优化
- 6.3.1 索引的原理
- Hash索引
- BTree索引
- 位图索引
- 6.3.2 索引生效分析
- 6.3.3 索引的使用
- 计算与类型转化引发的索引失效
- 联合索引的失效
- 模糊匹配引发的索引失效
- 其他索引失效场景
- 6.3.4 索引的利弊
- 6.3.1 索引的原理
- 6.4 数据库引擎
- 6.5 数据库锁
- 6.5.1 乐观锁
- 6.5.2 悲观锁
- 6.6 死锁
- 6.7 事务
- 6.7.1 事务并发导致的问题
- 脏读
- 不可重复读
- 幻读
- 6.7.2 事务隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行化
- 隔离级别总结
- 6.7.3 自建事务
- 6.7.1 事务并发导致的问题
- 6.8 巨量数据的优化
- 6.8.1 表分区
- 6.8.2 分库分表
- 6.8.3 读写分离
- 主从复制的实现方案
- 主从复制的延迟问题
- 6.9 非传统数据库
- 6.9.1 内存数据库
- 6.9.2 列存储数据库
- 6.9.3 面向对象数据库
- 6.9.4 文档数据库
- 6.9.5 图数据库
- 6.10 数据库中间件
- 第7章 缓存设计
- 7.1 缓存的收益
- 7.2 缓存的键与值
- 7.2.1 缓存的键
- 7.2.2 缓存的值
- 7.3 缓存的更新机制
- 7.3.1 时效性更新机制
- 7.3.2 主动更新机制
- Cache Aside机制
- Read/Write Through机制
- Write Behind机制
- 7.4 缓存的清理机制
- 7.4.1 时效式清理
- 7.4.2 数目阈值式清理
- FIFO
- LRU
- 开发实践
- 7.4.3 非强引用式清理
- 7.4.4 清理策略使用实践
- 7.5 缓存的风险点
- 7.5.1 缓存穿透
- 7.5.2 缓存雪崩
- 7.5.3 缓存击穿
- 7.5.4 缓存预热
- 7.6 缓存的位置
- 7.6.1 客户端缓存
- 7.6.2 静态缓存
- 7.6.3 服务缓存
- 7.6.4 数据库缓存
- 7.7 写缓存
- 7.7.1 写缓存的收益
- 7.7.2 写缓存实践
- 第8章 可靠性设计
- 8.1 软件可靠性概述
- 8.2 软件可靠性指标
- 8.2.1 失效概率
- 8.2.2 失效强度
- 8.2.3 失效率
- 8.3 模块连接方式与可靠性
- 8.3.1 串联系统的可靠性
- 8.3.2 并联系统的可靠性
- 8.3.3 冗余系统的可靠性
- 8.3.4 模块连接方式的可靠性讨论
- 8.4 软件失效模型
- 8.5 可靠性设计
- 8.5.1 消除单点依赖
- 8.5.2 化串联为并联
- 8.5.3 采用集群
- 第9章 应用保护
- 9.1 应用保护概述
- 9.2 隔离
- 9.3 限流
- 9.3.1 时间窗限流法
- 9.3.2 漏桶限流法
- 9.3.3 令牌限流法
- 9.4 降级
- 9.5 熔断
- 9.6 恢复
- 第10章 前端高性能
- 10.1 前端工作分析
- 10.1.1 前端加载过程
- 10.1.2 前端性能分析
- 10.2 资源下载优化
- 10.2.1 资源压缩
- 10.2.2 减少请求
- 资源合并
- 长连接长轮询与推送
- 10.2.3 资源缓存
- 10.3 页面解析优化
- 10.3.1 顺应解析流程
- 10.3.2 应用新型前端框架
- 10.4 懒加载
- 10.5 预操作
- 10.1 前端工作分析
- 第11章 架构设计
- 11.1 软件架构风格
- 11.1.1 管道过滤器架构风格
- 11.1.2 面向对象架构风格
- 11.1.3 基于组件的架构风格
- 11.1.4 事件驱动架构风格
- 11.1.5 分层架构风格
- 11.1.6 C/S架构风格
- 11.1.7 三层C/S架构风格
- 11.1.8 B/S架构风格
- 11.2 软件生命周期
- 11.2.1 需求阶段
- 11.2.2 模型设计
- 11.2.3 概要设计
- 11.2.4 详细设计
- 11.2.5 质量指标设计
- 11.2.6 方案预研
- 11.2.7 软件开发
- 11.1 软件架构风格
- 第12章 高性能架构实践
- 12.1 需求概述
- 12.2 权限系统的相关理论
- 12.2.1 权限模型
- 访问矩阵
- 基于角色的访问控制
- 两种权限模型之间的关系
- 12.2.2 访问控制方式
- 12.2.1 权限模型
- 12.3 模型设计
- 12.3.1 模型调研
- 12.3.2 模型应用
- 用户、角色、权限的处理
- “用户-角色”关系
- “角色-权限”关系
- RBAC各要素实现整理
- 控制方式设计
- 12.4 概要设计
- 12.5 数据层详细设计
- 12.5.1 RBAC数据表的范式设计
- 12.5.2 RBAC数据表的反范式设计
- 12.5.3 RBAC数据表的最终设计
- 12.5.3 MatrixAuth管理类数据表设计
- 12.5.4 MatrixAuth的数据层结构
- 12.6 缓存详细设计
- 12.7 服务端详细设计
- 12.7.1 数据源动态切换
- 12.7.2 数据冗余的一致性保证
- 12.7.3 服务端的操作接口
- 12.8 客户端详细设计
- 12.8.1 可控角色的权限验证
- 12.8.2 自由角色的权限验证
- 12.8.3 用户信息、角色关联信息推送
- 12.9 MatrixAuth项目实践总结
- 12.9.1 MatrixAuth的高性能设计
- 数据层(含缓存)
- 服务端
- 客户端
- 12.9.2 需求完成度分析
- 12.9.3 MatrixAuth的使用简介
- 数据源配置
- MatrixAuthServer配置
- MatrixAuthClient配置
- 鉴权操作
书籍内容
本页面提供《高性能架构之道》中部分章节的试读。
试读章节未经校审,以出版的书籍内容为准。
书籍购买地址: 京东
推荐序
近年来,随着移动互联网的蓬勃发展,数字经济迎来爆发式增长的契机。百花齐放的互联网服务正在潜移默化地渗透到人们衣、食、住、行的方方面面。软件服务的运行质量,已经不仅仅影响着用户体验,更成为关系到社会民生的大事。
从信息化、数字化时代迈入智能化时代,软件系统架构也是不断演进的,从传统的单体式,发展到SOA,再到微服务,乃至如今火热的云原生。在不断地以技术创新驱动业务创新的同时,所面临的技术挑战也在与日俱增。对于高并发、大流量的互联网分布式系统来说,一个微小的技术方案差异,就很可能导致天壤之别的性能表现。而性能问题不仅仅带来了运行成本的增加,更是系统稳定性的隐患。
构建高性能、高可靠的软件系统,是无数开发者不懈的追求。然而软件架构设计是一项高度依赖理论知识体系与工程实践经验的工作,如果没有合适的学习渠道,往往进步缓慢。
本书作者对软件性能有独特的见解,在软件架构设计、性能保障方面均有丰富经验。本书首先站在体系化的理论高度,从软件质量的特性维度出发,推导出软件性能的度量模型,解答了“什么是高性能软件架构”。并且结合多年经验,贯穿完整技术栈介绍了提升软件架构性能的知识与技巧。最后用一个实战案例,帮助读者充分消化理解所学知识。这是一本值得广大技术爱好者与从业者品读学习的好书。
PerfMa首席技术官,TVP腾讯云最具价值专家,中商联智库顾问 童庭坚
前言
半年前我出版了《通用源码阅读指导书——MyBatis源码详解》一书,向大家分享源码阅读相关的知识和技巧。书籍面市后,收到了不错的反响,有的读者表示学到了许多的编程知识,有的读者表示理解透彻了MyBatis的源码,有的读者表示终于迈入了源码阅读的大门。这让我感觉每个坐在电脑前十指连弹的夜都是值得的。
然而,我也发现很多开发者在进行软件架构设计时缺乏体系化思维,于是,只能在试错、总结中不断摸索提升,痛苦而缓慢。而且,这种提升方式容易留下知识盲区。可这些都很难通过源码阅读来补足。
因此我决定写一本体系化的架构书籍分享给大家。书籍中不仅要包含理论知识、实践技巧、工程方案,更要将这些知识体系化地连接起来,以帮助大家建立一个完备的知识体系。这就是我写作本书的原因。
在本书中,我们将从“高性能架构”这一点出发,体系化地介绍高性能架构相关的各个方面。
书中涉及很多理论知识,我尽量通过示例使得它们简单易懂;书中有很多架构技巧,我尽量通过总结使得它们清晰明了。在本书的最后,还会以书中的架构体系为依据开发一套高性能的分布式权限系统。
从理论知识,到架构技巧,再到项目实践,本书力求给出一套完整的知识体系,指引大家完成高性能系统的架构设计。
本书第一章介绍了高性能和架构这两个概念。包括高性能所代表的具体指标,架构的具体含义与主要内容。
本书第二章介绍了分流设计。即如何使用内容分发网络、多地址直连、反向代理等手段将用户的请求分散到不同的系统上,从而降低每个系统的并发数。
本书第三章介绍了与服务并行相关的设计。首先介绍了并行与并发的概念,然后在此基础上介绍了集群系统、分布式系统、微服务系统。包括各类系统的特点、实现难点等。服务并行设计能够进一步将系统内的请求进行分流,从而提升系统性能。
本书第四章介绍了多进行、多线程、多协程等运算并发手段,并给出了相应的实例。尤其是对常见的多线程进行了深入的介绍,包括线程的状态转换、应用场景、使用方法、协作方法等。通过运算并发设计,能够显著提升系统的并发能力。
本书第五章介绍了输入输出设计。首先介绍了IO的分类维度、层级。然后详细介绍了常见的五种IO模型,包括这些模型之间的演化逻辑,并给出了这些模型的实际使用示例。
本书第六章介绍了数据库设计与优化手段。从最基本的关系型数据库设计开始,介绍了关系型数据库设计的设计范式、反范式。在此基础上,还介绍了各类索引的原理、使用条件,各类锁的特点,死锁的产生与解除,事务及其隔离级别等。在章节的最后还介绍了面向巨量存储数据时数据库该如何优化,以及一些非传统的数据库和数据库中间件。
本书第七章介绍了缓存设计的方法和技巧。这一章节从缓存的收益说起,推导提升缓存收益的方法。然后在此基础上,给出了提升缓存收益的具体实施手段,包括缓存要素的设计、更新机制的设计、清理机制的设计、风险点的处理、位置的设计等。最后还介绍了写缓存的收益计算和实践方案。
本书第八章介绍了系统可靠性设计的相关知识。首先介绍了可靠性的概念与具体的衡量指标,然后在此基础上介绍了提升系统可靠性的手段。这一章节将帮助我们构建高可靠性的系统。
本书第九章介绍了应用保护的基础知识和实践手段。这些知识和手段能提升应用在突发状况下的工作状况。
本书第十章介绍了前端高性能的相关知识。这是一个相对独立的章节,它首先分析了前端工作过程中的性能关键点,然后针对这些关键点给出了前端性能优化的手段。具有较强的概括性和指导性。
本书第十一章介绍了架构设计中架构设计风格和软件生命周期这两个方面的基本知识。这些知识将指导我们体系化地进行软件架构工作。
本书第十二章是一个项目实践章节。该章节以前面各章节介绍的高性能架构知识为依据,完整地开展了一个高性能软件系统的架构工作,包括理论推导、模型设计、概要设计、详细设计等各个环节,向读者展示了一个完整的高性能架构过程。该章节的内容能帮助读者学会如何在实践中灵活运用前面各个章节的知识。
本书力求理论联系实践,既给出了高性能架构的相关理论与推导,又给出了具体的实施策略与技巧,还通过项目实践完成了一个高性能软件的架构设计。希望大家能在阅读本书后够建立高性能架构完整知识体系。
书籍的写作出版要经历很长的过程,从规划到研究,从初稿到终稿,从编辑到面市。在这个过程中,我要感谢许多人。期间,我得到了领导的大力支持和鼓励,得到了业内专家的审阅和指导,也得到了国内外学术及工程领域多位朋友的帮助。性能领域的资深专家童庭坚在百忙中审阅了书籍初稿,并为本书作序。电子工业出版社的众多编辑也为本书倾力付出。谢谢!
信息技术浪潮带来了巨大的机会,对于坐在这本书前的你和我而言,对于走在复兴路上的国家和民族而言。作为软件开发者的你我有幸站到了这一机会面前,我们每个人都应该做出自己的一份贡献,或伟大,或渺小,为自己,为社会。
真心希望本书能够给你带来架构能力和软件开发能力的提升。
加油,愿你我早日成为自己的灿烂星辰。
易哥
2020年10月,于上海
第1章 高性能架构
现代软件对性能的要求越来越高,因此必须在软件的架构过程中着重提升软件的性能指标,即对软件开展高性能架构。
然而高性能架构的开展是一项涉及理论、实践、工程等多领域的工作。软件开发者知识体系中的任何欠缺都可能会给软件带来设计上的缺陷,导致软件性能指标的下降。这使得软件架构成为了一项高度依赖知识、经验的工作。
本书旨在提升软件开发者在高性能架构方面的知识和经验。书中包含相关理论知识的阐述,并在理论知识的基础上推导出具体的实践方案,最后还向大家展示了一个完整的项目架构过程。进而由理论到实践、由实践到工程,帮助读者建立软件架构的完整知识体系,快速提升读者的高性能架构能力。
在这一章节,我们先介绍软件架构和软件质量这两个概念,并在此基础上明确“高性能”的具体定义。之后,我们会进一步分析软件的性能指标以及各指标之间的关系,为后续各章节做好铺垫。
1.1 软件架构
架构是一个来源于传统领域的古老概念,用来指对房屋、桥梁等实体物理结构的设计与研究。后来,架构的概念被引入到软件系统领域,指对软件系统总体结构的设计。
我们可以类比传统工程设计领域的概念,将软件系统领域的研究由上到下地分为三层:
- 理念层面:研究软件系统开发中的理念和思想,例如研究软件的开发模型、评价指标、架构风格等。类比于传统工程领域研究建筑质量标准、研究商业区与居住区的分布关系等。
- 架构层面:研究如何协调和组织软件系统、子系统、模块之间的关系,从而指导系统实现并提升各类质量指标。类比于规划和设计建筑物的承重结构、功能结构等,并协调各结构的关系等。
- 技术层面:研究如何高效、可靠、经济地实现软件系统、子系统、模块等。类比于搭建建筑物中的楼梯、墙体、阳台等。
可见软件架构位于承上启下的中间层。因此,做出良好的架构需要我们对理念层面和技术层面的知识均由较为深刻的认识。理念层面的知识为我们的架构提供了思路和目标上的指引,技术层面的知识为我们的架构提供了手段和工具上的支撑。
《通用源码阅读指导书——MyBatis源码详解》是一本兼具架构层面和技术层面的书籍。它以优质开源项目的源代码为基础,分析了源码所涉及的基础知识、实现逻辑、架构技巧,能使得读者在架构层面和技术层面均有较大的提升。是一本帮助程序员从技术开发领域迈入架构设计大门的良好书籍。
在软件开发过程中,架构发生在需求之后、规划之前。经过需求、架构、规划、开发几个主要步骤后,一个软件便从最初模糊的需求演变为最终可运行的实体。
软件架构是在软件系统结构、行为和属性的高级抽象基础之上展开的全面的系统设计,其主要内容包括概要设计和详细设计两大步骤。在概要设计阶段,研究构成系统的抽象组件以及组件之间的连接规则;在详细设计阶段,将这些抽象组件细化为模块、类、对象等实际的组件,并通过设计通信规则完成它们之间的连接。
软件系统架构的好坏对软件的质量有着重要的影响。在算法研究中,我们常使用时间复杂度和空间复杂度等指标来衡量算法的性能。然而,在一个完整的软件项目中,算法的研究与优化只是软件开发阶段的一个小环节,其对系统质量的影响是有限的。相比于算法优化,软件系统架构则是从顶层对软件系统的软硬件结构进行设计,其设计的好坏对系统质量的影响更为重大。
因此,要想搭建高性能的系统,要先从架构层面出发对软件进行高性能架构,而不应将责任直接推给算法设计和代码优化。
在了解什么是高性能架构之前,我们需要先了解什么是软件的质量。
试读章节结束。
书籍购买地址: 京东