《大型网站技术架构:核心原理与案例分析》读书笔记
写在前面:本书出版于2013年,鄙人工作第三年,此时(2018年9月底)看完此书,感觉收获并不多,并没有网上传闻那么牛逼,勉强6分(满分10),只能算是网站架构的入门科普书籍吧。
第一篇 概述
第一章 大型网站架构演化
大型网站软件系统的特点:
- 高并发、大流量
- 高可用
- 海量数据
- 用户分布广泛、网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
大型网站架构演化发展历程
- 初始阶段的网站架构
- 应用服务和数据服务分离
- 使用缓存改善网站性能
- 使用应用服务器集群改善网站的并发处理能力
- 数据库读写分离
- 使用反向代理和CDN加速网站响应
- 使用分布式文件系统和分布式数据库系统
- 使用NoSQL和搜索引擎
- 业务拆分
- 分布式服务
缓存分为两种,缓存在应用服务器的本地缓存和缓存在专门的分布式缓存服务器的远程缓存。
CDN和反向代理和基本原理都是使用缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;反向代理服务器则部署在网站的中心机房,用户请求到达机房后,首先访问反向代理服务器,若有缓存,直接返回给用户。
大型网站架构演化的价值观
- 大型网站架构技术的核心价值是随网站所需灵活应对
- 驱动大型网站技术发展的主要力量是网站的业务发展
网站架构设计误区
- 一味追随大公司的解决方案
- 为了技术而技术
- 企图用技术解决所有问题
第二章 大型网站架构模式
网站架构模式
- 分层,应用层、服务层、数据层;注意要合理规划层次边界和接口,禁止跨层次的调用或者逆向调用;横向切分;
- 分割,纵向切分,按照模块/功能/服务来分割
- 分布式,分布式应用和服务、静态资源、数据和存储、计算、配置、锁、文件系统
- 集群
- 缓存,包括CDN和反向代理;本地缓存和分布式缓存;使用缓存的两个前提条件:1. 数据访问热点不均衡,2. 数据在某个时间段内有效,不会很快过期;
- 异步,系统解耦的手段之一:分层、分割、分布、异步;单一服务器内,通过多线程共享内存队列的方式实现异步,分布式系统通过分布式消息队列实现异步;
- 冗余:数据定期备份、存档保存、冷备份、主从分离、实时同步热备份、灾备数据中心等;
- 自动化
- 安全
架构模式在新浪微博的应用
异步推拉相结合;
多级缓存;
第三章 大型网站核心架构要素
架构要素
- 性能,衡量指标:响应时间、TPS、系统性能计数器
- 可用性,手段:冗余、负载均衡
- 伸缩性,集群增加节点,一致性哈希算法
- 扩展性:衡量的主要标准就是:网站在添加新的业务产品时,是否可以实现对现有产品透明无影响;主要手段就是:事件驱动架构和分布式服务。
- 安全性
第二篇 架构
第四章 瞬时响应:网站的高性能架构
网站性能是客观指标,也是主观感受;
网站性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量指标;
- 不同视角下的网站性能:用户视角(优化手段:优化页面HTML样式、利用浏览器端的并发和异步特性、调整浏览器的缓存策略、使用CND服务、反向代理等);开发人员(关注响应延迟、系统吞吐量、并发处理能力、系统稳定性;优化手段:使用缓存加速数据读取、使用集群提高系统吞吐能力、使用异步消息加快请求响应以及削峰、代码优化);运维人员(关注基础设施性能和资源利用率,如网络运营商的带宽能力、服务器硬件配置、数据中心网络架构、服务器和网络带宽的资源利用率等,优化手段:建设优化骨干网、使用高性价比定制服务器、使用虚拟化技术优化资源利用率等)
- 性能测试指标:开发人员的视角:响应时间(重复请求取均值)、并发数(系统能够同时处理的请求的数量)、吞吐量(单位时间内系统处理的请求数量;TPS:每秒事务数;HPS:每秒HTTP请求数;QPS:每秒查询数)、性能计数器(指标:System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等)
- 性能测试方法:性能测试、负载测试、压力测试、稳定性测试
- 性能测试报告
- 性能优化策略:性能分析进而性能优化
Web前端性能优化
- 浏览器访问优化:减少HTTP请求(合并CSS,合并JS、合并图片);使用浏览器缓存(将CSS、JS、图标等静态文件缓存在浏览器中。更新静态资源时,采用批量更新的方法);启用压缩(在服务器端对文件进行压缩,在浏览器端对文件解压缩);CSS放在页面最上面,JS放在页面最下面;减少Cookie传输;
- CDN加速,CDN可以最短路径返回响应;缓存静态资源;
- 反向代理
应用服务器性能优化
- 分布式缓存
- 异步操作
- 使用集群
- 代码优化
存储性能优化
- 机械硬盘vs.固态硬盘,机械硬盘快速顺序读写、慢速随机读写;连续访问(数据存储在连续的磁盘空间上),随机访问(数据存储在不连续的磁盘空间)
- B+树vs.LSM树,为了改善数据访问特性,文件系统或者数据库系统通常会对数据排序后再存储,加快数据检索速度,
- RAIDvs.HDFS
第五章 万无一失:网站的高可用架构
网站可用性的度量与考核
…网站可用性度量
…网站可用性考核
高可用的网站架构
.高可用的应用
…通过负载均衡进行无状态服务的失效转移
…应用服务器集群的Session管理
.高可用的服务
.高可用的数据
…CAP原理
…数据备份
…失效转移
高可用网站的软件质量保证
…网站发布
…自动化测试
…预发布验证
…代码控制
…自动化发布
…灰度发布
.网站运行监控
…监控数据采集
…监控管理
第六章 永无止境:网站的伸缩性架构
.网站架构的伸缩性设计
…不同功能进行物理分离实现伸缩
…单一功能通过集群规模实现伸缩
.应用服务器集群的伸缩性设计
…HTTP重定向负载均衡
…DNS域名解析负载均衡
…反向代理负载均衡
…IP负载均衡
…数据链路层负载均衡
…负载均衡算法
.分布式缓存集群的伸缩性设计
…Memcached分布式缓存集群的访问模型
…Memcached分布式缓存集群的伸缩性挑战
…分布式缓存的一致性Hash算法
.数据存储服务器集群的伸缩性设计
…关系数据库集群的伸缩性设计
…NoSQL数据库的伸缩性设计
.小结
第七章 随需应变:网站的可扩展架构
.构建可扩展的网站架构
.利用分布式消息队列降低系统耦合性
…事件驱动架构
…分布式消息队列
.利用分布式服务打造可复用的业务平台
…WebService与企业级分布式服务
…大型网站分布式服务的需求与特点
…分布式服务框架设计
.可扩展的数据结构
.利用开放平台建设网站生态圈
.小结
第八章 固若金汤:网站的安全架构
目录
- 道高一尺魔高一丈的网站应用攻击与防御
- XSS攻击
- 注入攻击
- CSRF攻击
- 其他攻击和漏洞
- Web应用防火墙
- 网站安全漏洞扫描
- 信息加密技术及密钥安全管理
- 单向散列加密
- 对称加密
- 非对称加密
- 密钥安全管理
- 信息过滤与反垃圾
- 文本匹配
- 分类算法
- 黑名单
- 电子商务风险控制
- 风险
- 风控
第三篇 案例
第九章 淘宝网的架构演化案例分析
.淘宝网的业务发展历程
.淘宝网技术架构演化
.小结
第十章 维基百科的高性能架构设计分析
Wikipedia网站整体架构
主要组成部分:
- GeoDNS
- LVS
- Squid
- Lighttpd
- PHP
- Memcached
- Lucene
- MySQL
Wikipedia性能优化策略
- Wikipedia前端性能优化
- 包括DNS、CDN、反向代理、静态资源服务等;
- CDN缓存的几条准则:页面不含动态信息,避免页面内容缓存失效或者过期(部分失效或者过期也意味着页面的失真,即网站服务的不可靠性);每个页面有唯一的REST风格的URL,以便CDN可以快速查找并避免重复缓存;在HTML响应头写入缓存控制信息,通过应用控制内容是否缓存以及缓存有效期。
- Wikipedia服务端性能优化
- 使用APC,PHP字节码缓存模块,加速代码执行减少资源消耗;
- 使用Imagemagic进行图片处理和转化
- 使用text进行文本格式化,特别是将科学公式内容转化成图片格式
- 替换PHP的字符串查找函数strtr(),使用更优化的算法重构
- Wikipedia后端性能优化
- 包括缓存、存储、数据库;
- 针对缓存:
- 热点数据直接缓存到应用服务器的本地内存;
- 缓存数据内容尽量是应用服务器可以直接使用的格式,比如HTML格式,减少应用服务器从缓存中获取数据之后解析构造数据的代价;
- 存储Session对象
- MySQL优化:
- 增大内存;
- 将数据库事务一致性设置到较低水平,加快宕机恢复速度;
- 若Master数据库宕机,则切换到Slave数据库,关闭数据写服务,即关闭词条编辑功能;
- 使用RAID0磁盘阵列加速磁盘访问,提示性能读写问题,虽然降低数据库的持久可靠性,但其可靠性可以通过MySQL的主从复制、数据异步备份解决。
第十一章 海量分布式存储系统Doris的高可用架构设计分析
.分布式存储系统的高可用架构
.不同故障情况下的高可用解决方案
…分布式存储系统的故障分类
…正常情况下系统访问结构
…瞬时故障的高可用解决方案
…临时故障的高可用解决方案
…永久故障的高可用解决方案
第十二章 网购秒杀系统架构设计案例分析
目录
- 秒杀活动的技术挑战
- 对现有的网站业务造成冲击
- 高并发的应用请求,数据库负载
- 突然增加网络带宽和服务器带宽
- 直接下单:控制下单URL的随机性
- 秒杀系统的应对策略
- 秒杀系统独立部署
- 秒杀商品页面静态化
- 租借秒杀活动网络带宽
- 动态生成随机下单页面URL
- 秒杀系统架构设计
细节:网站的秒杀业务不能使用正常的业务流程,不能和正常的网站交易业务共用服务器,必须设计部署专门的秒杀系统,进行专门应对;
第十三章 大型网站典型故障案例分析
案例:
- 写日志也会引发故障,日志分类分别配置(本系统,第三方组件),日志级别
- 高并发访问数据库引发的故障,首页应该是静态的,不宜访问数据库,数据从缓存服务器或者搜索引擎服务器获取
- 高并发情况下锁引发的故障,加锁与解锁,细化锁的粒度(不要锁类,而应该锁代码块),操作耗时的方法(如远程调用)不宜加锁
- 缓存引发的故障,注重缓存服务器集群的管理与运维
- 应用启动不同步引发的故障,后端服务器启动完全之后才去启动前端服务器
- 大文件读写独占磁盘引发的故障,针对文件类型、大小使用不能的文件存储服务器,如HDFS,FastDFS等;
- 滥用生产环境引发的故障,生产环境隔离,增加预发布环境;
- 不规范的流程引发的故障,代码提交git diff,code review
- 不好的编程习惯引发的故障,NPE检查,输入对象尽量保证不是null,必要时构造空对象(使用空对象模式)
第四篇 架构师
第十四章 架构师领导艺术
目录
- 关注人而不是产品
- 发掘人的优秀
- 共享美好蓝图
- 共同参与架构
- 学会妥协
- 成就他人
第十五章 网站架构师职场攻略
目录
- 发现问题,寻找突破
- 提出问题,寻求支持
- 解决问题,达成绩效
第十六章 漫话网站架构师
按作用划分架构师
- 设计型架构师
- 救火型架构师
- 布道型架构师
- Geek型架构师
按效果划分架构师
- 夏尔巴人架构师
- 斯巴达人架构师
- 达官贵人架构师
按职责角色划分架构师
- 产品架构师
- 基础服务架构师
- 基础设施架构师
按关注层次划分架构师
- 只关注功能的架构师
- 关注非功能的架构师
- 关注团队组织和管理的架构师
- 关注产品运营的架构师
- 关注产品未来的架构师
按口碑划分架构师
- 最好的架构师
- 好的架构师
- 一般的架构师
- 差的架构师
- 最差的架构师
非主流方式划分架构师
- 普通架构师
- 文艺架构师
- 1+1架构师
附录A 大型网站架构技术一览
网站架构层次:
前端架构:
不包含业务逻辑,不处理动态内容;
- 浏览器优化技术
- CDN
- 动静分离、静态资源独立部署
- 图片服务,用户上传图片,产品图片等;
- 反向代理
- DNS
应用层架构:
- 开发框架
- 页面渲染
- 负载均衡
- Session管理
- 动态页面静态化
- 业务拆分
- 虚拟化服务器
服务层架构
- 分布式消息
- 分布式服务
- 分布式缓存
- 分布式配置
存储层架构
- 分布式文件
- 关系数据库
- NoSQL数据库
- 数据同步
后台架构
- 搜索引擎
- 数据仓库
- 推荐系统
数据采集与监控
- 浏览器数据采集
- 服务器业务数据采集
- 服务器性能数据采集
- 系统监控与报警
安全架构
- web攻击
- 数据保护
数据中心机房架构
- 机房架构
- 机柜架构
- 服务器架构
附录B Web开发技术发展历程
CGI,过时技术,了解即可,略;
MVC