QQ空间技术架构的深揭露

  QQ
空间作为腾讯海量互联网服务产品,经过近七年的提高,实现了自十万级至亿级同时在线的长足。在是历程遭到,QQ
空间组织遇到了哪技能挑战?其站点前后大架构随着事情规模之生成又开展了哪些的形成和变化?成长背后有了怎么的心酸和喜悦……
  4. 26 日晚间,腾讯大讲堂·深圳首站《QQ
空间技术架构的峥嵘岁月》活动于腾讯总部腾讯大厦多功能厅举办,腾讯 Web
前端研发领域专家、腾讯最早的差事 Web 开发组织核心成员、Qzone
核心架构研发总监徐晓于片钟头的演讲受到揭开了 QQ 空间技术架构背后的暧昧。
  正式分享之前,徐晓介绍了 QQ 空间目前底雅量服务数量规模(图1):
  1) 拥有5.5亿之外向用户
  2) 过万华的装置
  3) 数千万级别之同时在线
  4) 数十亿级别的全站 PV
  5) P 级的 UGC 存储量
  6) 每天千亿级别之劳动请

  图1——QQ 空间海量服务数据规模
  接下,徐晓把 QQ
空间成长和前进之过程分成三只级次:石器时代、冷兵器时代和现代战争时代,分享了
QQ 空间由初始还是难以生活,到逐渐提高成为国内极老之 SNS
社区产品背后的冷暖。
  石器时代–从十万于线到百万在线
  石器时代是 QQ 空间1.0至3.0安稳上线的长河。
  徐晓说:”QQ
空间在石器时代遇到的极端特别难题就是是怎样生活?如何被这襁褓中之出品在下来?如何积累第一批判珍贵的用户资源?”,
2005 年 QQ
空间首发,最初是采用传统的关邀请码的法门募集第一批判用户。第一慢 QQ
空间是镶嵌在单身的客户端软件受到,看似是单客户端,其实是一个浏览器内核,里面都是
HTML 页面,以网站的措施是。
  当初的架非常简单,采用了 Apache 搭建 Web Server,Mysql
保存最终数额。用户通过{uin}.qzone.qq.com (uin 就用户的 QQ
号码)这样的主意访自己的空中。最初步上线时,仅邀请了电信用户。但上线之后才发现许多北方网通用户也杀想来感受。但如果被北方网通用户跨网来拜访电信的服务,那将凡一个挺不好的体会。因为当时的跨网之间的带来富是好有限的。
  为了满足网通用户之求,QQ
空间组织在网通搭建了千篇一律仿与电信一模一样的劳务,电信的用户数据仅存在电信的服务器上,网通用户数据才在网通服务器上。看似异地分布,其实简单组成部分数据是互为独立、不克冗余的。在用户注册开通空间时,就确定了外的数目在被哪个服务器上。
  用户访问空间的逻辑抽象来说是这般的(如图2):用户通过浏览器发起呼吁访问我们的率先只
CGI,这个 CGI
再串行的获得用户数量,比如:装扮数据,日志数据等。等收获到方方面面数额后,这个
CGI 再将富有的多寡拼装成一个完全的 HTML 页面输出为用户。

  图2——Qzone2.0榜首载入逻辑
  但以,空间第一本的单身客户端也拉动了各种问题以及烦躁:
  第一:非常勿便宜定位问题。
  一旦页面元素填写失败,定位问题将是同一项劳心的事情。因为其不是 Web
页面,所以只能用另外抓包软件,比如 Ethereal (Wireshark
的前身)来办案到手网络保险做分析。但好时刻网络抓包工具的力还于弱,没有高亮和
HTML 语法检测等职能,所以整体环境比较受限。
  第二:服务对接抱层压力很。
  由于不仅要经受用户之请,还要往后拜不同的数量。当后端某一个接口超时严重的景况下,很多用户的恳求都见面为吊起于。这样就是会耗费又多的连天资源,对
Web 服务器 CPU 的耗费大要命。
  第三:服务集群没有表达出当之服务能力
  当时一起用 30-40贵服务器,也只好支持 50
万左右的用户。无奈之下,团队纪念了一个无道之法门:有意限制超五十万用户,提出了一个排队等候机制,学习海底捞模式,当在线人数及
50w 的时段,QQ 空间会为用户展示一个 Flash
小游戏,让用户在等的时节玩小游戏。
  针对当下设有的种种问题,团队举行了以下改进来解决:
  第一:采用 Web RIA。
  当时大气运用了 Ajax
