猜你喜欢
架构师修炼之道——思维、方法与实践

架构师修炼之道——思维、方法与实践

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

架构设计是互联网后端开发人员必须具备的一项重要能力。大多数开发人员都是通过实际项目来培养架构设计能力的。这样的学习方式对项目本身的复杂程度依赖较重,而且会增加学习的时间。

在本书中,作者结合多年的架构学习和项目开发经验,总结出一套架构学习的体系,从技术方法、思维意识、工具等方面讲解做好互联网后端架构设计的相关知识。通过相关知识的学习,读者能够掌握设计稳定、易维护、易扩展的软件架构的方法,也能够提升日常维护已有项目的能力。书中讲解的技术方法具有通用性,在其他非互联网行业的软件开发中,也具有借鉴意义。


作者简介

从事互联网后端研发工作十余年。曾就职于腾讯QQ后台团队,全程参与过多个大型系统的设计和开发。对设计高性能、高可用互联网架构有着丰富的经验。专注于架构设计、系统重构、维护扩展等方面的技术研究,总结相关知识,为团队提供技术解决方案和培养架构人才。

编辑推荐
适读人群 :本书介绍的架构设计方法主要适合以下读者: ?从事互联网后端开发的工程师; ?从事互联网行业的产品经理; ?即将加入互联网行业的新人。

书中的内容都是架构设计中遇到的经典问题,解决方案也都是作者的亲身经历。其中:

??在“架构设计的技术方法”部分中,从“切分与扩展”“主动发现”“自动化”“灰度升级”“过载保护”“负载均衡”“柔性”等技术角度对架构设计进行阐述。

??“架构思维意识部分”从不同的角度对影响架构设计的“心法”展开介绍,包括“稳定为王”“完成比完美更重要”“聚沙成塔”“自动化思维”“产品思维”。

??“善用工具”部分介绍了部分算法和流程,帮助读者更好地将这些工具应用到架构设计工作中。

??“案例剖析”部分详细列举了互联网架构设计中的三个


前言

前  言

为什么写这本书

架构师是许多互联网开发工程师的职业目标,然而一步步修炼为架构师却并不容易。

回想从事互联网开发的十余年经历,在架构方面的成长,主要得益于所处的团队的良好氛围和众多项目经历。在职业生涯初期,加入了QQ后台团队,遇到了很多互联网行业中技术能力顶尖的前辈。通过他们的无私传授,吸收了许多成熟经验,拓宽了知识面,学到了很多书本上没有的架构知识。同时参与了多个大型项目的研发,通过解决实际问题锻炼了能力。每一次实战都加深了对架构知识的理解,领悟了许多架构设计的道理。此外,还学习了许多架构技术之外的非技术知识,为日后成为架构师奠定了坚实的基础。

最近几年,在培养新人提升架构能力时,发现大家很努力,但是架构设计能力成长却并不明显。大体有两个原因:一方面是通过实践学习架构知识的机会越来越少。随着公有云技术的发展,大家可以轻而易举地实现一套成熟的互联网业务。大家在系统层面遇到架构问题的概率变小了,通过实践学习架构知识的路径也被拉长。另一方面,大家缺乏系统性学习架构的资料。很多新人反馈,平时阅读的内容,大都是介绍某种技术的专业书籍,或者是某种具体场景的解决方案的文章,导致大家对于架构设计缺乏系统性的认知,在遇到一些架构问题时不知道如何解决,希望能够有一些资料系统地覆盖架构知识及其原理。因此结合本人多年的工作实践,系统整理了所学的架构知识,并阐述了架构设计背后的道理,最终汇集成一本书。希望新人通过阅读本书,学到一些架构方法,在遇到问题时能够有的放矢,找到解决问题的方向。具有开发经验的读者,通过阅读本书能够领略技术背后的道理,举一反三,提升解决实际架构问题的能力。

本书是对互联网研发工作的阶段性总结,把已有的知识记录下来,然后放空自己,继续前行。本书也是对从前帮助过我的前辈们的一种致敬,作为一种感谢的方式,通过本书把知识传递下去,希望能帮助更多的人,把帮助新人成长的精神传承下去。

主要内容

本书主要讲解架构设计的思维和方法,同时介绍提高架构稳定性的工具。最后通过架构设计案例来加深读者对理论知识的理解。

架构简介:介绍架构的基本定义,对其有一个明确的定位。

架构设计的技术方法:介绍设计互联网架构用到的主要方法,读者通过这部分内容可以了解具体的技术方法,并可以在日常的架构设计中借鉴,提升软件架构设计能力,优化项目。

架构思维意识:介绍架构设计思维的本质,使得架构师在不同技术环境、不同时代背景下,都能设计出满足需求的架构。

善用工具:在算法、流程和文化等方面,介绍一些好用的工具。合理运用这些工具,可以达到事半功倍的效果。

案例剖析:列举在实际架构设计中的案例,通过案例加深读者对理论知识的理解。

