这是一本关于网站架构的书,阐述网站技术架构最基本的驱动力,基础的架构设计原理,以及构架方案选择的价值观。
第1篇,从演化、模式、要素三个维度描述网站整体架构。
第2篇,从性能、可用性、伸缩性、扩展性、安全五要素方面详细描述网站架构核心原理,其中重要的负载均衡、异步处理、分布式缓存等技术方案又在不同章节多角度描述。
第3篇,通过几个具体案例再一次从整体和局部描述网站架构方法。
第4篇,从架构师做事的角度回顾网站技术架构。
第1篇 概述
1 大型网站架构演化 2
1.1 大型网站软件系统的特点 3
高并发、大流量、高可用、海量数据、...渐进式发展。
1.2 大型网站架构演化发展历程 4
1.2.1 初始阶段的网站架构 4

1.2.2 应用服务和数据服务分离 4

侧重点:
应用程序:CPU
数据库服务器:磁盘内存
文件服务器:硬盘
1.2.3 使用缓存改善网站性能 5

二八定律:80%的业务访问集中在20%的数据上
缓存分为:1.本地缓存(应用服务器上),2.远程缓存(分布式缓存服务器上)
1.2.4 使用应用服务器集群改善网站的并发处理能力 6

使用集群是解决网站高并发、海量数据问题的常用手段。
1.2.5 数据库读写分离 7

配置两个数据库主从关系。
1.2.6 使用反向代理和CDN加速网站响应 8

CND:部署在网络提供商的机房,使用户在请求网站服务时,可以从距自己最近的机房获取数据。
反向代理:部署在网站的中心机房,当用户请求到达中心机房后,首先访问反向代理服务器,如果缓存着用户请求的资源,将直接返回给用户。
1.2.7 使用分布式文件系统和分布式数据库系统 9

分布式数据库是网站数据库拆分的最后手段,只有单表的数据量非常庞大时使用。网站更常用的数据库拆分手段是业务分库,将不同业务的数据部署在不同的服务器上。
1.2.8 使用NoSQL和搜索引擎 10

或者HBase
1.2.9 业务拆分 11

为了应对日益复杂的业务场景,使用分而治之的手段将整个网站业务分成不同的产品线,如交易网站:首页、店铺、买家、卖家、订单。
具体到技术上,也会根据产品线划分,拆分成许多应用,独立部署维护。通过超链接建立关系(导航栏地址指向不同应用)。
1.2.10 分布式服务 11

将入“用户管理”等公用的业务提取出来,独立部署。
1.3 大型网站架构演化的价值观 13
网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候就去追求网站的架构是舍木逐末,得不偿失的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对 13
伴随小型网站业务的逐步发展,演变成大型网站。
1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展 13
创新的业务发展模式对网站架构逐步提出高更的要求,才使得网站架构得以发展成熟。是业务成就了技术,事业成就了人,而不是相反。
1.4 网站架构设计误区 14
1.4.1 一味追随大公司的解决方案 14
值得学习借鉴,但不要盲从,失去坚持自我的勇气。
1.4.2 为了技术而技术 14
网站架构是为业务存在的,除此毫无意义。
1.4.3 企图用技术解决所有问题 14
技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段解决。
如:12306改成分时段售票。
1.5 小结 15
2 大型网站架构模式 16
模式的关键在于可重复性,通过模式的学习,掌握网站架构的一般思路和解决方案。
2.1 网站架构模式 16
2.1.1 分层 17

