QQ空间的服务器负载能力优化过程简介

所属分类: 网站运营 / 网站优化 阅读数: 118
收藏 0 赞 0 分享

石器时代–从十万在线到百万在线
石器时代是QQ空间1.0到3.0稳健上线的过程。
Qzone核心架构研发总监徐晓徐晓说:"QQ空间在石器时代遇到的最大难题就是如何生存?如何让这个襁褓中的产品活下来?如何积累第一批宝贵的用户资源?", 2005年QQ空间首发,最初是采用传统的发放邀请码的方式征集第一批用户。第一款QQ空间是嵌在独立的客户端软件中,看似是个客户端,其实是一个浏览器内核,里面都是HTML页面,以网站的方式存在。
当初的架构非常简单,采用了Apache搭建Web Server,Mysql保存最终数据。用户通过{uin}.qzone.qq.com(uin就是用户的QQ号码)这样的方式访问自己的空间。最开始上线时,仅邀请了电信用户。但上线之后才发现很多北方网通用户也非常希望来体验。但如果让北方网通用户跨网来访问电信的服务,那将是一个非常糟糕的体验。因为当时的跨网之间的带宽是非常有限的。
为了满足网通用户的需求,QQ空间团队在网通搭建了一套与电信一模一样的服务,电信的用户数据只存在电信的服务器上,网通用户数据只存在网通服务器上。看似异地分布,其实两部分数据是互相独立、不能冗余的。在用户注册开通空间时,就确定了他的数据存在于哪个服务器上。
用户访问空间的逻辑抽象来说是这样的(如图2):用户通过浏览器发起请求访问我们的第一个CGI,这个CGI再串行的获取用户数据,比如:装扮数据,日志数据等。等获取到全部数据之后,这个CGI再将所有的数据拼装成一个完整的HTML页面输出给用户。
2016129102705031.png (550×397)

但同时,空间第一版的独立客户端也带来了各种问题和烦恼:
第一:非常不利于定位问题。
一旦页面元素填写失败,定位问题将是一件麻烦的事情。因为它不是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。
2016129102730812.png (451×428)

通过不断的改进和优化,QQ空间3.0于2006年中稳健上线。
冷兵器时代——功能的磨砺
冷兵器时代是在线人数从百万阵营向千万阵营过渡的过程。这个阶段做的更多的是功能的磨砺,提高可用性的过程。
但与此同时,QQ空间团队又面临了新的问题:
1、网通,教育网用户体验很差;
2、版本迭代快速,导致外网bug不断;版本发布之后,所有开发必须留守2个小时;
3、后端服务质量不稳定,导致服务经常宕机。
之前有谈到,空间的用户数据是分布在电信与网通两套体系中的。但由于公司在网通的服务设备有限,随着用户量的不断增加,很快就达到了网通设备服务的上限。网通不能扩容设备,但用户量还在不断增加。面对这种情况,只好将网通和电信的数据合并为一套。当网通用户访问服务的时候,会通过一个代理将用户的请求转发到内网电信服务上。采用这种方式,提供了一套通用的解决方案,可以解决海外,网通,教育网,铁通等运营商的问题。
但这种跨网访问的静态资源下载量非常大,静态资源请求次数 : CGI请求数接近10:1,所以采用CDN提供静态资源下载,来提高用户访问速度。具体逻辑是:根据用户客户端IP判断用户属于哪一个ISP服务商,通过URL方式将用户的静态资源访问定向到该ISP的服务设备上。
这样,跳出CDN系统的拘束、优化思路,解决了大部分教育网用户问题,同时多级支持的思路成为公共方案。
但同时还是有很多的故障:
1) 低ARPU、低成本、低价机器、大集群
2) 版本迭代快每周发布版本
3) 用户对故障和低效的容忍度非常低
一般页面在1s内打开,用户会感觉体验非常流畅。所以我们通过以下策略来保证服务质量:
1) 区分关键路径,对关键路径的服务质量我们要求4个9以上,非关键路径的服务失败之后做有损体验;
2) 采用动态超时时间控制算法,保证整个程序在可控的时间内做出响应;
3) 多级容错机制,从后端服务到CGI,到前台JS脚本都对错误做了容错处理;
4) 采用柔性可用策略,失败接口采用默认数据。
为了保证版本的服务质量,空间采用了灰度发布策略。新特性可能按照用户尾号发布,每次新特性只对一小部分人可见。一段时间内的用户反馈后,不断修复和改进问题,再逐步扩大用户群对新特性的可见性,最后新特性才对全量用户可见。同时,也通过控制JS版本号来达到了灰度发布的目的。
通过这些优化,QQ空间成功踏入千万级在线的阵营,QQ空间5.0正式上线。其中主要变化:后端服务进行了重构,前端页面也进行了优化。
现代战争时代–数千万在线向亿级在线
经过反复的改进和优化,QQ空间服务质量大幅提高,但是,新的问题还是随之而来:
不满足于发日志、传照片的用户,想要玩游戏、使用某些web工具。同时,公司其它团队要在QQ空间上开发应用,但QQ空间的应用配置都写死在QQ空间平台逻辑里面。为配合其他团队上线,发版本需要一周,工作不可并行,非常耗时,受到了很大挑战。针对这种情况,我们采取了两大措施:平台和应用架构分离、简单配置后上线。
2016129102751109.png (550×403)

