《大型网站技术架构》笔记

cover

大型网站架构演化

大型网站软件系统的特点

  • 高并发,大流量
  • 高可用
  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展

大型网站架构演化发展历程

参考

1.初始阶段

1

2.应用服务和数据服务分离

2

3.使用缓存改善网站性能

3

4.使用应用服务器集群改善网站并发能力

4

5.数据库的读写分离

5

6.使用反向代理和CDN加速网站响应

6

7.使用分布式文件系统和分布式数据库系统

7

8.使用NoSQL和搜索引擎

8

9.业务拆分

9

  1. 分布式服务

10

大型网站架构演化的价值观

  • 大型网站架构技术的核心价值是随网站所需灵活应对
  • 驱动大型网站技术发展的主要力量是网站的业务发展

网站架构设计误区

  • 一味追随大公司的解决方案
  • 为了技术而技术
  • 企图用技术解决所有问题

大型网站架构模式

网站架构模式

  • 分层(最常见的三层为应用层、服务层和数据层)
  • 业务分割
  • 分布式
    • 分布式应用和服务
    • 分布式静态资源
    • 分布式数据和存储
    • 分布式计算
  • 集群
  • 缓存
    • CDN
    • 反向代理
    • 本地缓存
    • 分布式缓存
  • 异步
  • 冗余
  • 自动化
  • 安全

大型网站核心架构要素

  • 性能
  • 可用性
  • 伸缩性
  • 扩展性
  • 安全性

网站的高性能架构

网站性能测试

不同视角下的网站性能

  • 用户角度就是用户在浏览器上直观感受到的网站响应速度
  • 开发人员关注应用程序本身及其相关子系统的性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标
  • 运维人员关注基础设施性能和资源利用率

性能测试指标

  • 响应时间
  • 并发数
  • 吞吐量 TPS/HPS/QPS
  • 性能计数器
    • System Load
    • 对象与线程数
    • 内存使用
    • CPU使用
    • 磁盘与网络I/O

性能测试方法

  • 性能测试
  • 负载测试
  • 压力测试
  • 稳定性测试

性能测试报告样例

并发数 响应时间(ms) TPS 错误率(%) Load 内存(G) 备注
10 500 20 0 5 8 性能测试
20 800 30 0 10 10 性能测试
30 1000 40 2 15 14 性能测试
40 1200 45 20 30 16 负载测试
60 2000 30 4 50 16 压力测试
80 超时 0 100 不详 不详 压力测试

Web前端性能优化

  • 浏览器访问优化
    • 减少http请求
    • 使用浏览器缓存
    • 启用压缩
    • CSS和JS文件位置
    • 减少Cookie传输
  • CDN加速
  • 反向代理 - 安全保护 配置缓存加速 负载均衡

应用服务器性能优化

  • 分布式缓存 - 优先考虑使用缓存优化性能是第一定律
    • 缓存原理就是Key/Value的Hash表
    • 二八定律 - 80%的访问落在20%的数据上
    • 合理使用缓存
      • 频繁修改的数据不适合,读写比2:1以上
      • 没有热点的访问不适合
      • 数据不一致与脏读问题
      • 缓存可用性
      • 缓存预热
      • 缓存穿透
    • 分布式缓存架构
    • Memcached
      • 简单的通信协议
      • 丰富的客户端程序
      • 高性能的网络通信
      • 高效的内存管理
      • 互不通信的服务器集群架构
  • 异步操作
  • 使用集群
  • 代码优化
    • 多线程
    • 资源复用 - 单例和对象池
    • 数据结构
    • 垃圾回收

存储性能优化

  • 机械硬盘 vs 固态硬盘
  • B+树 vs LSM树
  • RAID vs HDFS

网站的高可用架构

网站可用性度量与考核

一般用N个9度量

分类 描述 权重
事故级故障 严重故障,网站整体不可用 100
A类故障 网站访问不顺畅或核心功能不可用 20
B类故障 非核心功能不可用,或核心功能少数用户不可用 5
C类故障 以上故障以外的其他故障 1