由于各个章节的内容是相对独立的,读者既可以按照章节顺序来阅读,也可以根据需要选择感兴趣的章节阅读。

适合读者

本书主要适合互联网初中级后端开发人员,书中的方法大都是从工程实践中获得,并经过实际验证,能够有效地解决业务问题。通过本书能够对架构技术的理论知识框架有所了解,找到学习方向。读者可以根据自己的实际能力,侧重学习架构技术方法,或者提高架构思维意识。

本书也适合互联网行业的产品经理,为了说明架构设计的道理,本书尽量用通俗简单的方式讲解理论知识。产品经理通过本书,可以学习到架构技术的一些基础知识,在撰写需求文档、设计互联网产品时,起到约束需求和规避风险的作用。例如在灰度升级和柔性的章节中,会说明在系统异常情况下,如何保证用户的基本体验——需要在产品和用户教育上进行方案设计。关于互联网架构设计心得的其他部分,对于产品经理或其他互联网相关从业人员,同样具有借鉴意义。

本书还适合即将加入互联网行业的新人。书中的知识和案例都来自对实际项目的总结。刚入行的新人可以重点关注书中的案例,对互联网行业有一个初步的认识,了解架构设计的基础知识,在以后遇到类似的情况时,明确解决问题的方向。

勘误与支持

由于个人能力有限,书中难免有疏漏之处,欢迎读者批评指正。如果对书中的内容有疑问或者建议,可以通过扫描二维码关注微信公众号“owenzhang”与我讨论。


致谢

感谢博文视点的陈晓猛编辑,为本书的出版付出了很多,在他的督促和帮助下本书才得以顺利完成。

感谢家人的支持和鼓励,让我专心完成书稿。

感谢ppchen为本书写序。ppchen分享过很多领域的知识,从海量服务的课程,到许多基础学科的总结及观点。通过这些分享,我学习到很多新知识,开阔了眼界,提升了基础能力。

感谢bison的指导和帮助,bison对于技术的追求和深入研究的精神,一直都影响着我。

感谢陈国林对本书的推荐,在项目管理和团队管理方面给我提供了很多学习的机会和建议。

感谢troy对本书提出的修改意见。troy在工作中的热心态度和充满正能量的精神,一直都值得我学习。

感谢spray的教导和帮助。从技术知识到工作方法给予了我很多帮助和支持,为我在职业早期奠定了良好的基础。

感谢曾经所在的QQ后台团队和所有共事的同事。我在团队中历练了技术能力,培养了职业精神,受益终身。我为曾经加入过这个富有激情和充满实力的团队而感到骄傲。

最后衷心希望本书能够帮助读者设计出好的架构,成为优秀的互联网架构师!


张云鹏


目录

目  录

第一部分 架构简介
第1章 架构简介 2
1.1 架构的定义 2
1.2 对架构师的要求 4
1.3 互联网架构的挑战 7
1.4 一切尽在控制 8
1.5 小结 10

