腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
Upcoming SlideShare
Loading in...5
×
 

腾讯大讲堂17 性能优化不是仅局限于后台(qzone)

on

  • 1,585 views

腾讯大讲堂17 性能优化不是仅局限于后台(qzone)

腾讯大讲堂17 性能优化不是仅局限于后台(qzone)

Statistics

Views

Total Views
1,585
Views on SlideShare
1,585
Embed Views
0

Actions

Likes
3
Downloads
75
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

腾讯大讲堂17 性能优化不是仅局限于后台(qzone) 腾讯大讲堂17 性能优化不是仅局限于后台(qzone) Presentation Transcript

  • 性能优化不是仅局限于后台 ----Qzone 性能优化报告 QQ 空间产品中心 Qwang
  • Qzone 优化概述
    • 存储优化
      • 日志重构
    • 访问优化
      • 接入层
      • 逻辑层
      • 表现层
  • 日志重构前问题分析
    • 数据量增长过快
      • 总数据量 9T
      • 日增长量约 20G
      • 扩容需进行大量数据搬迁
      • Cache 命中率低( 50% ), DB 压力大
  • 旧系统结构
    • 模块
      • 日志回复
      • 日志标题
      • 日志计数
    • 优点
      • CACHE 内存化,提升性能
      • 多进程号段分布处理
      • 业务异步化
    • 缺点
      • CACHE 量有限,命中率低,对 DB 的性能依赖比较重
      • 模块相互独立,容易造成数据不一致
  • Qzone 数据层优化(日志重构)
    • 与产品经理的 Trade-off
      • 区分近期日志与往期日志
    • 区分活跃数据、非活跃数据和历史归档数据
    • 二级缓存(内存 + 文件)
    • 针对单个号码进行路由
  • 新系统结构
    • 系统分三个模块:日志信息、日志标题、访问计数
    • CGI 层对日志标题、访问计数模块有读 / 写权限;对日志标题模块只有读权限,其数据来源于日志信息模块
  • 日志信息模块结构
  • 日志重构后的特点
    • 将数据区分为活跃数据、不活跃数据和历史归档数据,减少 Cache 数据量,提升 Cache 命中率
    • Cache 根据数据访问活跃度进行扩容
    • DB 根据存储容量进行扩容
  • Qzone 日志重构前后数据对比 10000 次 / 秒 7000 次 / 秒 日志计数 4500 次 / 秒 5000 次 / 秒 日志信息 6000 次 / 秒 7100 次 / 秒 日志标题 访问量 4 台, 100G 4 台, 100G DB 10 台, 122G ,命中率 100% 10 台, 122G ,命中率 100% Cache 日志计数 12 台, 10T 20 台, 9T DB 12 台, 3T ,命中率 80% 20 台, 68G ,命中率 50% Cache 日志信息 5 台, 600G 5 台, 340G DB 10 台, 128G ,命中率 88% 10 台, 69G ,命中率 90% Cache 日志标题 数据量 重构后 重构前  
  • Qzone 访问速度慢
    • Http 请求量大,下载数据量大
    • 用户 CPU 消耗高
    • 用户经常投诉打不开 Qzone
  • Qzone 访问优化前测速
  • Qzone 访问提速优化
    • 量化性能数据
      • 关键路径时间点统计
  • Yahoo 14 性能优化规则
    • Make fewer HTTP requests
    • Use a CDN
    • Add an Expires header
    • Gzip components
    • Put CSS at the top
    • Move JS to the bottom
    • Avoid CSS expressions
    • Make JS and CSS external
    • Reduce DNS lookups
    • Minify JS
    • Avoid redirects
    • Remove duplicate scripts
    • Turn off ETags
    • Make AJAX cacheable and small
  • Qzone 访问优化
    • 域名访问优化
    • 静态页面与动态数据分离
    • 减少 http 请求
    • 降低浏览器 CPU 消耗
    • Ajax 优化
    • Web Server 优化
  • 域名相关
    • 减少 *.qzone.qq.com 域名的使用,降低动态 DNS 查询请求
    • 走访校园网及北方城市,发现双 ISP 的 local DNS 的问题
    • 前置机通过域名纠正被错误定位的用户
  • 静态页面相关
    • 拆分静态页面、图片、样式及 flash ,分散至 imgcache.qq.com 等静态文件域名
    • Imgcache.qq.com 的 CDN 外包
    • 静态文件服务器优化
      • 支持长连接
      • 支持 gzip 压缩
      • 使用 expires
    6 14 14 46 80 其他静态数据 相册图片 动态数据 静态页面 Qzone http 总请求量
  • 减少 http 请求
    • 合并小图片请求
    • 合并 css 和 js 文件
    • 合并动态数据请求
    • 动态数据支持 304
    • 有效利用浏览器 cache 和 js 变量缓存动态数据
  • 小图片的请求合并( css+ 背景图)
  • 合并 css 和 js 文件
    • 合并 css 文件
      • 进入 Qzone 只需要下载 2 个 css 文件
      • Css 文件合并工具
    • 合并 js 文件
      • 删除无用字符(空格、换行等)
      • Js 文件合并工具
  • 合并动态数据请求
    • 合并多个模块的动态数据为一个静态文件
  • 动态数据支持 304
    • 对大数据量的请求在存储层上增加时间戳
  • 利用 js 变量和浏览器 Cache
    • 利用 js 变量
      • Js 将获取的动态数据放入数组变量
      • 每次发起动态数据请求前检查数组内是否保存了相应数据
    • 利用浏览器 cache
      • 取消了 Cache-Control: No-cache
      • 使用 url+ 随机数避免浏览器 cache
  • 浏览器下载请求量和数据量对比 8K 48K 1.5M 2.4M 数据量 12 58 86 160 请求量 优化后(全 Cache ) 优化后(部分 Cache ) 优化后(无 Cache ) 优化前  
  • 降低浏览器 CPU 消耗
    • 将 XML 修改为 JSON
      • 降低浏览器 Parse XML 的 CPU 消耗
      • 支持跨域请求,减少 proxy.html 请求
    • 减少 iframe 的使用
      • 尽可能使用 div
    • 合理使用 cookie
      • 浏览器 20 个同域 cookie 的限制
      • 减少因 cookie 过多造成的分包
    • Item 文件检查工具
  • Ajax 优化
    • 进行数据分级,按优先级顺序请求数据
      • 打开 Qzone 所需的数据优先加载
      • 异步化请求,尽量避免浏览器同域下两个并发请求的限制
        • 图片延迟加载
        • 页面渲染相关的数据延迟加载
  • 尽可能多的 Para-Downloading
  • Web Server 优化
    • 拆分 CGI 异步逻辑
      • 将可以异步化的逻辑交给异步 app server 处理
    • 配置文件内存化
      • Cgi 90% 的消耗在读取配置文件
      • 使用 gprof 等工具
    • 使用轻量级 Web Server
      • 放弃 apache 、优化 httpsvr
      • 减少共享内存加锁解锁的开销
  • 轻量级 Web Server ( qzhttpd )
    • 性能部分:
      • 所有机器的 CPU 的 idle 都维持在 90% - 93% 左右
      • 周末高峰期:最大请求量: 900 左右,平时都维持在: 200-400 之间
    • 原有服务和现有服务的差别:
      • 周一 至 周四:
        • httpsvr 进程 cpu 最大占用率: 10%
        • qzhttpd 进程 cpu 最大占用率: 6% , 差别不大
      • 周末:
        • httpsvr 进程 cpu 最大占用率: 20%
        • qzhttpd 进程 cpu 最大占用率: 10% , 差别较大
  • Qzone 访问测速( 2007.10 )
  • Qzone 访问测速( 2007.11 )
  • Qzone 访问测速( 2007.12 )
  • 运营和监控系统
    • 测速平台的搭建
    • 自动化测试
    • 自动化编译
    • 模块间调用
    • 服务器打包规范
    • 发布流程的规范
  • 性能优化不可缺少的因素
    • 领导的重视
      • 成立虚拟项目组负责性能优化
      • 性能优化成为 KPI
      • 互联网运营部可用性考核
    • 兄弟部门的支持
      • 互联网运营部、互联网研发部、页面制作组、系统架构部、运营技术中心、管理工程部……
  • 谢谢 The End