Post on 20-Jan-2015
description
QQ邮箱系统优化
广州研发中心 Harvey
目录
QQMAIL 总体架构服务器性能优化网络性能优化代码框架优化
QQMAIL 总体架构(简图)
…
…
MX服务器 WEB服务器 QS服务器 SMTP服务器 POP3服务器
用户数据服务器(IndexSvr)
MS服务器 Account服务器
BG服务器
盘柜
外网
内网
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 ndexServer
Data Bl ock I ndex
TypeBl ockSi ze
PosUI N
Mai l I ndex
2K 251234
Fol der 1K 3115678
…… …… …………
……1K桶文件
……2K桶文件
2̂ nK桶文件 ………
指向
1.读用户邮件索引
2.查到文件与偏移
3.读磁盘4.获得数据
5.返回
BI TMAP
BI TMAP
Barrel <N>
服务器性能优化-桶文件结构-可扩展结构
Record Data Object 1
Field1 Field2
全局字段配置表1 Field1=STR
Field2=LONG
PhysicalRecord
Interpretor
Value1 Value2
全局字段配置表2 Field1=STR
Field2=LONGField3=BIT
Record Data Object 2
Value1 Value2 Value3
通过字段配置表动态解释存储数据,扩展字段时无须割接
服务器性能优化-效果
单机性能: IndexServer 提升 4.1 倍,峰值压力下保持平稳。整体性能: NewMailSvr 使整体再度提升 20% 。数据扩展:无代码修改及割接条件下,目前数据类型已从 6 种扩展到 20 种,原类型的字段扩展超过 30 个。文件数缩减: 9 亿号段下最大 135 万文件,约为改造前的 1/30
0 。备份:文件数缩减及组锁定策略使备份易于实施。在线性能对比
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 UDNew UD
新旧 IdxSvr 性能曲线(纵轴为毫秒,横轴为小时)
服务器性能优化
Anything else?
服务器性能优化-性能监控
定义专项的性能日志,与监控平台连接,反应时间 1 小时。先敌发现,先行摧毁 !
后台服务器跟踪访问接口关键调用
CGI 性能跟踪CGI 整体运行时间后台接口调用时间
每日邮件自动报警
服务器性能优化-监控图表
服务器性能优化-小技巧
实现 TimeTrack对象,在构造时开始计时,析构时记录时间。在每个函数开始位置嵌入 TimeTrack对象,可以得到类似 Qua
ntify 的报表。
目录
QQMAIL 总体架构服务器性能优化网络性能优化代码框架优化
网络性能优化-数据采集- JS上报
JS上报:收集的数据包含了页面下载延时和浏览器运算时间,能够真实反映用户访问速度。
网络性能优化-数据采集
网络性能优化-设定目标
登录平均时间控制在 8秒以内(国内最快的邮箱)着重优化登录时间超过 30秒的慢速用户
网络性能优化- Squid 代理方案
北京、天津、广州等 6 个 IDC 部署 Squid 代理,超过 30s 的用户比例从 4% 下降到 3% 。
http://mail.qq.com3DNS
IP校准表
Web Srv Web SrvWeb Srv Web SrvWeb Srv
IP校准表
电信区域 网通区域
Proxy Proxy
内网服务器
Squid
Web Srv
Squid
专线专线
检测 Web 服务器状态,自动屏蔽故障 web 服务器
检测 Web 服务器状态,自动屏蔽故障 web 服务器
Proxy 根据 IP 校准表将错误接入的连接重定向到正确区
域
Proxy 根据 IP 校准表将错误接入的连接重定向到正确区
域
按来源 IP 返回电信或网通 Proxy 地址
按来源 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