技术来减轻服务器的载重。其中一个极其的例子是:整个空间首页都是以 JS
绘制,这样能够以用户访问的 CGI 足够轻量化。尽量简化了 CGI 逻辑,让 CGI
程序运行更加强壮、效率又胜似。同时,当服务很时,还好透过 JS
脚本绘制一个错误信息给予用户提示。而且,采用 JS
开发效率又胜似,调试再有利。
  Web RIA 化后,降低了服务器 CPU 消耗的 40%,节约了 DC 的输出带宽约
30%(部分 JS 脚本都可叫浏览器 Cache 住)。
  第二:采用动静分离策略。静态资源还置身自研的 Web 服务器 qhttpd
上,它拥有这 ApacheSelect 模型的少个数据级以上之连片能力。
  第三:采用自研的 Web
Server:Qzhttp,主要用于动态分离的动态服务的急需。由于 Qzhttp
是腾讯自研的、轻量的、更称业务协调逻辑的 Web
Server,从而确保了它的强性能,它的过渡能力比 Apache (非 FastCGI
模式)提高了 3 加倍。
  石器时代做的极端老之优化:
  当用户申请 QQ
空间多个劳务经常,每个服务还产生单独的仓储和处理逻辑。只有当有的劳动处理完,才会由
QQ
空间框架服务器返回给用户。这样于以因日志、相册、音乐、留言的服务就是会见来两异常问题:
  1) 短板效应一损俱损;
  2) 具体业务容量无法差异化。
  针对当下点儿单问题,做了首页载入性能优化以及首页内容静态化系统有限上面的优化:
  研究用户访问模型。拉取展现和 UGC
内容的更改比例是7:1。用户之间互访频繁,看他人和关押自己的百分比是5:1.。通过上述数据,可以视用户的
UGC
更新非常少,但是用户之间相走访异常频繁。根据用户的这种访问模型,空间组织研发了平等法静态化系统(图3)。这套系统会将用户首页的情节尽
Cache,然后根据用户的拜会,以及用户自己 UGC
内容之更改,采用一定策略更新静态化系统的 Cache 数据。
  通过加首页内容静态化系统,首页展现速度从 5s 提升至
3s,用户为非用重新玩小游戏进行等待。同时在装置尚未扩容的前提下,同时在线用户访问数突破
100w。

  图3—首页内容静态化系统
  通过不停的改良与优化,QQ 空间3.0深受 2006 年遭受稳健上线。
  冷兵器时代——功能的磨砺
  冷兵器时代是在线人数从百万阵营向千万阵营过渡的经过。这个阶段召开的再次多的凡意义的洗炼,提高可用性的长河。
  但同时,QQ 空间组织又面临了初的题目:
  1、网通,教育网用户体验好不同;
  2、版本迭代迅猛,导致外网 bug 不断;版本发布之后,所有支付要预留守 2
个钟头;
  3、后端服务品质未平稳,导致服务经常宕机。
  之前发生道到,空间的用户数据是遍布在电信及网通两效系统中之。但出于企业在网通的服务设备有限,随着用户量的络绎不绝追加,很快即达到了网通设备服务的上限。网通不克扩容设备,但用户量还在不停加码。面对这种情形,只好以网通和电信的数目统一为平套。当网通用户访问服务的下,会透过一个摄将用户之求转发到内网电信服务上。采用这种方法,提供了同一效仿通用的解决方案,可以化解海外,网通,教育网,铁通等运营商的问题。
  但这种跨网访问的静态资源下载量非常酷,静态资源要次数 : CGI
请求数接近 10:1,所以使用 CDN
提供静态资源下载,来加强用户访问速度。具体逻辑是:根据用户客户端 IP
判断用户属于哪一个 ISP 服务商,通过 URL 方式拿用户的静态资源访问定向到该
ISP 的劳务设施上。
  这样,跳出 CDN
系统的格、优化思路,解决了多数教育网用户问题,同时多级支持的思绪成为国有方案。
  但以还是来诸多之故障:
  1) 低 ARPU、低本钱、低价机器、大集群
  2) 版本迭代快每周发布版
  3) 用户指向故障和废的容忍度很低
  通过调研,我们发现用户对 Web 的容忍度是挺没有之(如图4):

  图4——用户容忍度曲线
  一般页面在 1s
