Upload
topgeek
View
1.580
Download
10
Embed Size (px)
DESCRIPTION
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
Citation preview
性能优化不是仅局限于后台
----Qzone性能优化报告QQ空间产品中心
Qwang
Qzone优化概述
存储优化日志重构
访问优化接入层逻辑层表现层
日志重构前问题分析
数据量增长过快总数据量 9T
日增长量约 20G
扩容需进行大量数据搬迁Cache命中率低( 50%), DB压力大
旧系统结构模块
日志回复日志标题日志计数
优点CACHE内存化,提升性能多进程号段分布处理业务异步化
缺点CACHE量有限,命中率低,对 DB的性能依赖比较重模块相互独立,容易造成数据不一致
CGI
接入
共享内存
CACHE处理
DB接口
DB
接入
共享内存
CACHE处理
DB接口
DB
接入
共享内存
CACHE处理
DB接口
DB
日志标题 日志回复 日志计数
Qzone数据层优化(日志重构)
与产品经理的 Trade-off区分近期日志与往期日志
区分活跃数据、非活跃数据和历史归档数据二级缓存(内存 +文件)针对单个号码进行路由
新系统结构CGI
接入
共享内存
CACHE处理
DB接口
DB
接入
共享内存+文件
二级CACHE处理
DB接口
DB
接入
共享内存
CACHE处理
DB接口
DB
日志标题 日志信息 访问计数R
/W
R/WR
W
系统分三个模块:日志信息、日志标题、访问计数CGI层对日志标题、访问计数模块有读 /写权限;对日志标题模块只有读权限,其数据来源于日志信息模块
日志信息模块结构
DB接口
DB路由数据
接入
业务处理
(线程池)
共享内存
文件
数据淘汰
DB数据同步
CACHE数据
同步访问流水
更新流水更新数据同步
数据管理模块
接入
业务处理
(线程池)
共享内存
文件
数据淘汰
DB数据同步
CACHE数据
同步访问流水
更新流水更新数据同步
数据管理模块
Data Proxy
CACHE路由数据
Route Client
Data Proxy
CACHE路由数据
Route Server
Data Proxy
CACHE路由数据
Route Client
DB DB
DB组
DB DB
DB组
DB DB
DB组
以单个号码为单元
做路由
以时间做DB组的路由,组内以
号段做路由
可任意扩展模块
日志重构后的特点
将数据区分为活跃数据、不活跃数据和历史归档数据,减少 Cache数据量,提升 Cache命中率Cache根据数据访问活跃度进行扩容DB根据存储容量进行扩容
Qzone日志重构前后数据对比
10000 次 /秒7000 次 /秒日志计数
4500 次 /秒5000 次 /秒日志信息
6000 次 /秒7100 次 /秒日志标题
访问量
4台, 100G4 台, 100GDB
10 台, 122G ,命中率 100%10 台, 122G ,命中率 100%Cache
日志计数
12台, 10T20 台, 9TDB
12 台, 3T,命中率 80%20 台, 68G ,命中率 50%Cache
日志信息
5台, 600G5 台, 340GDB
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
614144680
其他静态数据相册图片动态数据静态页面Qzone http 总请求量
减少 http请求
合并小图片请求合并 css和 js文件合并动态数据请求动态数据支持 304
有效利用浏览器 cache和 js变量缓存动态数据
小图片的请求合并( css+背景图)
合并 css和 js文件
合并 css文件进入 Qzone只需要下载 2个 css文件Css文件合并工具
合并 js文件删除无用字符(空格、换行等)Js文件合并工具
合并动态数据请求
合并多个模块的动态数据为一个静态文件
HTTPSVR动态CGI处理模块
(cgi_qqzone.cgi)
CGIHOST(cgi_client_entry.cgi)
(cgi_qqzone_static.cgi)
TAFS
提供动态数据的
APACHE服务器
浏览器JS
标记服务
器
HTTP请求
HTTP请求
把动态数据写入TAFS
从TAFS读取数据
取动态
数据
UNSET标记位
SET标记位
获得标记位
动态数据支持 304
对大数据量的请求在存储层上增加时间戳
浏览器请求cgi
读取数据时间戳
浏览器时间戳<数据时间戳
读取浏览器上报时间戳
读取数据
返回304返回200
Yes
No
利用 js变量和浏览器 Cache
利用 js变量Js将获取的动态数据放入数组变量每次发起动态数据请求前检查数组内是否保存了相应数据
利用浏览器 cache取消了 Cache-Control: No-cache
使用 url+随机数避免浏览器 cache
浏览器下载请求量和数据量对比
8K48K1.5M2.4M数据量
125886160请求量
优化后(全 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