高可用的网站架构

  • 数据和服务的冗余备份及失效转移
  • 应用层和服务层一般使用负载均衡设备构建集群,数据层在数据写入时进行数据同步复制,实现数据冗余备份
  • 还要考虑因升级发布引起的宕机

高可用的应用

  • 通过负载均衡进行无状态服务的失效转移
  • 应用服务器集群的Session管理
    • Session复制
    • Session绑定
    • 利用Cookie记录Session
    • Session服务器

高可用的服务

  • 分级管理,核心应用和服务使用更好的硬件,服务部署上进行必要的隔离,避免故障连锁反应
  • 超时设置,超时未响应重新调度
  • 异步调用
  • 服务降级,两种方式:拒绝服务和关闭功能
  • 幂等性设计

高可用数据

  • CAP理论
  • 数据备份
    • 冷备份,定期备份
    • 异步热备份(关系型数据库的异步热备即是Master-Slave模式)
    • 同步热备份
  • 失效转移
    • 失效确认
    • 访问转移
    • 数据恢复

高可用网站的软件质量保证

  • 网站发布
  • 自动化测试
  • 预发布验证
  • 代码控制
  • 自动化发布
  • 灰度发布 - 分批次部分发布

网站运行监控

监控数据采集

用户行为日志收集

包含用户操作系统、浏览器版本信息,IP地址,页面访问路径,页面停留时间等,可以通过服务器端日志收集和客户端浏览器日志收集

服务器性能监控

运行数据报告

监控管理

  • 系统报警
  • 失效转移
  • 自动优雅降级

网站的伸缩性架构

网站架构的伸缩性设计

  • 不同功能进行物理分离实现伸缩 - 横向、纵向
  • 单一功能通过集群规模实现伸缩 - 应用服务器集群、数据服务器集群

应用服务器集群的伸缩性设计

重要手段 - 负载均衡 参考

  • HTTP重定向负载均衡 参考
  • DNS域名解析负载均衡 参考
  • 反向代理负载均衡 参考
  • IP负载均衡 参考
  • 数据链路层负载均衡 参考
  • 负载均衡算法
    • 轮询
    • 加权轮询
    • 随机
    • 最少连接
    • 原地址散列

分布式缓存集群的伸缩性设计

  • Memcached
  • 分布式缓存的一致性Hash算法

数据存储服务器集群的伸缩性设计

  • 关系数据库集群的伸缩性设计

数据库主从读写分离或业务拆分

产品:Amoeba Cobar

  • NoSQL数据库的伸缩性设计

网站的可扩展架构

构建可扩展的网站架构

低耦合设计

利用分布式消息队列降低系统耦合性

  • 事件驱动架构

通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间的合作,比如常见的生产者消费者模式

  • 分布式消息队列

将队列数据结构部署到独立的服务器上,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用

利用分布式服务打造可复用的业务平台

关键的解决方案还是拆分,将模块独立部署,降低系统耦合性。

  • Web Service
  • 大型网站分布式服务的需求与特点
    • 负载均衡
    • 失效转移
    • 高效的远程通信
    • 整合异构系统
    • 对应用最少侵入
    • 版本管理
    • 实时监控
  • 分布式服务架构(Dubbo)

可扩展的数据结构

NoSQL中使用ColumnFamily设计

利用开放平台建设网站生态圈

  • API接口
  • 协议转换
  • 安全
  • 审计
  • 路由
  • 流程

网站的安全架构

网站应用攻击与防御

  • XSS
    • 消毒 - 转义html危险字符
    • HttpOnly属性的Cookie
  • 注入攻击 - SQL注入和OS注入
    • 开源获取数据库结构
    • 错误回显获取数据库结构
    • 盲注
    • 消毒防御
    • 参数绑定防御
  • CSRF攻击
  • 其他
    • Error Code
    • HTML注释
    • 文件上传
    • 路径遍历
  • Web应用防火墙 - ModSecurity
  • 网站安全漏洞扫描

信息加密技术和密钥安全管理

  • 单向散列加密
  • 对称加密
  • 分对称加密
  • 密钥安全管理
    • 密钥和算法放在独立服务器
    • 加解密算法放在应用系统中,密钥放在独立服务器,密钥切分成数片放在不同存储介质

信息过滤与反垃圾

电子商务风险控制