此为《大型网站技术架构核心原理与案例分析》的记录

概述

大型网站架构演化

特点

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

历程

  • 单体服务器
  • 前后端分离、应用服务和数据服务分离
  • 加入缓存和分布式缓存服务器
  • 使用服务器集群改善并发处理能力
  • 数据库读写分离
  • 使用反向代理和CDN加速网站响应
  • 使用分布式文件系统和分布式数据库系统
  • 使用noSQL和搜索引擎
  • 业务拆分
  • 分布式服务

价值观

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

误区

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

大型网站架构模式

  • 分层,基本分为应用层、服务层、数据层,各层必须合理规划层次边界和接口,严格遵循分层架构的约束,禁止跨层调用和逆向调用;
  • 分割,将不同功能按照高内聚低耦合模块单元进行分割,提高并发处理能力和功能扩展能力;
  • 分布式
    • 分布式应用和服务
    • 分布式静态资源
    • 分布式数据和存储
    • 分布式计算
  • 集群,独立部署的服务器集群化,通过负载均衡设备共同对外提供服务
  • 缓存,使用缓存的前提:数据访问热点不均衡;数据在某个时间段有效,不会很快过期
  • 异步,将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行。异步架构是典型的生产者消费者模式。
    • 提高系统可用性
    • 加快网站响应速度
    • 消除并发访问高峰
  • 冗余
  • 自动化
  • 安全

大型网站核心架构要素

架构:最高层次的规划、南里改变的决定

软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

架构的五要素:功能、性能、可用性、伸缩性、扩展性和安全性

架构

网站的高性能架构

网站性能测试

  • 用户视角
  • 开发视角
  • 运维视角

性能测试指标

  • 响应时间
  • 并发数
  • 吞吐量
  • 性能计数器

性能测试方法

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

性能测试报告

性能优化策略

  • 性能分析
  • 性能优化

前端性能优化

  • 浏览器访问优化
    • 减少HTTP请求
    • 使用浏览器缓存
    • 启用压缩
    • CSS放到页面最上,JavaScript放到最下
    • 减少Cookie
  • 使用CDN加速
  • 反向代理

应用服务器性能优化

  • 分布式缓存
  • 合理使用缓存
  • 分布式缓存架构
  • Memcached
  • 异步操作
  • 使用集群
  • 代码优化
    • 多线程
    • 资源复用
    • 数据结构
    • 垃圾回收

存储性能优化

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

网站的高可用架构

网站可用性的度量和考核

网站可用性考核

高可用的网站架构

实现高可用架构的主要手段是数据和服务的冗余备份以及失效转移

  • 高可用的网站架构
  • 高可用的应用
  • 通过负载均衡进行无状态服务的失效转移

应用服务Session管理

Web应用中将这些多次请求修改使用的上下文对象称作绘画。Session管理主要有以下手段:

  1. Session 复制
  2. Session 绑定,基于负载均衡源地址Hash算法
  3. 利用 Cookie 记录 Session
  4. Session 服务器

高可用的服务

  1. 分级管理
  2. 超时设置
  3. 异步调用
  4. 服务降级
  5. 幂等性设计

高可用的数据

CAP原理:提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性这三个条件。

  • 数据持久性
  • 数据可访问性
  • 数据一致性
    • 数据强一致
    • 数据用户一致
    • 数据最终一致
  • 数据备份
    • 数据冷备
    • 数据热备
      • 异步热备
      • 同步热备
  • 失效转移
    • 失效确认
    • 访问转移
    • 数据恢复

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

  • 网站发布
  • 自动化测试
  • 预发布验证
  • 代码控制
    • 主干开发、分支发布
    • 分支开发、主干发布
    • 自动化发布
    • 灰度发布

网站运行监控

“不允许没有监控的系统上线”

  • 监控数据采集
    • 用户行为日志收集
      • 服务器端日志收集
      • 客户端浏览器日志收集
    • 服务器性能监控
    • 运行数据报告
  • 监控管理
    • 系统报警
    • 失效转移
    • 自动优雅降级

网站的伸缩架构

网站的伸缩性可分成两类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。

  • 不同功能进行物理分离实现伸缩
  • 单一功能通过集群规模实现伸缩

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

  • HTTP重定向负载均衡
  • DNS域名解析负载均衡
  • 反向代理负载均衡
  • IP负载均衡
  • 数据链路层负载均衡
  • 负载均衡算法

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

  • Memcached 分布式缓存集群的访问模型
  • 热添加缓存集群的伸缩性挑战
  • 分布式缓存的一致性Hash算法

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

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

网站的可扩展性架构

构建可扩展的网站架构

  • 开发低耦合系统
  • 模块化

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

  • 事件驱动架构
  • 分布式消息队列

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

  • Web Service 与企业级分布式服务
  • 分布式服务框架设计

可扩展的数据结构

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

网站的安全架构

网站应用攻击与防御

  • XSS 攻击 跨站点脚本攻击
    • 攻击类型:
      • 反射型
      • 持久型
    • 防御手段:
      • 消毒
      • HttpOnly
  • 注入攻击
    • 攻击类型:
      • 错误回显
      • 盲注
      • 开源搭建
    • 防御手段:
      • 消毒
      • 参数绑定
  • CSRF 攻击 跨站点请求伪造
    • 防御手段:
      • 表单Token
      • 验证码
      • Referer Check
  • 其他攻击和漏洞
  • Web应用防火墙
  • 网站安全漏洞扫描

加密技术及密钥安全管理

  • 单向散列加密
  • 对称加密
  • 非对称加密
  • 密钥安全管理

信息过滤与反垃圾

  • 文本匹配
  • 分类算法
  • 黑名单

电子商务风险控制

典型故障案例

  1. 写日志故障
    1. 应用程序日志和第三方组件日志输出要分别配置
    2. 日志文件输出级别为Warn,调用级别要符合其真实日志级别
    3. 检查第三方组件的error日志
  2. 高并发范文数据库引起故障
    1. 首页不应该访问数据库
    2. 首页最好是静态
  3. 高并发情况下锁引发的故障
    1. 谨慎操作锁操作
  4. 缓存引发的故障
    1. 当缓存成为了网站架构不可或缺的一部分时,对缓存的管理就要提高到和其他服务器一样的级别
  5. 大文件读写独占磁盘引发的故障
    1. 存储的使用需要根据不同文件类型和用途进行管理
    2. 图片等小文件应该使用专用存储服务器,不能和大文件共用存储

架构师

关注人而不是产品

寻找一个值得共同奋斗的目标,营造一个让大家能够最大限度发挥自我价值的工作氛围。

发掘人的优秀

共享美好蓝图

  • 蓝图应该是表述清楚的
  • 蓝图应该是形象的
  • 蓝图应该是简单的

共同参与架构

  • 不要只有架构师一个人拥有架构
  • 让其他人维护框架与架构文档

学会妥协、成就他人