好处:便于分工合作开发和维护。
挑战:合理规划层次和接口。
2.1.2 分割 18
将不同功能的模块分割开来,包装成高内聚低耦合的模块单元,一方面有助于开发维护,另一方面提高并发处理能力和扩展能力。
2.1.3 分布式 18
更多机器:CPU、内存、存储资源更多
问题:网络、机器宕机、数据一致性、依赖性错综复杂
不要为了分布式而分布式,常用分布式:应用和服务、静态资源、数据和存储、计算(后台业务处理)、配置、锁、文件系统等。
2.1.4 集群 19
多机器通过负载均衡,提供系统可用性
2.1.5 缓存 20
改善性能的第一手段:CND、反向代理、本地缓存、分布式缓存。
前提:1.数据访问热点不均衡,2.数据不会很快过期(脏读)
2.1.6 异步 20
典型生产者消费者模式。
好处:提高系统可用性、加快网站相应速度、消除并发访问高峰。
注意:可能对用户体验、业务流程造成影响。
2.1.7 冗余 21
数据冗余备份,实现高可用。
数据库冷备份:定期备份存档。
数据库热备份:主从分离。
2.1.8 自动化 22
无人值守网站可以正常运行,一切自动化是网站的理想状态;自动化架构主要集中在发布维护方面。包括:
发布过程、代码管理、测试、安全检测、部署、监控、报警、失效移交、失效恢复、降级(关闭不重要的服务)、资源分配
2.1.9 安全 23
互联网的开发特性使其面对巨大安全挑战:
1.密码+手机码身份验证
2.交易等敏感数据加密
3.验证码识别机器人
4.XSS攻击、SQL注入等进行编码转移
5.敏感信息过滤
6.对转账等重要操作风险管控
2.2 架构模式在新浪微博的应用 23

