QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年
本文来自腾讯资深架构师杨志华的分享。
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的线程死锁监控系统技术实践》
《QQ音乐团队分享:Android中的图片压缩技术详解(上篇)》
《QQ音乐团队分享:Android中的图片压缩技术详解(下篇)》
《腾讯团队分享 :一次手Q聊天界面中图片显示bug的追踪过程分享》
《微信团队分享:微信Android版小视频编码填过的那些坑》
《微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉》
《月活8.89亿的超级IM微信是如何进行Android端兼容测试的》
《微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化》
《微信团队原创分享:Android版微信的臃肿之困与模块化实践之路》
《微信团队原创分享:微信客户端SQLite数据库损坏修复实践》
《腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率》
《腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(下篇)》
《腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(上篇)》
《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》
《开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]》
《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》
《微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)》
《微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》
《Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]》
《微信团队原创分享:Android版微信从300KB到30MB的技术演进》
《微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]》
《微信海量用户背后的后台系统存储架构(视频+PPT) [附件下载]》
《微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案》
《架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]》
《微信团队原创分享:Android内存泄漏监控和优化技巧总结》
《微信团队原创Android资源混淆工具:AndResGuard [有源码]》
《移动端IM实践:Android版微信如何大幅提升交互性能(一)》
《移动端IM实践:Android版微信如何大幅提升交互性能(二)》
《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》
《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》
《信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑》
>> 更多同类文章 ……
[2] 有关QQ、微信的技术故事:
《2017微信数据报告:日活跃用户达9亿、日发消息380亿条》
《技术往事:创业初期的腾讯——16年前的冬天,谁动了马化腾的代码》
《技术往事:史上最全QQ图标变迁过程,追寻IM巨人的演进历史》
《开发往事:深度讲述2010到2015,微信一路风雨的背后》
《开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)》
>> 更多同类文章 ……
(本文同步发布于:http://www.52im.net/thread-1448-1-1.html)
QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年的更多相关文章
- 用c#开发微信 (6) 微渠道 - 推广渠道管理系统 1 基础架构搭建
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本系统使用 ...
- 用c#开发微信 (11) 微统计 - 阅读分享统计系统 1 基础架构搭建
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展
本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样: ▲ 微信群聊界面里的@人功能 ▲ QQ群聊界面里 ...
- QQ,微信第三方登陆
感觉越是大公司的SDK越不好用,其实我也是一直在想为什么他们拿那么高的工资却干着不相应的事儿. 下面说下QQ和微信第三方登陆的一点坑 首先 (QQ互联)自带的sdk中 一个文件工程没有调用产生关联错 ...
- 微信电脑版即将到来了 安装QQ浏览器微信版体验吧
之前说过在手机上微信打字慢,tx最终还是想开了,最近TX邀请测试微信电脑版,想要尝鲜的朋友可以去exp.qq.com申请QQ浏览器微信版体验,不过体验将要结束了,相信正式版很快就要出来了.[微信网页版 ...
- 对QQ、微信等第三方登录的几个思考
转自:http://www.jianshu.com/p/7f282dfc16fc 今天聊聊注册.登录环节中很常见的第三方登录,如QQ.微信.支付宝.新浪微博等.虽然这些产品的开放平台都提供了标准的接入 ...
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...
- ios第三方分享到qq、微信、人人网、微博总结
我们开发出来的APP通常要通过第三方分享到其他社交平台,如qq.微博微信 等.通过分享可以提高APP的传播效率,增加APP的曝光率,因此也算是APP功能 里的标配了吧.目前常用的第三方分享途径有qq. ...
- 友盟分享--集成QQ和微信
随着社交工具的应用范围越来越广,分享一些内容的功能也开始要求实现了. 用得比较多的第三方,比如说友盟,比如说Share等等... 前几天刚用友盟写了集成QQ和微信客户端的功能,觉得有必要分享一下. 在 ...
随机推荐
- 网络大数据分析 -- 使用 ElasticSearch + LogStash + Kibana 来可视化网络流量
https://blog.csdn.net/yeasy/article/details/45332493
- hdu5819
补多校系列,具体见多校题解http://www.cnblogs.com/duoxiao/p/5777700.html 值得注意的是如果当前i初始向左,前i个骑士最终只有1个向右 对于f[i][1]状态 ...
- BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子
来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...
- Codeforces Round #352 (Div. 1) B. Robin Hood (二分)
B. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 23、Django实战第23天:视频播放页面
打开素材course-play.html,会发现播放页面处了包含播放器,其他和“章节”页面一样. 1.把course-play.html复制到template目录下 2.把下面两段代码拷贝出来 < ...
- Column 1 of table 'xxx' cannot be converted from type 'varchar(33)' to type 'varchar(11)'
mysql主从同步失败.错误日志如下. Column 1 of table 'xxx' cannot be converted from type 'varchar(33)' to type 'var ...
- (转)python之并行任务的技巧
Python的并发处理能力臭名昭著.先撇开线程以及GIL方面的问题不说,我觉得多线程问题的根源不在技术上而在于理念.大部分关于Pyhon线程和多进程的资料虽然都很不错,但却过于细节.这些资料讲的都是虎 ...
- ubuntu 进入 pycharm(社区版)
先进入到pycharm所在的目录,然后进入bin 然后./pycharm.sh 例如,我把pycharm 放在桌面上 su ➜ xushukui cd '/home/xushukui/桌面/pycha ...
- 【记忆化搜索】bzoj1079 [SCOI2008]着色方案
#include<cstring> #include<cstdio> using namespace std; #define MOD 1000000007 typedef l ...
- [CF321C]Ciel the Commander
题目大意: 给你一棵n个结点的树,给每个结点分级,最高为'A',最低为'Z'. 尝试构造一种分级方案,使得任意两个相同级别的结点路径上至少有一个更高级的结点. 思路: 贪心+树上点分. 递归处理每一棵 ...