2016129102811944.png (443×338)

如果某天深圳的IDC不可用了怎么办?
为了解决这个问题,空间团队做了全国IDC的异地部署,采用"一点写,多点读"模式的架构模型,将服务部署到深圳、上海、天津和西安。深圳是一个写入点,通过QQ空间自己的一套同步系统同步到全国各个IDC。同时QQ空间提供了全方位的立体监控,7*24小时对服务做监控。
如何快速发现和解决用户的问题?
定位用户问题需要花很大的时间成本,这就要求团队做很多的监控工作:服务器流量监控、接口调用监控、前端测速监控、前端调用错误监控。
同时,在千万级到亿级在线的过程中,团队要有全国甚至全球的分布和匹配分布的运营能力;出问题可以快速切割,全方位的立体化监控能力;各个逻辑层持续优化能力。只有持续优化,用户才能感知到性能的增加,用户才会增加。
经过无数次的推敲和不断优化,QQ空间的服务能力已经能够支持千万级别的用户在线请求,并且能够给用户提供7*24小时的不间断服务。向亿级在线阵营冲刺也将指日可待!
总结:
百万在线:
当时如何撑住服务,让用户进来,从而积累QQ空间第一批用户,根据用户模型进行优化,让QQ空间架构有更好的接入能力,做到高性能。
千万在线:
通过各层的柔性服务和灰度发布的策略,让服务更加稳定,让用户数量级再上一个新台阶。
亿级在线:
服务要有更灵活、更敏捷的变更手段。同时有更好的监控和可运营的能力。

更多精彩内容其他人还在看

关于百科做外链的一些看法分析

做网站优化的人都知道一句话就是“外链为皇,内容为王”,这句话的意思是说如果想做好网站的优化,网站不但要有优质原创的内容,还要有一定质量和数量的外部链接
收藏 0 赞 0 分享

浅析SEO常用指令的用法技巧以及出现的问题

现在网络上一些的站长工具层出不穷,功能也越来越丰富,我们可以从这些工具中看到我们网站的一个大体的数据显示,对于我们是有很多帮助的,但是,作为一个SEO从业者,要不断的提升自己,仅仅借助第三方工具是不够的,而且稍微有点麻烦,搜索引擎很好的为我们提供了SEO指
收藏 0 赞 0 分享

学会巧用网站软文营销 助力网站长尾词推广

在如今的互联网时代中,相信每位站长都能够深刻的感觉到,现在的网站优化工作是越来越难做,之前我们自己收藏的一些感觉权重还不错的外链资源如今也被搜索引擎认定为垃圾外链,效果越来越差,网站排名权重也是越来越难做,特别是一些比较热门的关键词更是难上加难,所以
收藏 0 赞 0 分享

解析页面优化的核心是什么

其实,对于网站优化来说,页面优化相对较简单,由于搜索引擎算法技术的提升,在判断网页相关性上做的越来越好,页面优化所涉及的技术细节不用做到面面俱到,而且在SEO越来越崇尚平衡自然的前提下,页面优化做的越细致,越有可能涉及过度优化。所以,对于页面优化来说,
收藏 0 赞 0 分享

菜鸟如何快速学习SEO

现在很多企业开始重视网站优化,SEO人员也开始多了起来,SEO的门槛其实不高,那菜鸟如何快速上手呢?看看这篇文章给大家的一些方法
收藏 0 赞 0 分享

网站经不起风浪 每次更新被降权的原因及其分析

说来也怪有些网站看着不怎么样,更别谈什么用户体验也不必说什么原创文章,就一个很普普通通的网站甚至可以说出自同一个人的首先,但为何网站的命运却不同,面对这百度更新命运往往是“有心栽花花不开 无心插柳柳成荫”究竟是什么原因呢
收藏 0 赞 0 分享

我们究竟该如何优化内容层级结构

从事SEO也有6年之久了,知道了SEO这个东西不是死技巧,做SEO一定要根据你的行业,你的定位,用不同的SEO手法去做,就好比外链的发布,要么你的质量的发,要么你是大量的发,这个根本不是定死的规矩,只是看你会不会灵活运用,今天笔者给大家讲一下如何优化内容层级结构
收藏 0 赞 0 分享

浅谈地方旅游门户网站的页面优化方法

常言道:人靠衣装,佛靠金装,打扮也是很要紧的。这句话充分体现出想要有好的一面就要学会装饰自己,让自己从内到外显得尤为特殊,而对于网站来说也是要遵循这一规则。目前,旅游的黄金假期快要到来,很多地方性的旅游门户网站已经大规模崛起,这也使得地方性旅游网站的
收藏 0 赞 0 分享

探讨seo中与关键词有关的页面排名因素的具体解析

通常,作为网站优化人员都知道,要提高一个网站的关键词排名,就要做好影响关键词排名因素的分析
收藏 0 赞 0 分享

老站如果想获得稳定排名 记住:请切勿优化过度

笔者从事网站优化的工作不知不觉已经两三年了,其中接手过不少老站,发现老站往往会比新站更难优化,原因在于老站很多时候排名会不稳定,有时候在前几页,有时候又会掉到100名之外,让人十分头疼
收藏 0 赞 0 分享
查看更多