QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年

Wesley13
• 阅读 594

本文来自腾讯资深架构师杨志华的分享。

1、前言

也许没有多少人记得2004年发生的事情。但对于老腾讯来说,14年前的那个日子,2004年6月16日永远难以忘怀。这一天,QQ诞生5年后的腾讯在香港联交所主板上市,由此拉开了腾讯快速成长的序幕。

这14年间,腾讯的网络基础架构也伴随着各种业务的发展而发展,变迁而变迁。早年间网络经历的一切,不管是窘迫、重压,还是喜悦都渐渐消失在人们的记忆中,只能在泛黄的老照片,老员工零碎的讲述中寻觅。。。

学习交流:

- 即时通讯开发交流群:320837163[推荐]

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

(本文同步发布于:http://www.52im.net/thread-1448-1-1.html

2、2004-2006:稚嫩中开始成长

2004年的腾讯所有服务器都在深圳赛格、枢纽、东门这些运营商IDC机房中,很多服务器的联系人当时还是腾讯现CTO张志东(腾讯人都亲切的称其为Tony)。全部腾讯网络,等于1张A4纸拓扑+1本技术书,只是2M DDN将几个机房互联而已。

这一年,QQ发生了一起无头公案,是历史上仅有的几次QQ大面积服务中断达12个小时的故障之一,整个公司震动,业务和网络也由此拉开了运营的序幕。这一年,网络也经历了更多的五花八门的故障,有运营商IDC骨干设备故障、升级失败、专线中断,也有机架掉电、机房掉电、空调只出热风,还有某商业负载均衡设备掉电后2个小时没有起来。但也是这一年,IDC出口的流量达到10G。

2005年和2006年是忙乱的年代。互联网公司的核心业务纷纷从无线SP转型为增值业务,而游戏是其中的重点。那个年代,游戏是联众、盛大、网易、九城、完美时空的天下,腾讯也从QQ游戏、凯旋、QQ堂、QQ幻想、QQ音速开始切入,开始加入IDC资源抢夺的战团。这两年间,腾讯的网络和业务如雨后春笋般发展。腾讯的服务器达到万台,IDC扩展到10多个城市甚至还建设到了美国,开始有了IDC网络和办公网络分离并且使用了10G,IDC有了内网、外网和管理网还有安全监管区,跨省专线从0变成几十条,开始使用VPN备份专线,运营上也开始有了IDC网络演习。

值得一提的是,这个时期出现了运营历史上第一次大红头文件,甚至连Tony都受过处罚。

3、2007-2009:躁动中血染的日子

这段岁月,大家印象最深刻的就数开心农场了。此前游戏业务不温不火,网络最大的挑战主要是大区的游戏分布导致集中数据库对专线可用性和带宽的强依赖,而农场的突然火爆把当时的小伙伴们打了个措手不及。

从09年3月开始的半年时间里,农场如现在的手游一样突然蹿红,注册用户数量过亿,同时在线人数超过千万,业务集群规模达2000台;公网出口的中央带宽从几百兆猛增到几G,CDN带宽则从几G飙升到几十G。

当时腾讯在深圳已经有了很多机房,农场和其它很多业务类似也散布在多个机房中,而连接深圳所有机房的杂乱无章的城域网在农场的冲击面前无比脆弱,总体带宽容量和冗余能力的不足导致城域网频频崩溃,大家每天神经绷的紧紧的,有什么意外就马上根据经验调整路由参数调流量。这是老腾讯们少有的几次刻骨铭心感受到海量业务挑战中的一次。

为了解决城域网的问题,据老腾讯回忆,至少用了150个凌晨变更,甚至有人因此工伤,有人因此离职。最终将城域网改造为部分网状互联且具备自愈能力、具有50%冗余的架构,紧接着又开始在4个城域网核心节点间建设了DWDM环解决光纤不足的问题,城域网这才安分下来。

这个时期业务提出了SET化的理念,即把承接一定数量用户的接入、逻辑和存储服务器打包部署建设,IDC网络架构也随之演进出V3.0的架构,可以为每500台服务器提供一个高性能SET区域,当时的一个机房最多可以有10多个这样的SET。SET化后,业务系统各层级之间的流量可以内部消化,也大大减轻了城域网和IDC网络的压力。

同时,IDC网络还陆续引入了负载均衡LVS区域、防DDOS攻击安全区域,更好的支持了业务的接入和安全防护。

4、2010-2013:逐步走向成熟

2010年无疑是QQ的天下。这一年QQ同时在线人数突破1亿,QQ空间广受欢迎,QQ空间的游戏异常火爆,如胡莱三国上线一个月注册用户就超过千万,2个月后的活跃度仍然保持在20%,与同期facebook的顶级游戏水准相当。业务的繁荣之下,服务器数量开始激增,而深圳已经无法供应足够的机房了,业务开始被迫走出深圳走向全国。

经历几年的努力后的2010年,腾讯历史上第一个大规模自建数据中心——天津数据备份中心也落成,其设计容量达数十万台而成为当时亚洲最大的数据中心。天津自建数据中心不仅让腾讯积累了丰富的从风火水电到机架到网络的大规模基础架构规划、建设和运营经验,尝试了多项新技术,而且还让腾讯网络在全国布局中非常重要的华北板块得到夯实,让业务走出深圳更有信心。

2010年对于腾讯数据中心网络来说是一个划时代的时刻,IDC网络架构升级成V3.5版本,不仅解决之前IDC二层网络稳定性差问题,而且将高性能SET区域的范围扩大到5000台,为之前的10倍,资源的调度和业务的部署更加高效。直到今天,现网中的V3.5及后续的优化版本仍然是支持各项业务发展的主力架构之一。

2010年发生的3Q大战震动业界,由此腾讯更加坚定加快脚步走向了开放之路。开放在腾讯内部给网络也带来了新的挑战,那就是基于虚拟化的开放平台业务所需的虚拟化数据中心网络支持。2011年,5000台一个高性能SET、完全扁平大二层的一个V3.5虚拟化子版本应运而生,开始支持基于QQ空间的开放平台,随后是游戏和内部云平台。然而由于没有意识到服务器内部虚拟网络管控的重要性,加之设备Bug、内核应用模块Bug,虚拟化网络发生了几次大故障,最长的一次故障排查达数小时导致业务严重受损。这促使大家一边加强虚拟网络监控并且增强大二层的健壮性,一边思考是否有更好的从根本上解决二层网络缺陷的架构设计。2011年流行的802.1Qbg、Qbh,还有Trill/SPB之争,终究是无声无息的过去了。2013年则开始研发基于Overlay的SDN虚拟化网络方案。

2011年腾讯网络还有一件重要的事情就是开始打造一张MPLS VPN/TE的数据中心互联DCI广域网,以解决专线利用率低、多业务承载、灵活流量调度等问题。在历时一年半的艰苦割接和建设后在2012年终于全网完成升级,不仅专线利用率大幅度提升,在这张DCI网络中实现了面向业务的端到端差异化QoS服务和带宽配额准实时管理,还可以将原来故障时流量调度时间从1个小时人工处理缩短到5分钟系统自动处理。而在这张网络中,也逐步实践了SDN的理念,成为全网最先落地SDN的部分。这张数百G专线带宽并持续高速增长的DCI网络,成为支撑腾讯数千种业务产品实时和非实时内部通信、全球业务分布的关键平台。在写下此文的时候,世界杯比赛正酣,而小伙伴们正在试图不影响世界杯相关业务的前提下更换升级骨干节点的整台设备,变更时间长达数小时,又一次实践“万米高空飞行的航班更换引擎”,再次验证这张智能的DCI网的给力和小伙伴们的专业。

2012年和2013年微信的迅猛发展,特别是在海外的扩张,给网络带来巨大的压力。海外运营商的游戏规则和环境与国内几大完全不同,微信全球用户覆盖的质量如何调优着实不是那么容易的一件事情。经过坚持不懈的努力,我们为微信等海外业务建立了全球覆盖模型并实践了多种分布加速解决方案。

这几年,时光同样见证了100G光传输与运营商的同期部署,高性能SET区域超过20000台服务器的IDC网络新架构等等。而公网传输设备等自研网络设备的批量上线,则让网络面对业务越来越多个性化服务需求时底气更加充足。

5、新梦想启航的时刻

每一年,当网络解决一个又一个问题后,新的挑战总是不期而至。

进入移动互联网最热的年份,公服务的特殊要求、此起彼伏的城域网热点让刚刚有点从容的网络再度面临压力,而SDN的不进则退让网络更没有后路必须大力开展前瞻性研究。微信O2O、互联网金融的新业务形态也给网络带来更多的思考。

未来的腾讯网络基础架构会收获什么?请你和我们一起期待,因为这是一个新的梦想启航的时刻。

(本文同步发布于:http://www.52im.net/thread-1448-1-1.html

附录:有关微信、QQ的文章汇总

[1] QQ、微信团队原创技术文章:

腾讯技术分享:Android手Q的线程死锁监控系统技术实践

微信团队原创分享:iOS版微信的内存监控系统技术实践

让互联网更快:新一代QUIC协议在腾讯的技术实践分享

iOS后台唤醒实战:微信收款到账语音提醒技术总结

腾讯技术分享:社交网络图片的带宽压缩技术演进之路

微信团队分享:视频图像的超分辨率技术原理和应用场景

微信团队分享:微信每日亿次实时音视频聊天背后的技术解密

QQ音乐团队分享:Android中的图片压缩技术详解(上篇)

QQ音乐团队分享:Android中的图片压缩技术详解(下篇)

腾讯团队分享:手机QQ中的人脸识别酷炫动画效果实现详解

腾讯团队分享 :一次手Q聊天界面中图片显示bug的追踪过程分享

微信团队分享:微信Android版小视频编码填过的那些坑》 

微信手机端的本地数据全文检索优化之路》 

企业微信客户端中组织架构数据的同步更新方案优化实战

微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉

QQ 18年:解密8亿月活的QQ后台服务接口隔离技术

月活8.89亿的超级IM微信是如何进行Android端兼容测试的

以手机QQ为例探讨移动端IM中的“轻应用”

一篇文章get微信开源移动端数据库组件WCDB的一切!

微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化

微信后台基于时间序的海量数据冷热分级架构设计实践

微信团队原创分享:Android版微信的臃肿之困与模块化实践之路

微信后台团队:微信后台异步消息队列的优化升级实践分享

微信团队原创分享:微信客户端SQLite数据库损坏修复实践》 

腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率》 

腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(下篇)》 

腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(上篇)》 

微信Mars:微信内部正在使用的网络层封装库,即将开源》 

如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》 

开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]》 

微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》 

微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)》 

