QQ空间技术揭秘【架构结构】

文章作者:qq1958.cn | 来源:qq选号平台 2019-09-02 17:24:03

   2019年作为腾讯大众互联网服务产品,经过近七年的发展,QQ空间在线同步实现了10万至1亿的飞跃。在此过程中,QQ空间团队遇到了哪些技术挑战?网站的前台和后台架构是如何随着业务规模的变化而演变和变化的?成长背后有什么样的悲伤和幸福......


  4。26日晚,腾讯大厅和深圳首场QQ空间技术建筑活动在腾讯总部腾讯大厦多功能厅举行。腾讯网络前端研发领域专家、腾讯最早全职网络开发团队核心成员、QZONE核心架构研发总监徐晓在两小时的演讲中揭晓。揭开QQ空间技术架构背后的秘密。

  在官方共享之前,徐晓介绍了Qzone当前大规模服务数据的规模(图1):

  1)5.5亿活跃用户

  2) 过万台的设备

  3)数千万级同步在线

  4)数十亿的全站仪PV

  5)P级UGC存储

  6)每天数十亿个服务请求

  QQ空间技术体系结构的深层次秘密

  图1  -  QQ空间群发服务数据量表

  接下来,徐晓将QQ空间的成长和发展分为三个阶段:石器时代、冷兵器时代和现代战争时代。他从分享QQ空间的起起落落开始,很难生存下来,逐步发展成为中国最大的SNS社区产品。

  石器时代-从100,000在线到数百万在线

  石器时代是QQ空间为1.0到3.0的过程。

  徐晓说:“QQ空间在石器时代遇到的最大问题是如何生存?”如何让这个宣誓的产品存活下来?如何积累第一批有价值的用户资源?”2005年,QQ空间推出,最初采用传统的方式发布邀请码,招揽第一批用户。第一个QQ空间是嵌入在一个单独的客户端软件中的,它似乎是一个客户端,但实际上它是一个浏览器内核,它充满了HTML页面,作为一个网站存在。

  原来的架构非常简单,使用Apache构建Web服务器,用MySQL保存最终数据。用户通过{uin}.qzone.qq.com访问他们的空间(uin是用户的QQ号码)。起初,只邀请了电信用户。但只是在发布后才发现,许多北方网通用户也非常渴望体验。但是,对于北方网通用户来说,通过互联网访问电信服务将是一次非常糟糕的经历。因为当时网络之间的带宽非常有限。

  为了满足网通用户的需求,QQ空间团队在网通中建立了一套类似于电信的服务。电信用户数据仅存在于电信服务器上,网通用户数据仅存在于网通服务器上。似乎数据的两个部分彼此独立,并且不能是多余的。当用户注册开放空间时,它确定他的数据存在于哪个服务器上。

  用户访问空间的逻辑抽象是这样的(图2):用户启动一个请求,通过浏览器访问我们的第一个CGI,然后将其序列化以获取用户数据,例如:整理数据、日志数据等。获取所有数据后,CGI将所有数据集成到一起。o一个完整的HTML页面并输出给用户。

  QQ空间技术体系结构的深层次秘密

  图2  -  Qzone2.0典型负载逻辑

  但同时,第一版空间的独立客户也带来了各种问题和麻烦:

  首先,这对定位问题是非常有害的。

  一旦页面元素无法填充,定位问题将是一个麻烦。因为它不是网页,所以您只能使用其他捕获软件,例如Ethereal(Wireshark的前身)来抓取网络数据包进行分析。但那时,网络捕获工具的能力仍然很弱。没有高亮和HTML语法检测,因此整体环境有限。

  二是服务接入层压力较大。

  不仅要接受用户的请求,还要向后访问不同的数据。当后端的接口超时严重时,许多用户请求将被挂起。这将消耗更多的连接资源,并消耗大量Web服务器CPU。

  第三:服务集群没有发挥其应有的服务能力

  当时,有30到40台服务器,只能支持大约50万用户。不幸的是,该团队想出了一个无奈的解决方案:故意限制50多万用户,提出了排队等待机制,学习海地牢模式,当在线用户数达到50W时,QQ空间会给用户展示一款Flash游戏,让用户在等待时玩游戏。

  鉴于当时存在的问题,小组作出了以下改进以解决这些问题:

  第一:采用Web RIA。

  当时,Ajax技术被广泛用于减少服务器负载。一个极端的例子是,整个空间主页是使用JS绘制的,这可以使用户访问的CGI足够轻。尽可能简化CGI逻辑,使CGI程序运行更加健壮、高效。同时,当服务异常时,也可以通过JS脚本绘制一条错误消息给用户提示。而且,JS更高效,调试更方便。

  经过WebRIA后,服务器CPU消耗减少了40%,DC的输出带宽节省了30%左右(一些JS脚本可以使用浏览器缓存)。

  第二:采用动态和静态分离策略。静态资源放置在自行开发的Web服务器qhttpd上,该服务器当时具有超过两个数量级的ApacheSelect模型访问能力。

  第三,我们采用自主开发的Web服务器:qzhttp,主要用于动态服务的动态分离。由于qzhttp是一个自行开发的、更适合业务逻辑的轻量级Web服务器,它保证了它的高性能,其访问能力是apache(非fastcgi模式)的三倍。

  石器时代最大的优化:

  当用户在QQ空间中申请多项服务时,每项服务都有独立的存储和处理逻辑。只有在处理完所有服务后,它才会由QQ空间框架服务器返回给用户。对于同时依赖日志,专辑,音乐和消息的服务,这将导致两个主要问题:

  1)短板效应损坏;

  2)不能区分具体的业务能力。

  针对这两个问题,我们优化了主页加载性能优化和主页内容静态系统两个方面:

  研究了用户访问模型。拉示率为7%。用户之间有频繁的访问,看别人和看自己的比例是5%。从以上数据可以看出,用户的UGC更新很少,但用户之间的访问非常频繁。基于用户的访问模型,空间小组开发了一个静态系统(图3)。该系统将缓存用户主页的所有内容,然后根据用户的访问权限和用户自己的UGC内容的变化,更新静态系统的缓存数据。

  通过在首页添加内容静态系统,使首页的显示速度从5s提高到3s,用户不需要玩小游戏等待。同时,在不扩大容量的前提下,在线用户的接入数超过100 W。

  QQ空间技术体系结构的深层次秘密

  图3-主页内容静态系统

  经过不断的改进和优化,QZA3.0于2006年年中稳步推出。

  冷兵器时代 - 功能的磨炼

  “冷武器时代”是一个从数百万人向数百万人的过渡。在这个阶段,我们做了更多的工作来提高流程的功能和可用性。

  但同时,QZone的团队面临着新的问题:

  1.网通,教育网用户体验非常差;

  2。版本的快速迭代导致外部网络中不断出现错误;版本发布后,所有开发必须保持2小时;

  (三)后端服务质量不稳定,导致频繁停机。

  如前所述,该空间的用户数据分布在Telecom和Netcom这两个系统中。但是,由于网通的服务设备有限,随着用户数量的增加,网通设备服务的上限很快就达到了。网通无法扩展设备,但用户数量仍在增加。面对这种情况,我们不得不将网通和电信的数据合二为一。当网通用户访问该服务时,用户的请求通过代理转发到内联网电信服务。通过这种方式,提供了通用解决方案来解决海外,网通,教育网和铁通等运营商的问题。

  但是,跨网络访问的静态资源下载量很大,静态资源请求量接近10:1,因此使用cdn提供静态资源下载,以提高用户访问速度。具体逻辑是根据用户的客户端IP确定用户所属的ISP服务提供商,并通过URL将用户静态资源访问定向到ISP服务设备。

  这样,跳出CDN系统的束缚,优化思路,解决大多数教育网络用户的问题,多层次支持的思想已经成为一种公共方案。

  但与此同时仍有许多缺点:

  1)低ARPU、低成本、低成本机器、大集群

  2)版本迭代快速周刊发布

  3)用户对故障和低效率的容忍度非常低

  通过研究,我们发现用户对网络的容忍度非常低(图4):

  QQ空间技术体系结构的深层次秘密

  图4  - 用户容差曲线

  一般来说,当页面在1秒内打开时,用户会感觉非常顺畅。因此,我们采用以下策略来确保服务质量:

  1)区分关键路径,对关键路径的服务质量要求大于4 9,并在非关键路径服务失败后进行破坏性体验;

  2)采用动态超时控制算法,确保整个程序在可控时间内响应;

  3)多级容错机制,从后端服务到CGI,再到前端JS脚本,都做了容错处理。

  4)采用灵活的可用策略,在失败的接口中使用默认数据。

  为了保证服务版本的质量,该空间使用灰度发布策略。新功能可以通过用户的尾号发布,每个新功能仅对一小部分人可见。在用户反馈一段时间之后,问题不断得到修复和改进,然后用户组逐渐扩展到新功能的可见性,最后新功能对完整用户可见。同时,通过控制JS版本号也可以实现灰度发布的目的。

  通过这些优化,QQ空间成功进入1000万级在线阵营,QQ空间5.0正式上线。主要的变化是:重新构建后端服务,优化前端页面。

  现代战争时代-从数以千万计的网络到数十亿。

  经过反复改进和优化,QQ空间服务质量显着提高,但出现了新的问题:

  对于发日志和照片不满意的用户希望玩游戏并使用一些网络工具。同时,公司其他团队也希望在QQ空间开发应用程序,但QQ空间的应用程序配置是写在QQ空间平台的逻辑中的。为了与其他在线团队合作,发布该版本需要一周时间。这项工作不是并行的、耗时的和有挑战性的。针对这种情况,我们采取了两个主要措施:平台和应用程序体系结构分离(图5)、简单配置和在线(图6)。

  QQ空间技术体系结构的深层次秘密

  图5  - 平台和应用程序架构的分离

  QQ空间技术体系结构的深层次秘密

  图6-在简单配置之后上线

  如果深圳的IDC有一天无法使用怎么办?

  为了解决这一问题,航天团队在全国各地部署了国际数据中心,并采用“一点写,多点读”的体系结构模型,向深圳、上海、天津和西安部署了服务。深圳是一个写作点,通过自己的QQ空间同步系统,与全国所有的IDC同步(图7)。同时,QQ空间提供全方位的三维监控,7*24小时监控服务。

  QQ空间技术体系结构的深层次秘密

  图7  -  IDC分布

  如何快速发现和解决用户的问题?

  用户问题的定位需要花费大量的时间和成本,这就要求团队进行大量的监控工作:服务器流量监控、接口呼叫监控、前端速度监控、前端呼叫错误监控。

  同时,在数千万至数十亿的在线过程中,团队必须具有国家乃至全球分布和匹配的运营能力分布;可快速切割问题,全面立体监控功能;每个逻辑层继续优化功能。只有持续优化,用户才能感受到性能的提升,用户才会增加。

  经过无数的深思熟虑和不断的优化,QQ空间的服务能力已经能够支持数千万用户的在线请求,并能为用户提供7*24小时的不间断服务。冲刺到十亿级在线营地就要到了!

  总结:

  百万在线:

  当时,如何支持服务,让用户进入,从而积累Qzone的第一批用户,根据用户模型进行优化,使Qzone架构具有更好的访问能力,实现高性能。

  千万在线:

  通过各层的灵活服务和灰度发布策略,服务更加稳定,用户排名更上一层楼。

  亿级在线:

  服务需要更灵活和敏捷的变革手段。同时,具有较好的监控和操作能力。

  QQ空间技术体系结构的深层次秘密

  接下来是半小时的问答环节。学生们热情地提问,徐晓做了详细的专业答复。最后,徐晓和大家分享了“质量课程和腾讯的原则”“大规模服务”系列“:

  QQ空间技术体系结构的深层次秘密

  Qzone是仅次于Facebook的全球第二大SNS社区。徐晓说:“今天,大量服务的价值和用户对我们的爱创造了Qzone。我们将继续发展,克服各种困难问题,并继续向前迈进。”

  4月26日21:00,两小时QQ空间技术架构共享成功结束!

  欢迎大家继续期待5月16日晚腾讯大厅开场讲座。第八期“云网络能给我们带来什么”。更精彩的是,腾讯大厅的所有节目:DJT。QQ。通用域名格式。
客服中心
点击这里给我发消息
点击这里给我发消息
点击这里给我发消息
营业时间
7:30~24:00