内打开,用户会感到体验好流畅。所以我们透过以下政策来确保服务品质:
  1) 区分关键路径,对重要路径的劳动品质我们渴求 4 个 9
以上,非要路径的劳务失败以后召开生伤害体验;
  2) 采用动态超时时间控制算法,保证全体程序在可控的时光外做出响应;
  3) 多级容错机制,从后端服务到 CGI,到前台 JS
脚本都针对错做了容错处理;
  4) 采用柔性可用策略,失败接口采用默认数据。
  为了保版本的劳务品质,空间应用了灰度发布政策。新特点可能仍用户尾号发布,每次新特性只针对相同有些有人可见。一段时间内之用户举报后,不断修补与改良问题,再逐月扩大用户群对新特性的可见性,最后新特色才对全量用户可见。同时,也通过操纵
JS 版本号来达成了灰度发布之目的。
  通过这些优化,QQ 空间成功登入千万级在线的营垒,QQ
空间5.0正经达成线。其中首要变化:后端服务进行了重构,前端页面吗拓展了优化。
  现代战争时代–数千万在线向亿级在线
  经过再三的改进和优化,QQ
空间服务品质大幅提高,但是,新的题目或者随之而来:
  不饱于发日称、传照片的用户,想要打游戏、使用一些 web
工具。同时,公司外团体而以 QQ 空间上支出使,但 QQ
空间的行使配置都勾好于 QQ
空间平台逻辑中。为配合其他团队及丝,发本用平等全面,工作不行互相,非常耗时,受到了非常十分挑战。针对这种气象,我们采取了零星坏方式:平台跟利用架构分离(如图5)、简单布置后上线(如图6)。

  图5——平台和运用架构分离

  图6——简单布置后达到线
  如果某天深圳之 IDC 不可用了怎么处置?
  为了缓解此题材,空间组织做了举国上下 IDC
的异乡部署,采用”一点形容,多沾读”模式之架模型,将劳动配置到深圳、上海、天津同西安。深圳凡是一个写入点,通过
QQ 空间自己之同一法共系统共到全国各个 IDC (如图7)。同时 QQ
空间供了全的立体监控,7*24钟头对服务做监控。

  图7——IDC 分布
  如何快速发现同解决用户之题材?
  定位用户问题亟需花费大怪的岁月本,这就是要求组织做多底监察工作:服务器流量监控、接口调用监控、前端测速监控、前端调用错误监控。
  同时,在绝层及亿级在线的经过被,团队而发生全国还世界的布与匹配分布之运营能力;出问题可很快切割,全方位的立体化监控能力;各个逻辑层持续优化能力。只有不断优化,用户才能够感知到性的增加,用户才见面追加。
  经过广大不好的推敲和不止优化,QQ
空间的服务能力就会支持千万级别之用户在线请求,并且能够让用户提供7*24时之不暂停服务。向亿级在线阵营冲刺也拿短暂!
  总结:
  百万在线:
  当时哪支撑住服务,让用户进入,从而积累 QQ
空间第一批用户,根据用户模型进行优化,让 QQ
空间架构起再度好之连能力,做到高性能。
  千万在线:
  通过各层的柔性服务以及灰度发布之策略,让服务更加安定,让用户数量级更上一个初台阶。
  亿级在线:
  服务使生再度活、更迅捷的改手段。同时出再次好之监督和可运营的力量。

  接下是半单小时的Q&A环节,同学等踊跃咨询,徐晓做出了详实专业的解答。最后,徐晓与豪门大快朵颐了”腾讯《海量服务之志》系列的上乘课程与采纳的尺码”:

  Qzone 是举世第二良 SNS 社区,仅次于
Facebook。徐晓说:”海量服务之历史观和用户对咱们的厚爱造就了本的 QQ
空间。我们见面不断的升华,攻克各种难题,不断前进。”
  4月 26 日 21:00,两个钟头之 QQ 空间技术架构分享圆满结束!
  欢迎大家继续要 5 月 16
日晚举办的腾讯大讲堂对外讲座·第八欲《云网络会带动被我们啊》
。更多优秀,尽在腾讯大讲堂:DJT.QQ.COM。

相关文章