腾讯大讲堂06 qq邮箱性能优化
Post on 05-Jul-2015
554 Views
Preview:
DESCRIPTION
TRANSCRIPT
QQ邮箱系统优化
广州研发中心 Harvey
目录
QQMAIL总体架构
服务器性能优化
网络性能优化
代码框架优化
QQMAIL总体架构(简图)
QQMAIL总体架构
Web: 支持95%的登录请求。提供读信、写信、用户信息管理等功能。
BG:邮件队列,负责将本域用户发出的邮件投递到目标地址。
MX(Mail eXchange):接收外域邮件运营商发往本域的邮件。
POP/SMTP:提供基于Mail Client的服务。
QS:向QQ Client提供新邮件Notify服务。
Account:存储邮箱名/UIN映射关系。以及开通状态等主属性。
MS(Mail Storage):存储邮件实体。
IndexServer:用户个人信息,包括:邮件索引(发件人、主题、MS
FileID等),文件夹,帐户配置信息、个人过滤规则、个人黑白名单6
种数据。
目录
QQMAIL总体架构
服务器性能优化
网络性能优化
代码框架优化
服务器性能优化
从何处入手?
服务器性能优化-数据收集
注: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万/天。
服务器性能优化-设定目标
优化Index Disk I/O
支持数据扩展--不修改服务器代码条件下动态扩展结构
支持备份
避免风险--采用简单设计
服务器性能优化方案-NewMailSvr
构建专门的“新邮件服务器”,面向QS (占总查询量的22%) ,
专用于缓存新邮件索引数据。
特点:
无内存Cache
每用户使用固定4K盘块存储最近若干封新邮件
按UIN直接定位盘块偏移位置
服务器性能优化方案- IndexServer
引入内存Cache:选择半小时76%命中率方案
改变存储结构:散列文件=>桶文件
10,000连续UIN划分一个用户组。One Group One Lock
数据分配以块为单位。每用户组有15个桶文件,分别用于
分配1K/2K/4K/…/16M的数据块(2倍递增)。
使用桶文件头部的BITMAP管理数据块。
服务器性能优化-桶文件结构
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>
服务器性能优化-桶文件结构-可扩展结构
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
通过字段配置表动态
解释存储数据,扩展
字段时无须割接
服务器性能优化-效果
单机性能: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性能曲线(纵轴为毫
秒,横轴为小时)
服务器性能优化
Anything else?
服务器性能优化-性能监控
定义专项的性能日志,与监控平台连接,反应时间1小时。
先敌发现,先行摧毁!
后台服务器跟踪
访问接口
关键调用
CGI性能跟踪
CGI整体运行时间
后台接口调用时间
每日邮件自动报警
服务器性能优化-监控图表
服务器性能优化-小技巧
实现TimeTrack对象,在构造时开始计时,析构时记录时间。
在每个函数开始位置嵌入TimeTrack对象,可以得到类似
Quantify的报表。
目录
QQMAIL总体架构
服务器性能优化
网络性能优化
代码框架优化
网络性能优化-数据采集-JS上报
JS上报:收集的数据包含了页面下载延时和浏览器运算时间,
能够真实反映用户访问速度。
网络性能优化-数据采集
网络性能优化-设定目标
登录平均时间控制在8秒以内(国内最快的邮箱)
着重优化登录时间超过30秒的慢速用户
网络性能优化-Squid代理方案
北京、天津、广州等6个IDC部署Squid代理,超过30s的用户比例从4%下
降到3%。
检测Web服务器
状态,自动屏蔽
故障web服务器
Proxy根据IP校准表将错误接入的连接
重定向到正确区域
按来源IP返回电信
或网通Proxy地址
网络性能优化-静态资源分离
静态资源存储在独立的RES服务器上
采用qhttp,提升负荷能力
静态资源通过CDN进行分布,用户就近访问,提高访问速度。
相同文件下载速度从310ms提升到250ms。
网络性能优化-其它方案
基于CGI的页面输出,相比Ajax,在QQMAIL用户模型下获得更
优速度,排除了浏览器的性能干扰,且易于监控。
缩减链接数
静态资源HTTP ZIP传输
目录
QQMAIL总体架构
服务器性能优化
网络性能优化
代码框架优化
代码框架优化-CGI输出
HTTP Server
CGI
XML
模板解析器Template
HTML
显示 IE浏览器
AJAX引擎
TemplateDOM组合器
显示 IE浏览器
Ajax技术 传统HTML技术
一套CGI同时支持
AJAX和传统HTML
技术。
代码框架优化-CGI代码框架
CGI程序从基础CGI对象继承,提供以下功能:
强制的Session检查机制
统一的错误处理(Exception)
命令行调试机制
XML到HTML数据格式转换
提升开发效率和安全性
Standard Library
Session校验机制
CGI Framework
自定义处理程序
输出数据格式转换错误标准处理机制
调试机制
Q&A
top related