2.3 小结 25
3 大型网站核心架构要素 26
软件架构:有关软件整体结构与组件得抽象描述,用于指导大型软件系统各个方面得设计。
除系统功能需求外,需要关注5个要素
3.1 性能 27
性能是一个网站的重要指标。
3.2 可用性 28
3.3 伸缩性 29
3.4 扩展性 30
3.5 安全性 30
3.6 小结 31
第2篇 架构
4 瞬时响应:网站的高性能架构 34
4.1 网站性能测试 35
4.1.1 不同视角下的网站性能 35
4.1.2 性能测试指标 36
4.1.3 性能测试方法 39
4.1.4 性能测试报告 41
4.1.5 性能优化策略 41
4.2 Web前端性能优化 42
4.2.1 浏览器访问优化 42
4.2.2 CDN加速 43
4.2.3 反向代理 44
4.3 应用服务器性能优化 45
4.3.1 分布式缓存 45
4.3.2 异步操作 52
4.3.3 使用集群 53
4.3.4 代码优化 54
4.4 存储性能优化 58
4.4.1 机械硬盘vs. 固态硬盘 58
4.4.2 B+树vs. LSM树 59
4.4.3 RAID vs. HDFS 61
4.5 小结 64
5 万无一失:网站的高可用架构 66
5.1 网站可用性的度量与考核 67
5.1.1 网站可用性度量 67
5.1.2 网站可用性考核 67
5.2 高可用的网站架构 69
5.3 高可用的应用 71
5.3.1 通过负载均衡进行无状态服务的失效转移 72
5.4 高可用的服务 76
5.5 高可用的数据 78
5.5.1 CAP原理 79
5.5.2 数据备份 82
5.5.3 失效转移 84
5.6 高可用网站的软件质量保证 85
5.6.1 网站发布 85
5.6.3 预发布验证 87
5.6.4 代码控制 88
5.6.5 自动化发布 90
5.6.6 灰度发布 91
5.7 网站运行监控 91
5.7.1 监控数据采集 92
5.7.2 监控管理 93
5.8 小结 94
6 永无止境:网站的伸缩性架构 95
6.1 网站架构的伸缩性设计 97
6.1.1 不同功能进行物理分离实现伸缩 97
6.1.2 单一功能通过集群规模实现伸缩 98
6.2 应用服务器集群的伸缩性设计 99
6.2.2 DNS域名解析负载均衡 101
6.2.4 IP负载均衡 103
6.2.5 数据链路层负载均衡 104
6.2.6 负载均衡算法 105
6.3 分布式缓存集群的伸缩性设计 106
6.3.1 Memcached分布式缓存集群的访问模型 107
6.3.2 Memcached分布式缓存集群的伸缩性挑战 107
6.3.3 分布式缓存的一致性Hash算法 109
6.4 数据存储服务器集群的伸缩性设计 112
6.4.1 关系数据库集群的伸缩性设计 113
6.4.2 NoSQL数据库的伸缩性设计 117
6.5 小结 119
7 随需应变:网站的可扩展架构 121
7.1 构建可扩展的网站架构 122
7.2.2 分布式消息队列 124
7.3 利用分布式服务打造可复用的业务平台 126
7.3.1 Web Service与企业级分布式服务 128
7.3.2 大型网站分布式服务的需求与特点 129
7.3.3 分布式服务框架设计 130
7.4 可扩展的数据结构 131
7.5 利用开放平台建设网站生态圈 132
7.6 小结 134
8 固若金汤:网站的安全架构 135
8.1 道高一尺魔高一丈的网站应用攻击与防御 136
8.1.2 注入攻击 138
8.1.3 CSRF攻击 139
8.1.4 其他攻击和漏洞 140
8.1.6 网站安全漏洞扫描 142
8.2 信息加密技术及密钥安全管理 142
8.2.1 单向散列加密 143
8.2.2 对称加密 144
8.2.4 密钥安全管理 145
8.3 信息过滤与反垃圾 146
8.3.1 文本匹配 147
8.3.2 分类算法 148
8.3.3 黑名单 149
8.4 电子商务风险控制 150
8.4.1 风险 151
8.4.2 风控 151
8.5 小结 153
第3篇 案例
9 淘宝网的架构演化案例分析 156
9.1 淘宝网的业务发展历程 157
9.2 淘宝网技术架构演化 158
9.3 小结 162
10 维基百科的高性能架构设计分析 163
10.1 Wikipedia网站整体架构 163
10.2 Wikipedia性能优化策略 165
10.2.1 Wikipedia前端性能优化 165
10.2.2 Wikipedia服务端性能优化 166
10.2.3 Wikipedia后端性能优化 167
11 海量分布式存储系统Doris的高可用架构设计分析 169
11.1 分布式存储系统的高可用架构 170
11.2 不同故障情况下的高可用解决方案 171
11.2.1 分布式存储系统的故障分类 172
11.2.2 正常情况下系统访问结构 172
11.2.3 瞬时故障的高可用解决方案 173
11.2.4 临时故障的高可用解决方案 174
11.2.5 永久故障的高可用解决方案 175
12 网购秒杀系统架构设计案例分析 176
12.1 秒杀活动的技术挑战 177
12.2 秒杀系统的应对策略 177
12.3 秒杀系统架构设计 178
12.4 小结 182
13 大型网站典型故障案例分析 183
13.1 写日志也会引发故障 184
13.2 高并发访问数据库引发的故障 184
13.3 高并发情况下锁引发的故障 185
13.4 缓存引发的故障 185
13.5 应用启动不同步引发的故障 186
13.6 大文件读写独占磁盘引发的故障 186
13.7 滥用生产环境引发的故障 187
13.8 不规范的流程引发的故障 187
13.9 不好的编程习惯引发的故障 188
13.10 小结 188
第4篇 架构师
14 架构师领导艺术 190
14.1 关注人而不是产品 191
14.2 发掘人的优秀 191
14.3 共享美好蓝图 192
14.4 共同参与架构 193
14.5 学会妥协 194
14.6 成就他人 194
15 网站架构师职场攻略 196
15.1 发现问题,寻找突破 197
15.2 提出问题,寻求支持 199
15.3 解决问题,达成绩效 201
16 漫话网站架构师 203
16.1 按作用划分架构师 203
16.2 按效果划分架构师 204
16.3 按职责角色划分架构师 205
16.4 按关注层次划分架构师 205
16.5 按口碑划分架构师 206
16.6 非主流方式划分架构师 207
附录A 大型网站架构技术一览 208
附录B Web开发技术发展历程 215
后记 218
《大型网站技术架构:核心原理与案例分析》读书笔记
原文:https://www.cnblogs.com/fancybox/p/10114571.html