大型网站技术架构读书笔记
Jul 10, 2016·
·
4 min read

Shenghui (Samuel) Gu
本文为《大型网站技术架构:核心原理与案例分析》的读书笔记。
大型网站架构模式
- 分层:分层业务
- 分割:同层业务进行分割,如购物、论坛、搜索、广告
- 分布式
- 分布式应用和服务
- 分布式静态资源
- 分布式数据和存储
- 分布式计算
- 集群
- 缓存
- CDN
- 反向代理
- 本地缓存
- 分布式缓存
- 异步
- 冗余
- 自动化
- 安全
大型网站核心架构要素
性能、可用性、伸缩性、扩展性和安全性
网站的高性能架构
Web 前端性能优化
- 浏览器访问优化
- 减少 http 请求
- 使用浏览器缓存
- 启用压缩
- CSS 放在页面最上面,JavaScript 放在页面最下面
- 减少 Cookie 传输
- CDN 加速
- 反向代理
应用服务器性能优化
- 分布式缓存
- 频繁修改的数据:不要缓存频繁修改的数据。
- 没有热点的访问:大部分数据访问应该集中在小部分数据。
- 数据不一致与脏读:容忍数据的不一致。
- 缓存可用性:分布式缓存服务器集群。
- 缓存预热:在缓存系统启动时就把数据加载好。
- 缓存穿透:将不存在的数据也缓存(value 值为 null)。
- 异步操作
- 使用集群
- 代码优化
- 多线程
- 资源复用:单例和对象池
- 数据结构
- 垃圾回收
存储性能优化
- 机械硬盘 vs. 固态硬盘
- B+树 vs. LSM 树
- RAID vs. HDFS
网站的高可用架构
高可用的应用
- 通过负载均衡进行无状态服务的失效转移
- 应用服务器集群的 Session 管理
- Session 复制:适用小型网站。
- Session 绑定:将同一 IP 的请求分发到同一台服务器。极少使用。
- 利用 Cookie 记录 Session:将 Session 记录在客户端,每次请求就发送到服务器。
- 服务器处理后将修改的 Session 响应给客户端。
- Session 服务器
高可用的服务
- 分级管理:服务优先级
- 超时设置
- 异步调用:消息队列
- 服务降级
- 拒绝服务:拒绝低优先级应用的调用。
- 关闭功能:关闭部分不重要的服务,或者服务内部关闭部分不重要的功能。
- 幂等性设计:在服务层保证服务重复调用和调用一次产生的结果相同。
高可用的数据
- CAP 原理
- 数据一致性 Consistency
- 数据强一致性:各个副本总是一致。
- 数据用户一致:各个副本可能不一致,通过纠错和校验机制确定一个一致的数据给用户。
- 数据最终一致:一段时间后一致。
- 数据可用性 Availability
- 分区耐受性 Partition Tolerance
- 数据一致性 Consistency
- 数据备份
- 冷备份:物理存储,无法保证数据最终一致性。
- 热备份:异步热备份和同步热备份。
- 失效转移
- 失效确认:心跳检测和应用程序访问失败报告。
- 访问转移
- 数据恢复
软件质量保障
- 网站发布
- 自动化测试
- 预发布验证
- 代码控制:版本控制
- 自动化发布
- 灰度发布:部分发布
网站运行监控
- 监控数据采集
- 用户行为日志收集
- 服务器端日志收集
- 客户端浏览器日志收集
- 服务器性能监控
- 运行数据报告
- 用户行为日志收集
- 监控管理
- 系统报警
- 失效转移
- 自动优雅降级
网站的伸缩性架构
网站架构的伸缩性设计
- 不同功能进行物理分离实现伸缩
- 单一功能通过集群规模实现伸缩
应用服务器集群的伸缩性设计
HTTP 重定向负载均衡:根据用户的 HTTP 请求计算真实的服务器地址,并写入 HTTP 重定向响应中返回。
优点是简单。 缺点是两次请求,性能差; 重定向服务器可能成为瓶颈,集群伸缩性规模有限; HTTP302 响应码重定向可能使搜索引擎判断为 SEO 作弊,降低排名。 因此不多见。
DNS 域名解析负载均衡:在 DNS 中映射多个 IP,根据算法返回 IP 地址。
大型网站总是部分使用 DNS 域名解析,作为第一级的负载均衡手段,得到的服务器同样也是负载均衡的内部服务器,最后将请求分发到真实的服务器上。
反向代理负载均衡:优点是负载均衡和反向代理集成在一起,部署简单。缺点是可能成为瓶颈。
IP 负载均衡:将用户请求的目的地址修改为真实服务器地址,并接收响应,最后修改源地址返回给用户。
数据链路层负载均衡:将真实服务器设置和负载均衡服务器相同的虚拟 IP,把用户请求的 mac 地址修改为真实服务器,服务器直接响应到用户。
负载均衡算法
- 轮询(Round Robin, RR)
- 加权轮询(Weighted Round Robin, WRR)
- 随机(Random):也可以用加权随机算法。
- 最少连接(Least Connections):分发到连接最少的服务器上。
- 源地址散列(Source Hashing):把 IP 地址进行 Hash 计算。
数据存储服务器集群的伸缩性设计
- 关系数据库集群:主从读写分离、分库(业务分割)、分片(将一张表拆分)。
- NoSQL 数据库:Apache HBase