微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》 

Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]》 

微信团队原创分享:Android版微信从300KB到30MB的技术演进》 

微信技术总监谈架构:微信之道——大道至简(演讲全文)

微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]》 

如何解读《微信技术总监谈架构:微信之道——大道至简》

微信海量用户背后的后台系统存储架构(视频+PPT) [附件下载]

微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案》 

微信朋友圈海量技术之道PPT [附件下载]》 

微信对网络影响的技术试验及分析(论文全文)》 

一份微信后台技术架构的总结性笔记》 

架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]》 

快速裂变:见证微信强大后台架构从0到1的演进历程(一)

快速裂变:见证微信强大后台架构从0到1的演进历程(二)》 

微信团队原创分享:Android内存泄漏监控和优化技巧总结》 

全面总结iOS版微信升级iOS9遇到的各种“坑”》 

微信团队原创资源混淆工具:让你的APK立减1M》 

微信团队原创Android资源混淆工具:AndResGuard [有源码]》 

Android版微信安装包“减肥”实战记录》 

iOS版微信安装包“减肥”实战记录》 

移动端IM实践:iOS版微信界面卡顿监测方案》 

微信“红包照片”背后的技术难题》 

移动端IM实践:iOS版微信小视频功能技术方案实录》 

移动端IM实践:Android版微信如何大幅提升交互性能(一)