第二部分 架构设计的技术方法
第2章 切分与扩展 16
2.1 切分 16
2.1.1 数据维度切分 16
2.1.2 逻辑维度切分 23
2.1.3 切分的优点 24
2.2 扩展 25
2.2.1 部署扩展 25
2.2.2 升级扩展 27
2.2.3 set模型 29
2.3 小结 31
第3章 主动发现 33
3.1 日志 34
3.1.1 为什么要记日志 34
3.1.2 日志级别 35
3.1.3 日志类型 36
3.1.4 注意事项 38
3.2 监控 40
3.3 主动发现的监控标准 43
3.3.1 系统层监控 43
3.3.2 用户侧监控 44
3.3.3 应用层监控 45
3.4 其他形式的监控 47
3.5 小结 49
第4章 自动化 52
4.1 自动部署 54
4.1.1 准备 54
4.1.2 实现 55
4.1.3 验证 57
4.2 自动恢复 58
4.2.1 服务恢复 58
4.2.2 流量迁移 60
4.3 提升自动化意识 63
4.4 其他场景 64
4.5 小结 66
第5章 灰度升级 67
5.1 策略 68
5.1.1 按照用户身份执行灰度策略 68
5.1.2 按照号段执行灰度策略 69
5.1.3 按照命令号执行灰度策略 70
5.1.4 按照时间执行灰度策略 71
5.2 灰度部署方式 73
5.2.1 蓝绿部署/发布 73
5.2.2 金丝雀发布 74
5.3 注意事项 75
5.3.1 数据采样 75
5.3.2 及时回滚 76
5.3.3 周期完全 76
5.3.4 测试完全 77
5.3.5 充分验证 78
5.4 案例―系统迁移下线操作 79
5.4.1 验证和比对 79
5.4.2 回滚 80
5.5 小结 81
第6章 过载保护 82
6.1 过载的现象及原因 82
6.1.1 什么是过载 82
6.1.2 过载现象及原因分析 85
6.2 处理方式 86
6.2.1 隔离 87
6.2.2 限流 88
6.2.3 节流和防抖 94
6.2.4 动态调节 95
6.2.5 尽早拒绝 96
6.2.6 调整缓冲区大小 97
6.2.7 减少重试 98
6.2.8 做好容量评估 98
6.3 小结 99
第7章 负载均衡 100
7.1 理论算法 100
7.1.1 基本轮询 100
7.1.2 加权轮询 102
7.1.3 随机访问 103
7.1.4 源地址Hash 104
7.1.5 最小连接数 105
7.1.6 映射分配 106
7.1.7 一致性Hash 107
7.2 动态负载均衡 110
7.3 常用组件 111
7.3.1 DNS 111
7.3.2 Nginx 111
7.3.3 LVS 113
7.3.4 NAT模式 113
7.3.5 DR模式 114
7.3.6 IP Tunneling模式 115
7.3.7 SDK组件 117
7.4 实际案例―Web类业务负载均衡实现 117
7.5 小结 119
第8章 柔性 120
8.1 理论基础 122
8.1.1 CAP定理 122
8.1.2 BASE理论 124
8.2 柔性的实现方法 126
8.2.1 产品角度 127
8.2.2 技术角度 128
8.3 验证方式 131
8.4 小结 132
第三部分 架构思维意识
第9章 稳定为王 137
9.1 控制因素 137
9.1.1 安全 137
9.1.2 变更 141
9.2 保障方法 144
9.2.1 合理拒绝 145
9.2.2 厘清主次关系 145
9.2.3 容量量化 147
9.2.4 预先准备 148
9.2.5 注重监控 149
9.2.6 敬畏之心 150
9.3 应对异常 152
9.3.1 处理事故 152
9.3.2 管理预期 153
9.3.3 复盘总结 153
9.3.4 有效预防 153
9.3.5 谨慎变更 154
9.4 小结 155
第10章 完成比完美重要 156
10.1 先扛住再优化 156
10.1.1 快速抢占市场 157
10.1.2 实现先于性能 157
10.1.3 需求可能修改 158
10.1.4 验证用户行为 158
10.1.5 突发问题案例 158
10.2 最小可用,快速迭代 160
10.3 不要等待 160
10.4 接受不完美 161
10.4.1 分清主次 161
10.4.2 自动化降级 162
10.4.3 代价最低 162
10.5 及时偿还技术债务 163
10.5.1 定期重构 164
10.5.2 及时清理 165
10.5.3 对技术有追求 167
10.6 小结 167
第11章 聚沙成塔 168
11.1 小而简洁 168
11.2 扩展能力 172
11.3 小结 173
第12章 自动化思维 175
12.1 拒绝重复 175
12.1.1 时间成本 175
12.1.2 解决重复 176
12.2 工具系统化 178
12.3 小结 180
第13章 产品思维 181
13.1 体验业务 181
13.2 体验竞品 182
13.3 扬长避短 183
13.4 控制欲望 184
13.5 献计献策 185
13.6 反哺方案 185
13.7 小结 186

第四部分 善用工具
第14章 算法 189
14.1 树状数组 190
14.1.1 问题场景 190
14.1.2 排行榜实现及优化方案 191
14.1.3 树状数组实现排行榜 191
14.1.4 树状数组优化排行榜 195
14.2 多阶Hash算法 196
14.2.1 原理 196
14.2.2 优点 197
14.2.3 缺点 198
14.3 利用线性同余的一致性Hash算法 199
14.3.1 算法内容 199
14.3.2 适用场景 199
14.3.3 实现原理 200
14.4 随机数在互联网业务中的应用 203
14.4.1 随机数的生成方法 203
14.4.2 误用随机数的场景 205
14.4.3 项目中用到随机数的场景 207
14.5 小结 212
第15章 流程和文化 213
15.1 流程 213
15.1.1 需求阶段 214
15.1.2 开发阶段 215
15.1.3 测试阶段 217
15.1.4 发布阶段 219
15.1.5 运营阶段 220
15.1.6 管理机制 221
15.2 文化 222
15.3 小结 223
第五部分 案例剖析
第16章 架构案例剖析 226
16.1 小型案例―统计用户在线时长 226
16.1.1 需求描述 226
16.1.2 项目背景 227
16.1.3 需求分析 228
16.1.4 实现方案 228
16.1.5 案例总结 230
16.2 中型案例―抽奖活动 231
16.2.1 需求描述 231
16.2.2 需求分析 231
16.2.3 实现方案 232
16.2.4 整体架构设计 238
16.2.5 案例总结 240
16.3 大型案例―短网址服务 241
16.3.1 需求描述 241
16.3.2 需求分析 241
16.3.3 需求一:内部使用 243
16.3.4 需求二:大型互联网服务方案 246
16.4 小结 256

短评

还好还好哈还好还好哈

2020-10-17 21:19:33

那你姐姐斤斤计较你那你忙你那密密麻麻内牛满面密密麻麻密密麻麻密密麻麻

2020-10-16 13:09:00

有很多干货,值得一读

2020-10-14 20:22:09

产品特色