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

Like this? Share it with your network

Share

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

  • 1,743 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,743
On Slideshare
1,743
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
76
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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