性能优化不是仅局限于后台 ----Qzone 性能优化报告 QQ 空间产品中心 Qwang
Qzone 优化概述 <ul><li>存储优化 </li></ul><ul><ul><li>日志重构 </li></ul></ul><ul><li>访问优化 </li></ul><ul><ul><li>接入层 </li></ul></ul><u...
日志重构前问题分析 <ul><li>数据量增长过快 </li></ul><ul><ul><li>总数据量 9T </li></ul></ul><ul><ul><li>日增长量约 20G </li></ul></ul><ul><ul><li>扩容...
旧系统结构 <ul><li>模块 </li></ul><ul><ul><li>日志回复 </li></ul></ul><ul><ul><li>日志标题 </li></ul></ul><ul><ul><li>日志计数 </li></ul></ul...
Qzone 数据层优化(日志重构) <ul><li>与产品经理的 Trade-off </li></ul><ul><ul><li>区分近期日志与往期日志 </li></ul></ul><ul><li>区分活跃数据、非活跃数据和历史归档数据 </...
新系统结构 <ul><li>系统分三个模块:日志信息、日志标题、访问计数 </li></ul><ul><li>CGI 层对日志标题、访问计数模块有读 / 写权限;对日志标题模块只有读权限,其数据来源于日志信息模块 </li></ul>
日志信息模块结构
日志重构后的特点 <ul><li>将数据区分为活跃数据、不活跃数据和历史归档数据,减少 Cache 数据量,提升 Cache 命中率 </li></ul><ul><li>Cache 根据数据访问活跃度进行扩容 </li></ul><ul><li...
Qzone 日志重构前后数据对比 10000 次 / 秒 7000 次 / 秒 日志计数 4500 次 / 秒 5000 次 / 秒 日志信息 6000 次 / 秒 7100 次 / 秒 日志标题 访问量 4 台, 100G 4 台, 100G...
Qzone 访问速度慢 <ul><li>Http 请求量大,下载数据量大 </li></ul><ul><li>用户 CPU 消耗高 </li></ul><ul><li>用户经常投诉打不开 Qzone </li></ul>
Qzone 访问优化前测速
Qzone 访问提速优化 <ul><li>量化性能数据 </li></ul><ul><ul><li>关键路径时间点统计 </li></ul></ul>
Yahoo 14  性能优化规则 <ul><li>Make fewer HTTP requests </li></ul><ul><li>Use a CDN </li></ul><ul><li>Add an Expires header </li...
Qzone 访问优化 <ul><li>域名访问优化 </li></ul><ul><li>静态页面与动态数据分离 </li></ul><ul><li>减少 http 请求 </li></ul><ul><li>降低浏览器 CPU 消耗 </li><...
域名相关 <ul><li>减少 *.qzone.qq.com 域名的使用,降低动态 DNS 查询请求 </li></ul><ul><li>走访校园网及北方城市,发现双 ISP 的 local DNS 的问题 </li></ul><ul><li>...
静态页面相关 <ul><li>拆分静态页面、图片、样式及 flash ,分散至 imgcache.qq.com 等静态文件域名 </li></ul><ul><li>Imgcache.qq.com 的 CDN 外包 </li></ul><ul><...
减少 http 请求 <ul><li>合并小图片请求 </li></ul><ul><li>合并 css 和 js 文件 </li></ul><ul><li>合并动态数据请求 </li></ul><ul><li>动态数据支持 304 </li><...
小图片的请求合并( css+ 背景图)
合并 css 和 js 文件 <ul><li>合并 css 文件 </li></ul><ul><ul><li>进入 Qzone 只需要下载 2 个 css 文件 </li></ul></ul><ul><ul><li>Css 文件合并工具 </l...
合并动态数据请求 <ul><li>合并多个模块的动态数据为一个静态文件 </li></ul>
动态数据支持 304 <ul><li>对大数据量的请求在存储层上增加时间戳 </li></ul>
利用 js 变量和浏览器 Cache <ul><li>利用 js 变量 </li></ul><ul><ul><li>Js 将获取的动态数据放入数组变量 </li></ul></ul><ul><ul><li>每次发起动态数据请求前检查数组内是否保...
浏览器下载请求量和数据量对比 8K 48K 1.5M 2.4M 数据量 12 58 86 160 请求量 优化后(全 Cache ) 优化后(部分 Cache ) 优化后(无 Cache ) 优化前  
降低浏览器 CPU 消耗 <ul><li>将 XML 修改为 JSON </li></ul><ul><ul><li>降低浏览器 Parse XML 的 CPU 消耗 </li></ul></ul><ul><ul><li>支持跨域请求,减少 pr...
Ajax 优化 <ul><li>进行数据分级,按优先级顺序请求数据 </li></ul><ul><ul><li>打开 Qzone 所需的数据优先加载 </li></ul></ul><ul><ul><li>异步化请求,尽量避免浏览器同域下两个并发...
尽可能多的 Para-Downloading
Web Server 优化 <ul><li>拆分 CGI 异步逻辑 </li></ul><ul><ul><li>将可以异步化的逻辑交给异步 app server 处理 </li></ul></ul><ul><li>配置文件内存化 </li></...
轻量级 Web Server ( qzhttpd ) <ul><li>性能部分: </li></ul><ul><ul><li>所有机器的 CPU 的 idle 都维持在 90% - 93% 左右 </li></ul></ul><ul><ul><...
Qzone 访问测速( 2007.10 )
Qzone 访问测速( 2007.11 )
Qzone 访问测速( 2007.12 )
运营和监控系统 <ul><li>测速平台的搭建 </li></ul><ul><li>自动化测试 </li></ul><ul><li>自动化编译 </li></ul><ul><li>模块间调用 </li></ul><ul><li>服务器打包规范 ...
性能优化不可缺少的因素 <ul><li>领导的重视 </li></ul><ul><ul><li>成立虚拟项目组负责性能优化 </li></ul></ul><ul><ul><li>性能优化成为 KPI </li></ul></ul><ul><ul...
谢谢 The End
Upcoming SlideShare
Loading in …5
×

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

1,750 views

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,750
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
86
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

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

×