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)