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管理数据块。
服务器性能优化-桶文件结构

                                             C i ent
                                              l


                                                 1.
   D a Bl ock I ndex
    at                                              读                        5. 返回
                                                        用
                       Bl ock                               户
     UN
      I      Type
                        Si ze
                                Pos                          邮
                                                                 件
     1234
             M l
              ai
                        2K      25                                   索
            I ndex                                                       引
                                           2. 查到文件
     5678   Fol der     1K      311                与        偏移
     ……      ……         ……      ……                                   I ndexSer ver
                                      指向
                                                3. 读磁盘
                                                    4. 获得数据

   1K桶文件              BI TMAP                                    ……


   2K桶文件              BI TMAP                                    ……

    2^nK桶文件                           ………              Bar r el <N>
服务器性能优化-桶文件结构-可扩展结构


                   Physical
                                  Field1       Field2
                   Record



                                                               全局字段配置表2
    全局字段配置表1                                                    Field1=STR
     Field1=STR                  Interpretor                    Field2=LONG
     Field2=LONG                                                Field3=BIT



 通过字段配置表动态
                   Record Data Object 1            Record Data Object 2
 解释存储数据,扩展
  字段时无须割接            Value1   Value2             Value1   Value2   Value3
服务器性能优化-效果


         单机性能:IndexServer提升4.1倍,峰值压力下保持平稳。
         整体性能:NewMailSvr使整体再度提升20%。
         数据扩展:无代码修改及割接条件下,目前数据类型已从6种扩
         展到20种,原类型的字段扩展超过30个。
         文件数缩减:9亿号段下最大135万文件,约为改造前的1/300。
         备份:文件数缩减及组锁定策略使备份易于实施。
                             在线性能对比                                   新旧IdxSvr性能
90                                                                    曲线(纵轴为毫
80                                                                    秒,横轴为小
70
                                                                      时)
60
50                                                           Od U
                                                              l   D
40                                                           New UD

30
20
10
0
                                                 103
                                                 109
                                                       115
         13
              19
              25
                   31
                   37
                        43
                        49
                             55
                             61
                                  67
                                  73
                                       79
                                       85
                                            91
                                            97
     1
          7
服务器性能优化


  Anything else?
服务器性能优化-性能监控


  定义专项的性能日志,与监控平台连接,反应时间1小时。
  先敌发现,先行摧毁!


  后台服务器跟踪
    访问接口
    关键调用
  CGI性能跟踪
    CGI整体运行时间
    后台接口调用时间
  每日邮件自动报警
服务器性能优化-监控图表
服务器性能优化-小技巧


  实现TimeTrack对象,在构造时开始计时,析构时记录时间。
  在每个函数开始位置嵌入TimeTrack对象,可以得到类似
  Quantify的报表。
目录


     QQMAIL总体架构
     服务器性能优化
     网络性能优化
     代码框架优化
网络性能优化-数据采集-JS上报


  JS上报:收集的数据包含了页面下载延时和浏览器运算时间,
  能够真实反映用户访问速度。
网络性能优化-数据采集
网络性能优化-设定目标


  登录平均时间控制在8秒以内(国内最快的邮箱)
  着重优化登录时间超过30秒的慢速用户
网络性能优化-Squid代理方案

 按来源IP返回电信
 或网通Proxy地址



Proxy根据IP校准表
将错误接入的连接
重定向到正确区域



 检测Web服务器
 状态,自动屏蔽
 故障web服务器




     北京、天津、广州等6个IDC部署Squid代理,超过30s的用户比例从4%下
     降到3%。
网络性能优化-静态资源分离


  静态资源存储在独立的RES服务器上
  采用qhttp,提升负荷能力
  静态资源通过CDN进行分布,用户就近访问,提高访问速度。
  相同文件下载速度从310ms提升到250ms。
网络性能优化-其它方案


  基于CGI的页面输出,相比Ajax,在QQMAIL用户模型下获得更
  优速度,排除了浏览器的性能干扰,且易于监控。
  缩减链接数
  静态资源HTTP ZIP传输
目录


     QQMAIL总体架构
     服务器性能优化
     网络性能优化
     代码框架优化
代码框架优化-CGI输出
    Ajax技术                                传统HTML技术

         显示      IE浏览器
                                            显示       IE浏览器



     DOM组合器      Template

                                            HTML

        AJAX引擎
                                           模板解析器        Template



                               XML
  一套CGI同时支持
  AJAX和传统HTML
  技术。                           CGI

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


  CGI程序从基础CGI对象继承,提供以下功能:
    强制的Session检查机制
    统一的错误处理(Exception)
    命令行调试机制              CGI Framework
    XML到HTML数据格式转换        Session校验机制       调试机制

  提升开发效率和安全性              错误标准处理机制       输出数据格式转换

                                  自定义处理程序




                               Standard Library
Q&A

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