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

34
性性性性性性性性性性性性 ----Qzone 性性性性性性 QQ 性性性性性性 Qwang

description

 

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

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

性能优化不是仅局限于后台

----Qzone 性能优化报告QQ 空间产品中心

Qwang

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

Qzone优化概述

存储优化日志重构

访问优化接入层逻辑层表现层

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

日志重构前问题分析

数据量增长过快总数据量 9T

日增长量约 20G

扩容需进行大量数据搬迁Cache 命中率低( 50% ), DB 压力大

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

旧系统结构模块

日志回复日志标题日志计数

优点CACHE 内存化,提升性能多进程号段分布处理业务异步化

缺点CACHE 量有限,命中率低,对 DB 的性能依赖比较重模块相互独立,容易造成数据不一致

CGI

接入

共享内存CACHE处理

DB接口

DB

接入

共享内存CACHE处理

DB接口

DB

接入

共享内存CACHE处理

DB接口

DB

日志标题 日志回复 日志计数

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

Qzone数据层优化(日志重构)

与产品经理的 Trade-off区分近期日志与往期日志

区分活跃数据、非活跃数据和历史归档数据二级缓存(内存 + 文件)针对单个号码进行路由

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

新系统结构CGI

接入

共享内存CACHE处理

DB接口

DB

接入

共享内存+文件二级CACHE处理

DB接口

DB

接入

共享内存CACHE处理

DB接口

DB

日志标题 日志信息 访问计数R

/W

R/WR

W

系统分三个模块:日志信息、日志标题、访问计数CGI 层对日志标题、访问计数模块有读 / 写权限;对日志标题模块只有读权限,其数据来源于日志信息模块

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

日志信息模块结构

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组的路由,组内以号段做路由

可任意扩展模块

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

日志重构后的特点

将数据区分为活跃数据、不活跃数据和历史归档数据,减少 Cache 数据量,提升 Cache 命中率Cache 根据数据访问活跃度进行扩容DB 根据存储容量进行扩容

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

Qzone日志重构前后数据对比  重构前 重构后

数据量

日志标题Cache 10 台, 69G ,命中率 90% 10 台, 128G ,命中率 88%

DB 5 台, 340G 5 台, 600G

日志信息Cache 20 台, 68G ,命中率 50% 12 台, 3T ,命中率 80%

DB 20 台, 9T 12 台, 10T

日志计数Cache 10 台, 122G ,命中率 100% 10 台, 122G ,命中率 100%

DB 4 台, 100G 4 台, 100G

访问量

日志标题 7100 次 / 秒 6000 次 / 秒

日志信息 5000 次 / 秒 4500 次 / 秒

日志计数 7000 次 / 秒 10000 次 / 秒

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

Qzone访问速度慢

Http 请求量大,下载数据量大用户 CPU 消耗高用户经常投诉打不开 Qzone

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

Qzone访问优化前测速

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

Qzone访问提速优化量化性能数据

关键路径时间点统计

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

Yahoo 14 性能优化规则1. Make fewer HTTP requests2. Use a CDN3. Add an Expires header4. Gzip components5. Put CSS at the top6. Move JS to the bottom7. Avoid CSS expressions8. Make JS and CSS external9. Reduce DNS lookups10. Minify JS11. Avoid redirects12. Remove duplicate scripts13. Turn off ETags14. Make AJAX cacheable and small

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

Qzone访问优化

域名访问优化静态页面与动态数据分离减少 http 请求降低浏览器 CPU 消耗Ajax 优化Web Server 优化

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

域名相关

减少 *.qzone.qq.com 域名的使用,降低动态 DNS 查询请求走访校园网及北方城市,发现双 ISP 的 local DNS 的问题前置机通过域名纠正被错误定位的用户

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

静态页面相关

拆分静态页面、图片、样式及 flash ,分散至 imgcache.qq.com 等静态文件域名Imgcache.qq.com 的 CDN 外包静态文件服务器优化

