QQ邮箱系统优化广州研发中心Harvey总体架构(简图)QQMAIL总体架构Web:支持95%的登录请求。提供读信、写信、用户信息管理等功能。BG:邮件队列,负责将本域用户发出的邮件投递到目标地址。MX(MaileXchange):接收外域邮件运营商发往本域的邮件。POP/SMTP:提供基于MailClient的服务。QS:向QQClient提供新邮件Notify服务。Account:存储邮箱名/UIN映射关系。以及开通状态等主属性。MS(MailStorage):存储邮件实体。IndexServer:用户个人信息,包括:邮件索引(发件人、主题、MSFileID等),文件夹,帐户配置信息、个人过滤规则、个人黑白名单6种数据。目录QQMAIL总体架构服务器性能优化网络性能优化代码框架优化服务器性能优化从何处入手?服务器性能优化-数据收集注:2006年4月数据,目前(2007年10月)约为当时的10-15倍。系统主要瓶颈为IndexServer的DiskI/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万/天。服务器性能优化-设定目标优化IndexDiskI/O支持数据扩展--不修改服务器代码条件下动态扩展结构支持备份避免风险--采用简单设计服务器性能优化方案-NewMailSvr构建专门的“新邮件服务器”,面向QS(占总查询量的22%),专用于缓存新邮件索引数据。特点:无内存Cache每用户使用固定4K盘块存储最近若干封新邮件按UIN直接定位盘块偏移位置服务器性能优化方案-IndexServer引入内存Cache:选择半小时76%命中率方案改变存储结构:散列文件=桶文件10,000连续UIN划分一个用户组。OneGroupOneLock数据分配以块为单位。每用户组有15个桶文件,分别用于分配1K/2K/4K/…/16M的数据块(2倍递增)。使用桶文件头部的BITMAP管理数据块。服务器性能优化-桶文件结构ClientIndexServerDataBlockIndexTypeBlockSizePosUINMailIndex2K251234Folder1K3115678…………………………1K桶文件……2K桶文件2^nK桶文件………指向1.读用户邮件索引2.查到文件与偏移3.读磁盘4.获得数据5.返回BITMAPBITMAPBarrelN服务器性能优化-桶文件结构-可扩展结构RecordDataObject1Field1Field2全局字段配置表1Field1=STRField2=LONGPhysicalRecordInterpretorValue1Value2全局字段配置表2Field1=STRField2=LONGField3=BITRecordDataObject2Value1Value2Value3通过字段配置表动态解释存储数据,扩展字段时无须割接服务器性能优化-效果单机性能:IndexServer提升4.1倍,峰值压力下保持平稳。整体性能:NewMailSvr使整体再度提升20%。数据扩展:无代码修改及割接条件下,目前数据类型已从6种扩展到20种,原类型的字段扩展超过30个。文件数缩减:9亿号段下最大135万文件,约为改造前的1/300。备份:文件数缩减及组锁定策略使备份易于实施。在线性能对比010203040506070809017131925313743495561677379859197103109115OldUDNewUD新旧IdxSvr性能曲线(纵轴为毫秒,横轴为小时)服务器性能优化Anythingelse?服务器性能优化-性能监控定义专项的性能日志,与监控平台连接,反应时间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用户模型下获得更优速度,排除了浏览器的性能干扰,且易于监控。缩减链接数静态资源HTTPZIP传输目录QQMAIL总体架构服务器性能优化网络性能优化代码框架优化代码框架优化-CGI输出HTTPServerCGIXML模板解析器TemplateHTML显示IE浏览器AJAX引擎TemplateDOM组合器显示IE浏览器Ajax技术传统HTML技术一套CGI同时支持AJAX和传统HTML技术。代码框架优化-CGI代码框架CGI程序从基础CGI对象继承,提供以下功能:强制的Session检查机制统一的错误处理(Exception)命令行调试机制XML到HTML数据格式转换提升开发效率和安全性StandardLibrarySession校验机制CGIFramework自定义处理程序输出数据格式转换错误标准处理机制调试机制Q&A缤刻