书籍作者:李智慧 | ISBN:9787111729761 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:1077 |
创建日期:2024-04-08 | 发布日期:2024-04-08 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书由知名架构师、技术畅销书作者李智慧撰写,融合其十余年的架构设计实践经验和理论知识,贴合实际场景,重构现有大厂应用,带来沉浸式的现场设计感。本书共22章,涵盖八大维度、18个案例。
第1个维度(第1~2章):分布式系统架构设计方法与文档写作方法,介绍架构师如何向各个相关方完整呈现一个系统设计的方方面面。
第二个维度(第3~7章):高并发系统的海量数据处理架构案例,主要讨论高并发处理海量数据的场景,包括如何存储、传输、并发访问控制以及高可用设计,一些看似相同的需求在不同场景下可以有完全不同的解决方案。
第三个维度(第8~11章):高并发系统的高性能架构案例,主要讨论在高并发场景下,如何保证系统的响应性能,如何通过巧妙设计解决技术挑战。
第四个维度(第12~14章):高并发系统的高可用架构案例,将讨论系统在高并发的情况下如何保证高可用,比如应对高并发请求所导致的系统崩溃。
第五个维度(第15~17章):安全系统架构案例。 系统安全也是高并发系统的一个重要挑战,比如恶意的用户请求如何处理、敏感的数据如何加密/解密等。
第六维度(第18~20章):网约车架构案例专题,将深入讨论如何设计一个数亿用户、千万日订单的高并发打车软件。
第七个维度(第21章):动手实践系统架构设计,给出了高并发系统架构设计需求与参考设计,读者可自己动手输出一个系统架构设计文档。
第八个维度(第22章):架构师工作职责与技术管理,讨论架构师如何聚焦架构工作,承担好一个架构师的职责,以及如何构建自己的技术领导力。
1) 对一个架构师而言,精通技术是重要的,而用技术建立起自己的信心,在关键时刻有勇气面对挑战更重要。人生的道路虽然漫长,但是紧要处可能只有几秒。这几秒是秒杀系统高并发访问高峰的那几秒,也是面对挑战迎难而上站出来的那几秒。
2) 二十几年前,我刚刚接触编程的时候,我国也有很多这样的编程英雄,王选、王江民、求伯君、雷军等,他们几乎凭一己之力就创造出一个行业。正是对这些英雄们的崇拜和敬仰,引领我在编程这条路上一直走下去。软件编程是一个可以创造奇迹的地方,而不只是为了混碗饭吃。梦想不能当饭吃,但是梦想带来的可不止是一碗饭。
3)架构师一方面需要思考宏观的技术决策,一方面要思考微观的核心代码。这里两方面的能力支撑起架构师的技术影响力:既要能上得“厅堂”,在老板、客户等外部相关方面前侃侃而谈,保障自己和团队能掌控自己的技术方向;也要能下得“厨房”,搞定最有难度的代码实现,让团队成员相信跟着你混,没有迈不过去的技术坎。
李智慧,同程旅行资深架构师、Apache Spark 代码贡献者,曾担任阿??巴巴技术专家、Intel亚太研发中??架构师、Wi-Fi万能钥匙 CTO。他也是极客时间专栏作者、腾讯云TVP,著有技术畅销书《架构师的??我修炼:技术、架构和未来》《??型??站技术架构:核??原理与案例分析》。
本书将为你提供一站式的高并发架构解决方案,以及架构师权衡抉择的方法与技巧。本书由知名技术畅销书作者李智慧撰写,从需求分析到详细设计,从八大维度剖析18个精彩案例,让你真正掌握架构思维与实践要点。
*沉浸式设计:基于多个真实大厂架构设计文档进行重构,通过贴合真实高并发工作场景的设计文档形式、求同存异的典型系统架构设计方案,体验作为大厂架构师的沉浸式设计心路。
*实用性强:本书介绍的多个应用场景与技术方案,可解决现实工作中80%以上的高并发共性问题,真正做到学以致用。
*知识体系完备:本书介绍的知识点覆盖面广,应用场景多,包括微博、百科、搜索引擎、短视频、交友软件、网约车等各种应用,以及秒杀系统、区块链架构、分布式存储、DDD重构等关键技术,构建了完整的高并发系统架构知识体系。
*内容专业:作者李智慧是知名架构师,将自己多年的实践经验和理论知识融合,让读者真正、全面地理解高并发系统开发。
*读者好评如潮:本书内容由极客时间畅销专栏改编、扩充而来,内容广受读者好评。
很多软件工程师的职业规划是成为架构师,但是要成为架构师很多时候要求先有架构设计经验,而不做架构师又怎么会有架构设计经验呢?那么要如何获得架构设计经验呢?一方面可以通过工作来学习,观察所在团队的架构师是如何工作的,协助他做一些架构设计和落地的工作。同时,思考如果你是架构师,你将如何完成工作,哪些地方可以做得更好。
另一方面,也可以通过阅读来学习,看看那些典型的、耳熟能详的应用系统是如何设计的。同样,你也可以在阅读的过程中思考:如果你是这个系统的架构师,将如何进行设计?如何输出你的设计结果?哪些关键设计需要进一步优化?
通过这样不断地学习和思考,你就会不断积累架构设计的经验,等你有机会成为架构师的时候,就可以从容不迫地利用你学习与思考获得的经验和方法,开始你的架构师职业生涯。
本书的所有案例都是基于真实场景的,甚至有些案例本身就是由真实设计文档改编的。希望你在阅读本书的过程中,能把自己带入真实的系统设计场景中,把文章当成真实的设计文档,把自己想象成文档作者的同事,也就是说,你正在评审我做的设计。
你可以一边阅读一边思考:这个设计哪些地方考虑不周?哪些关键点有缺漏?然后你可以把自己的思考记录下来,当作你的评审意见。最重要的是,通过这种方式,你拥有了和我一样的关于每一个软件设计案例的现场感:你不是一个阅读书籍的读者,而是置身于互联网大厂的资深架构师,你在评审同事的设计,也在考虑公司的未来。
【本书特点】
本书主要针对高并发系统架构设计的典型应用场景,采用标准的软件架构设计文档格式,描述如何设计常见的高并发系统架构,期望能够帮助你站在大厂架构师的视角,理解高并发系统的设计思路。
为了帮助你获得这种身临其境的大厂架构师视角,本书提供了三条途径。
*足够真实的高并发系统设计场景
高并发是系统架构设计的核心,也是很多大厂的关注焦点。在应聘大厂架构师岗位的时候,如果你对高并发架构说不出什么,恐怕面试就凶多吉少了。但是看过了不少高并发系统设计的技术资料之后,你可能还是会有这样的困惑:为什么我还是对设计一个完整的高并发系统没有概念?
这主要是因为你学习的是具体的高并发架构知识,而不是学习一个完整的高并发系统如何设计,所以也就无法形成一个整体的系统架构设计思路。
本书大部分案例都是针对我们日常接触的各种高并发应用的,比如微博、短视频、网约车、网盘、搜索引擎等,具体又分为高并发系统的海量数据处理架构、高性能架构、高可用架构以及安全架构。
在学习这些系统架构设计案例的时候,一方面可以学习各种应用系统如何进行整体设计,另一方面也可以学习高并发系统架构设计的模式和技巧,两者结合起来,就是一个完整的高并发系统设计的知识体系。
*贴合工作场景的设计文档形式
你可能会觉得设计文档和自己关系不大:一是平时不怎么写,也不愿意写,觉得写文档价值不大;二是自己不擅长写文档,觉得写也写不好,甚至不太知道设计文档该怎么写。
但工作了这么多年,我发现写东西可以帮助人更好地思考。技术人员如果不写设计文档,就会缺少对技术的深刻思考,缺乏对技术方案的优点和缺点的系统认识,也就不知道如何找到更好的技术和更合理的方案。很显然,这会阻碍技术人员的职业发展。
不仅如此,如果不写设计文档,缺乏对技术的深度思考,那么开发出来的软件就缺乏创新,产品在市场上就缺乏竞争力。
可以粗暴一点地说:没有设计文档就没有设计,没有设计就没有技术的进步。
所以,本书将以软件设计文档的形式去展现一系列软件的系统架构设计,这些设计文档的风格是相对统一的。我希望你可以在这些“重复”的设计文档所展现的组织方式、软件建模与架构方式中,掌握一般的软件设计方法和软件设计文档的写作方法。
*求同存异的典型系统架构案例
我精挑细选了18个系统架构案例,这些案例大多是目前大家比较关注的高并发、高性能、高可用系统。它们是高并发架构设计的优秀“课代表”,它们的技术可以解决现有的80%以上的高并发共性问题。所以在阅读文档的过程中,你可以进一步学习与借鉴这些典型的分布式互联网系统架构,构建起自己的系统架构设计方法论,以指导自己的工作实践。
为了避免每篇文档中都出现大量重复、雷同的设计,我在内容方面进行了取舍,精简了一些常规的、技术含量较低的内容,而尽量介绍那些有独特设计思想的技术点,尽可能做到在遵循设计文档规范的同时,又突出每个系统自己的设计重点。
此外,本书中还有一部分设计是针对大型应用系统的,比如限流器、防火墙、加解密服务、大数据平台等。
但需要强调一点,本书会针对这些知名的大厂应用重新进行设计,而不是分析现有应用是如何设计的。一方面,重新设计完全可以按自己的意愿来,不管是设计方案还是需求分析、性能指标估算,都是一件很有意思的事;另一方面,因为现有应用中的某些关键设计并没有公开,我们要想讨论清楚这些高并发应用的架构设计,没有现成的资料,还是需要自己进行分析并设计。
所以很多案例的设计文档都有需求分析,用于估算重新设计的系统需要承载的并发压力有多大、系统资源需要多少,这些估算大多数都略高于现有大厂的系统指标。希望你在阅读这些内容的时候,能够更真切地体会到架构师的“现场感受”:我评审、设计的这个系统将服务全球数十亿用户;这个系统每年需要的服务器和网络带宽需要几十亿元;这个系统宕机十几分钟,公司就会损失数千万元。
【读者对象】
致力于成为架构师的软件开发人员。
【如何阅读本书】
我们常说高并发、高性能、高可用,事实上这三者并不是平行的关系。通常情况下,高并发是根源和核心。大量的用户同时请求系统服务造成的高并发,会导致系统资源快速消耗,服务器无法及时处理用户请求,响应变慢,系统出现性能问题。更糟糕的是,性能继续恶化,导致服务器资源耗尽,出现了系统崩溃与可用性问题。
根据高并发系统的特点以及架构师的工作特点,本书涉及8个维度。
第1个维度(第1、2章):分布式系统架构设计方法与文档写作方法。
架构师最重要的工作产出就是架构设计文档。架构师如何向各个相关方完整呈现一个系统设计的方方面面?这一部分将讨论这个最基本的问题,同时本书所有案例也都遵循同样的设计文档写作方法,你可以反复验证这种方法。
第2个维度(第3~7章):高并发系统的海量数据处理架构案例。
我们将主要讨论高并发处理海量数据的场景,包括海量数据如何存储、如何传输、如何进行并发控制、如何进行高可用设计。
在这一部分中,你可以看到:一些看似相同的需求其实可以有完全不同的解决方案。比如海量的短视频和海量的网盘存储;还有一些看似非常不同的场景,其实可以用同一个技术搞定,比如短URL和短视频。
第3个维度(第8~11章):高并发系统的高性能架构案例。
我们将主要讨论在高并发场景下如何保证系统的响应性能。在这一部分中,你会看到,在海量的网页中快速搜索一些网页和在海量的人群中快速寻找一些人,其技术挑战是如何不同,其解决方案又分别是如何巧妙。
第4个维度(第12~14章):高并发系统的高可用架构案例。
高并发导致系统的崩溃,最经典的案例莫过于某个热点新闻导致的微博宕机。为什么热点新闻会导致微博崩溃?微博如何处理这种热点新闻的海量消息转发所带来的系统压力?
第5个维度(第15~17章):安全系统架构案例。
系统安全也是高并发系统的一个重要挑战。恶意的用户请求如何处理?敏感的数据如何加密、解密?这里的几个案例都来自真实的应用。如果需要,你可以将这几个设计直接落地,应用到你的工作中。
第6个维度(第18~20章):网约车架构案例。
在这一部分中,我们将深入讨论如何设计一个数亿用户、千万日订单的高并发打车软件,面对业务迭代,如何利用DDD对系统微服务进行重构设计,以及如何将大数据技术用于网约车平台。
第7个维度(第21章),动手实践系统架构设计。
在这个维度,我专门提出了一个高并发系统架构设计需求,希望你可以参考前面的案例分析,按照标准架构设计文档的格式,自己动手输出一个系统架构设计文档。
第8个维度(第22章),架构师工作职责与技术管理。
本书的最后讨论架构师如何聚焦于架构工作,承担好架构师的职责,以及架构师作为技术管理者如何构建自己的技术领导力。
最后,也是最重要的,希望你能把自己想象成大厂架构师,对每一个案例都产生自己的意见和看法,并表达出来。
期望你能自己挑选几个大厂的应用案例,按照本书提供的架构设计模板,完成应用的架构设计。做到这一点,你就可以说对高并发架构熟稔于心了,相应地,对自己的架构能力也建立起信心了。
祝你学习顺利,成为一名实战能力强、能够主导公司技术核心的架构师。
前言
第1章 系统架构蓝图:软件建模与文档1
1.1 软件建模2
1.2 软件设计方法3
1.2.1 类图3
1.2.2 时序图4
1.2.3 组件图5
1.2.4 部署图6
1.2.5 用例图7
1.2.6 状态图8
1.2.7 活动图8
1.3 软件设计文档10
1.4 小结12
第2章 面对高并发如何对症下药13
2.1 高并发系统架构的方法论14
2.2 高并发系统架构的主要技术15
2.2.1 分布式应用15
2.2.2 分布式缓存17
2.2.3 分布式消息队列17
2.2.4 分布式关系数据库18
2.2.5 分布式微服务19
2.3 系统并发指标20
2.4 小结21
第3章 百亿短URL生成器设计23
3.1 需求分析24
3.1.1 短URL生成器的用例图25
3.1.2 性能指标估算25
3.1.3 非功能性需求26
3.2 概要设计27
3.2.1 单向散列函数生成短URL27
3.2.2 自增长短URL28
3.2.3 预生成短URL28
3.2.4 整体部署模型28
3.3 详细设计32
3.3.1 重定向响应码32
3.3.2 短URL预生成文件及预加载33
3.3.3 用户自定义短URL34
3.3.4 URL Base64编码35
3.4 小结36
第4章 千亿级网页爬虫设计38
4.1 需求分析39
4.1.1 性能指标估算39
4.1.2 非功能性需求39
4.2 概要设计41
4.2.1 爬虫处理流程42
4.2.2 系统部署模型44
4.2.3 分布式爬虫45
4.3 详细设计46
4.3.1 URL调度器算法46
4.3.2 去重算法50
4.3.3 高可用设计50
4.4 小结51
第5章 万亿GB网盘系统设计53
5.1 需求分析54
5.1.1 负载指标估算55
5.1.2 非功能性需求55
5.2 概要设计56
5.3 详细设计60
5.3.1 元数据库设计60
5.3.2 限速61
5.3.3 秒传61
5.4 小结63
第6章 支撑3000万用户同时在线的短视频系统设计64
6.1 需求分析65
6.2 概要设计66
6.3 详细设计70
6.3.1 视频存储系统设计70
6.3.2 性能优化与CDN设计72
6.3.3 缩略图生成与推荐设计73
6.4 小结76
第7章 高可用分布式存储系统设计77
7.1 需求分析78
7.2 概要设计79
7.3 详细设计80
7.3.1 路由算法80
7.3.2 高可用设计83
7.3.3 集群伸缩设计86
7.4 小结87
第8章 应对万人抢购的秒杀系统设计89
8.1 需求分析90
8.1.1 独立开发部署秒杀系统90
8.1.2 防止跳过秒杀页面直接下单90
8.2 概要设计90
8.2.1 独立秒杀系统页面设计91
8.2.2 秒杀系统的流量控制92
8.2.3 秒杀活动启动机制设计95
8.2.4 秒杀系统部署模型96
8.3 小结98
第9章 基于LBS的交友系统设计99
9.1 需求分析100
9.2 概要设计101
9.3 详细设计102
9.3.1 SQL邻近算法103
9.3.2 地理网格邻近算法104
9.3.3 动态网格算法105
9.3.4 GeoHash算法107
9.3.5 Liao的最终算法选择111
9.4 小结112
第10章 全网搜索引擎设计113
10.1 概要设计114
10.2 详细设计116
10.2.1 索引116
10.2.2 PageRank排序算法120
10.3 小结123
第11章 反应式编程框架设计124
11.1 需求分析125
11.2 概要设计127
11.3 详细设计129
11.3.1 服务注册131
11.3.2 流程编排132
11.3.3 流式微服务设计133
11.4 小结136
第12章 支撑亿级用户的微博系统设计138
12.1 需求分析139
12.1.1 功能需求139
12.1.2 性能指标估算140
12.2 概要设计141
12.3 详细设计144
12.3.1 微博发表/订阅问题144
12.3.2 缓存使用策略146
12.3.3 数据库分片策略148
12.4 小结149
第13章 百科应用系统设计150
13.1 概要设计151
13.1.1 整体架构设计151
13.1.2 多数据中心架构153
13.2 详细设计156
13.2.1 前端性能优化156
13.2.2 服务端性能优化157
13.2.3 存储端性能优化157
13.3 小结158
第14章 高可用的限流器设计160
14.1 需求分析161
14.2 概要设计161
14.2.1 限流模式设计162
14.2.2 高可用设计163
14.3 详细设计163
14.3.1 配置文件设计164
14.3.2 固定窗口限流算法165
14.3.3 滑动窗口限流算法167
14.3.4 漏桶限流算法168
14.3.5 令牌桶限流算法171
14.4 小结172
第15章 安全可靠的Web应用防火墙设计174
15.1 需求分析175
15.2 概要设计176
15.3 详细设计179
15.3.1 XSS攻击179
15.3.2 SQL注入攻击182
15.3.3 CSRF攻击184
15.3.4 注释与异常信息泄露185
15.4 小结186
第16章 敏感数据的加解密服务平台187
16.1 需求分析189
16.2 概要设计191
16.2.1 部署模型193
16.2.2 加解密调用时序图194
16.3 详细设计195
16.3.1 密钥领域模型195
16.3.2 核心服务类设计197
16.3.3 加解密数据接口设计199
16.3.4 测试用例代码200
16.4 小结201
第17章 许可型区块链重构设计202
17.1 区块链技术原理203
17.1.1 区块链技术203
17.1.2 联盟链技术205
17.2 需求分析206
17.3 概要设计208
17.4 详细设计210
17.4.1 联盟共识控制台210
17.4.2 联盟新成员许可入网211
17.4.3 授权打包区块212
17.5 小结213
第18章 网约车系统设计215
18.1 需求分析215
18.2 概要设计216
18.3 详细设计220
18.3.1 长连接管理220
18.3.2 派单算法222
18.3.3 订单状态模型225
18.4 小结226
第19章 网约车系统的DDD重构228
19.1 用领域驱动设计微服务的一般方法229
19.2 DDD重构设计232
19.3 小结237
第20章 网约车大数据平台设计239
20.1 大数据平台设计240
20.1.1 大数据采集与导入240
20.1.2 大数据计算242
20.1.3 数据导出与应用243
20.2 大数据派单引擎设计243
20.2.1 基于乘客分类的匹配244
20.2.2 基于车辆分类的匹配245
20.3 小结246
第21章 动手实践系统架构设计247
21.1 系统架构设计的要求248
21.2 参考设计249
21.2.1 需求分析250
21.2.2 系统架构252
21.2.3 主要技术选型255
21.2.4 关键技术落地实现256
第22章 架构师的责任与领导力257
22.1 架构师的责任257
22.1.1 开发259
22.1.2 部署259
22.1.3 运行260
22.1.4 维护261
22.2 成为技术领导者262
22.2.1 创新263
22.2.2 激励264
22.2.3 组织265
附录A 五大海量数据处理技术268
后记 一个架构师的一天280
书里面的例子都非常好!
2023-07-05 23:31:56
看了一部分,受益匪浅
2023-07-07 11:18:06
高并发架构实战:从需求分析到系统设计 引言: 在当今数字化时代,互联网应用的高并发处理已经成为许多企业的关键需求。高并发架构设计能够保证系统在面对大规模用户访问时保持高性能和可靠性。本文将介绍高并发架构的实战经验,从需求分析到系统设计的过程,帮助读者更好地理解和应用高并发架构。 需求分析: 在进行高并发架构设计之前,首先需要进行全面的需求分析。这包括对系统的预期用户数量、并发访问量、数据量以及响应时间要求等方面的评估。通过对这些因素的准确评估,可以更好地确定高并发架构的需求和目标。 性能优化: 在高并发架构设计中,性能优化是至关重要的一步。首先,需要进行系统架构的优化,采用分布式架构和负载均衡技术,将用户请求分发到多个服务器上,实现并行处理,提高系统的处理能力。其次,可以采用缓存技术,将常用的数据缓存在内存中,减少数据库的读写压力。此外,还可以对代码进行优化,减少不必要的计算和数据库访问,提高系统的响应速度。 数据库设计: 在高并发场景下,数据库的设计和优化也是非常重要的。首先,需要选择合适的数据库类型,根据业务需求和数据量大小选择关系型数据库或者NoSQL数据库。其次,可以采用数据库分库分表的方式,将数据分散存储在多个数据库中,减少单个数据库的负载压力。此外,可以使用数据库缓存技术,如Redis,提高数据库的读取速度。 系统容灾与扩展: 为了确保高并发系统的可靠性,容灾和扩展性也是需要考虑的因素。通过引入冗余机制,如主备服务器和数据备份,可以在服务器故障或数据丢失时保证系统的可用性。同时,需要考虑系统的水平扩展,通过增加服务器数量和负载均衡,实现系统的横向扩展能力,以适应日益增长的用户访问量。 监控与调优: 在高并发架构实战中,监控和调优是持续不断的过程。通过使用监控工具和日志分析系统,可以实时监控系统的性能指标和异常情况,并进行相应的调优。这包括对系统的瓶颈进行定位和优化,及时发现并解决系统性能问题,以保证系统的稳定性和高可用性。 结论: 高并发架构设计是实现高性能和可靠性的关键步骤,从需求分析到系统设计需要综合考虑各个方面的因素。通过合理的架构设计、性能优化、数据库设计、系统容灾与扩展以及监控与调优,可以构建出高并发系统,满足大规模用户访问的需求。随着技术的不断发展,高并发架构设计也将不断演进和完善,为用户提供更好的体验和服务。
2023-07-19 10:11:19