支持长连接支持 gzip 压缩使用 expires

Qzone http 总请求量 静态页面 动态数据 相册图片 其他静态数据

80 46 14 14 6

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

减少 http请求

合并小图片请求合并 css 和 js 文件合并动态数据请求动态数据支持 304

有效利用浏览器 cache 和 js 变量缓存动态数据

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

小图片的请求合并( css+背景图)

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

合并 css和 js文件

合并 css 文件进入 Qzone 只需要下载 2 个 css 文件Css 文件合并工具

合并 js 文件删除无用字符(空格、换行等)Js 文件合并工具

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

合并动态数据请求

合并多个模块的动态数据为一个静态文件

HTTPSVR动态CGI处理模块(cgi _qqzone.cgi )

CGIHOST(cgi_client_entry.cgi)

(cgi_qqzone_static.cgi)

TAFS

提供动态数据的

APACHE服务器

浏览器JS

标记服务器

HTTP请求

HTTP请求

把动态数据写入TAFS

从TAFS读取数据

取动态数据

UNSET标记位

SET标记位

获得标记位

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

动态数据支持 304

对大数据量的请求在存储层上增加时间戳 浏览器请求cgi

读取数据时间戳

浏览器时间戳<数据时间戳

读取浏览器上报时间戳

读取数据

返回304返回200

Yes

No

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

利用 js变量和浏览器 Cache

利用 js 变量Js 将获取的动态数据放入数组变量每次发起动态数据请求前检查数组内是否保存了相应数据

利用浏览器 cache取消了 Cache-Control: No-cache

使用 url+随机数避免浏览器 cache

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

浏览器下载请求量和数据量对比

  优化前 优化后(无 Cache )

优化后(部分 Cache ) 优化后(全Cache )

请求量 160 86 58 12

数据量 2.4M 1.5M 48K 8K

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

降低浏览器 CPU消耗将 XML修改为 JSON

降低浏览器 Parse XML 的 CPU 消耗支持跨域请求,减少 proxy.html 请求

减少 iframe 的使用尽可能使用 div

合理使用 cookie浏览器 20 个同域 cookie 的限制减少因 cookie 过多造成的分包

Item 文件检查工具

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

Ajax优化

进行数据分级,按优先级顺序请求数据

打开 Qzone所需的数据优先加载异步化请求,尽量避免浏览器同域下两个并发请求的限制

图片延迟加载页面渲染相关的数据延迟加载

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

尽可能多的 Para-Downloading

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

Web Server优化拆分 CGI 异步逻辑

将可以异步化的逻辑交给异步 app server处理

配置文件内存化Cgi 90% 的消耗在读取配置文件使用 gprof 等工具

使用轻量级 Web Server放弃 apache 、优化 httpsvr减少共享内存加锁解锁的开销

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

轻量级Web Server( qzhttpd)性能部分:所有机器的 CPU 的 idle都维持在 90% - 93%左右周末高峰期:最大请求量: 900左右,平时都维持在: 200-400之间

原有服务和现有服务的差别:周一 至 周四:

httpsvr 进程 cpu最大占用率: 10% qzhttpd 进程 cpu最大占用率: 6% , 差别不大

周末:httpsvr 进程 cpu最大占用率: 20%qzhttpd 进程 cpu最大占用率: 10% , 差别较大

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

Qzone访问测速( 2007.10)

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

Qzone访问测速( 2007.11)

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

Qzone访问测速( 2007.12)

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

运营和监控系统

测速平台的搭建自动化测试自动化编译模块间调用服务器打包规范发布流程的规范

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

性能优化不可缺少的因素领导的重视

成立虚拟项目组负责性能优化性能优化成为 KPI互联网运营部可用性考核

兄弟部门的支持互联网运营部、互联网研发部、页面制作组、系统架构部、运营技术中心、管理工程部……

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

谢谢

The End