28
QQ邮箱系统优化 广州研发中心 Harvey

腾讯大讲堂06 qq邮箱性能优化

Embed Size (px)

Citation preview

Page 1: 腾讯大讲堂06 qq邮箱性能优化

QQ邮箱系统优化

广州研发中心 Harvey

Page 2: 腾讯大讲堂06 qq邮箱性能优化

目录

QQMAIL总体架构

服务器性能优化

网络性能优化

代码框架优化

Page 3: 腾讯大讲堂06 qq邮箱性能优化

QQMAIL总体架构(简图)

Page 4: 腾讯大讲堂06 qq邮箱性能优化

QQMAIL总体架构

Web: 支持95%的登录请求。提供读信、写信、用户信息管理等功能。

BG:邮件队列,负责将本域用户发出的邮件投递到目标地址。

MX(Mail eXchange):接收外域邮件运营商发往本域的邮件。

POP/SMTP:提供基于Mail Client的服务。

QS:向QQ Client提供新邮件Notify服务。

Account:存储邮箱名/UIN映射关系。以及开通状态等主属性。

MS(Mail Storage):存储邮件实体。

IndexServer:用户个人信息,包括:邮件索引(发件人、主题、MS

FileID等),文件夹,帐户配置信息、个人过滤规则、个人黑白名单6

种数据。

Page 5: 腾讯大讲堂06 qq邮箱性能优化

目录

QQMAIL总体架构

服务器性能优化

网络性能优化

代码框架优化

Page 6: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化

从何处入手?

Page 7: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-数据收集

注:2006年4月数据,目前(2007年10月)约为当时的10-15倍。

系统主要瓶颈为IndexServer的Disk I/O。数据量600G,4,000

万小文件。

QS查询:1.4亿/天,BITMAP过滤后的有效次数1,800万/天(仅

访问新邮件索引)--每次QQ登录仅访问一次,内存Cache效

果差。

IndexServer读访问:6,266万/天(不含QS查询),内存

Cache命中率(保持10/30/60/120/960分钟)分别为:

73%,76%,78%,78%,82%。

IndexServer增/删/改访问:1,590万/天。

Page 8: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-设定目标

优化Index Disk I/O

支持数据扩展--不修改服务器代码条件下动态扩展结构

支持备份

避免风险--采用简单设计

Page 9: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化方案-NewMailSvr

构建专门的“新邮件服务器”,面向QS (占总查询量的22%) ,

专用于缓存新邮件索引数据。

特点:

无内存Cache

每用户使用固定4K盘块存储最近若干封新邮件

按UIN直接定位盘块偏移位置

Page 10: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化方案- IndexServer

引入内存Cache:选择半小时76%命中率方案

改变存储结构:散列文件=>桶文件

10,000连续UIN划分一个用户组。One Group One Lock

数据分配以块为单位。每用户组有15个桶文件,分别用于

分配1K/2K/4K/…/16M的数据块(2倍递增)。

使用桶文件头部的BITMAP管理数据块。

Page 11: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-桶文件结构

Cl i ent

I ndexSer ver

Dat a Bl ock I ndex

TypeBl ock

Si zePosUI N

Mai l

I ndex2K 251234

Fol der 1K 3115678

…… …… …………

……1K桶文件

……2K桶文件

2^nK桶文件 ………

指向

1. 读用

户邮

件索

引2. 查到文件与偏移

3. 读磁盘

4. 获得数据

5. 返回

BI TMAP

BI TMAP

Bar r el <N>

Page 12: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-桶文件结构-可扩展结构

Record Data Object 1

Field1 Field2

全局字段配置表1

Field1=STR

Field2=LONG

Physical

Record

Interpretor

Value1 Value2

全局字段配置表2

Field1=STR

Field2=LONG

Field3=BIT

Record Data Object 2

Value1 Value2 Value3

通过字段配置表动态

解释存储数据,扩展

字段时无须割接

Page 13: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-效果

单机性能:IndexServer提升4.1倍,峰值压力下保持平稳。

整体性能:NewMailSvr使整体再度提升20%。

数据扩展:无代码修改及割接条件下,目前数据类型已从6种扩

展到20种,原类型的字段扩展超过30个。

文件数缩减:9亿号段下最大135万文件,约为改造前的1/300。

备份:文件数缩减及组锁定策略使备份易于实施。

在线性能对比

0

10

20

30

40

50

60

70

80

90

1 7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103

109

115

Ol d UD

New UD

新旧IdxSvr性能曲线(纵轴为毫

秒,横轴为小时)

Page 14: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化

Anything else?

Page 15: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-性能监控

定义专项的性能日志,与监控平台连接,反应时间1小时。

先敌发现,先行摧毁!

后台服务器跟踪

访问接口

关键调用

CGI性能跟踪

CGI整体运行时间

后台接口调用时间

每日邮件自动报警

Page 16: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-监控图表

Page 17: 腾讯大讲堂06 qq邮箱性能优化

服务器性能优化-小技巧

实现TimeTrack对象,在构造时开始计时,析构时记录时间。

在每个函数开始位置嵌入TimeTrack对象,可以得到类似

Quantify的报表。

Page 18: 腾讯大讲堂06 qq邮箱性能优化

目录

QQMAIL总体架构

服务器性能优化

网络性能优化

代码框架优化

Page 19: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-数据采集-JS上报

JS上报:收集的数据包含了页面下载延时和浏览器运算时间,

能够真实反映用户访问速度。

Page 20: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-数据采集

Page 21: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-设定目标

登录平均时间控制在8秒以内(国内最快的邮箱)

着重优化登录时间超过30秒的慢速用户

Page 22: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-Squid代理方案

北京、天津、广州等6个IDC部署Squid代理,超过30s的用户比例从4%下

降到3%。

检测Web服务器

状态,自动屏蔽

故障web服务器

Proxy根据IP校准表将错误接入的连接

重定向到正确区域

按来源IP返回电信

或网通Proxy地址

Page 23: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-静态资源分离

静态资源存储在独立的RES服务器上

采用qhttp,提升负荷能力

静态资源通过CDN进行分布,用户就近访问,提高访问速度。

相同文件下载速度从310ms提升到250ms。

Page 24: 腾讯大讲堂06 qq邮箱性能优化

网络性能优化-其它方案

基于CGI的页面输出,相比Ajax,在QQMAIL用户模型下获得更

优速度,排除了浏览器的性能干扰,且易于监控。

缩减链接数

静态资源HTTP ZIP传输

Page 25: 腾讯大讲堂06 qq邮箱性能优化

目录

QQMAIL总体架构

服务器性能优化

网络性能优化

代码框架优化

Page 26: 腾讯大讲堂06 qq邮箱性能优化

代码框架优化-CGI输出

HTTP Server

CGI

XML

模板解析器Template

HTML

显示 IE浏览器

AJAX引擎

TemplateDOM组合器

显示 IE浏览器

Ajax技术 传统HTML技术

一套CGI同时支持

AJAX和传统HTML

技术。

Page 27: 腾讯大讲堂06 qq邮箱性能优化

代码框架优化-CGI代码框架

CGI程序从基础CGI对象继承,提供以下功能:

强制的Session检查机制

统一的错误处理(Exception)

命令行调试机制

XML到HTML数据格式转换

提升开发效率和安全性

Standard Library

Session校验机制

CGI Framework

自定义处理程序

输出数据格式转换错误标准处理机制

调试机制

Page 28: 腾讯大讲堂06 qq邮箱性能优化

Q&A