移动端IM实践:Android版微信如何大幅提升交互性能(二)

移动端IM实践:实现Android版微信的智能心跳机制》 

移动端IM实践:WhatsApp、Line、微信的心跳策略分析》 

移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)

移动端IM实践:iOS版微信的多设备字体适配方案探讨》 

信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑

腾讯信鸽技术分享:百亿级实时消息推送的实战经验

>> 更多同类文章 ……

[2] 有关QQ、微信的技术故事:

QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年

闲话即时通讯:腾讯的成长史本质就是一部QQ成长史

2017微信数据报告:日活跃用户达9亿、日发消息380亿条

腾讯开发微信花了多少钱?技术难度真这么大?难在哪?

技术往事:创业初期的腾讯——16年前的冬天,谁动了马化腾的代码》 

技术往事:史上最全QQ图标变迁过程,追寻IM巨人的演进历史》 

技术往事:“QQ群”和“微信红包”是怎么来的?》 

开发往事:深度讲述2010到2015,微信一路风雨的背后》 

开发往事:微信千年不变的那张闪屏图片的由来》 

开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)》 

一个微信实习生自述:我眼中的微信开发团队

首次揭秘:QQ实时视频聊天背后的神秘组织

>> 更多同类文章 ……

(本文同步发布于:http://www.52im.net/thread-1448-1-1.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这