QQ亿级业务演变:从文件、音视频说起

摘要:在过去的14年里,互联网经历了一系列的产品变迁,其中很多产品死掉了,很多产品勉强的活下来。身处其中的人们,品尝着诱惑、惊喜、失落、振奋等百般滋味。这14年间,有一个起初不起眼的小产品,非但没有死,反而日渐长大,成为了一个用户群最为庞大的互联网产品。

附:讲座PPT下载 QQ亿级业务演变——文件、音视频.ppt (2.62 MB, 下载次数: 442)
12月21日在北大英杰交流中心举行,由腾讯大讲堂、腾讯QQ团队和CSDN共同举办,也是QQ14周年校园行的最后一站。在本次活动中,腾讯即通平台部高级工程师王帅从技术角度详细地从文件、音视频说起,介绍了QQ亿级业务是如何演变而来的,也深入剖析了为了微软的MSN在中国会因水土不服而逐渐没落的原因。

QQ亿级业务演变:从文件、音视频说起-腾讯即通平台部高级工程师 王帅

图:腾讯即通平台部高级工程师 王帅

以下为腾讯即通平台部高级工程师王帅的演讲实录:
王帅,腾讯即通平台部高级工程师。重庆大学计算机硕士毕业,07年3月加入腾讯,一直在QQ后台工作。目前主要负责QQ实时语音、视频、文件等大数据传输业务。

MSN在中国为什么会水土不服?
QQ最早大家都拿它跟MSN做比较,也有人说QQ抄袭了MSN,但众所周知,QQ推出的时间比MSN要早,所以所谓的抄袭并不能成立。MSN在中国早期时发展得非常好,但为何后来渐渐没落?在此,我也讲一下MSN在中国为什么会出现水土不服的原因。其实文件时很重要的一部分,大家都知道很多白领之间上班要传文件或图片,还有进行截图等操作。
因为我是做纯技术的,所以我就技术讲得稍微详细一点。QQ传文件还是相对简单的,大家都知道两个QQ传文件之前肯定有消息通道是可以互相发送消息的,我从一个用户本地的IP端口绑定一个可传输数据的端口,对方也绑定一个,他们相互告知对方,接下来他们比较容易建立一条直连的通道,在什么情况下这个通道是建不成的呢?可能是因为防火墙或NAT,那建立不成我们要怎么办?方法很简单,就是给他一台服务器帮他做数据中转,把数据传到服务器上,然后服务器帮他传给对方。
这个可以通过Traceroute来说明一下,说简单一点,我两个用户,一个用户是深圳市电信,另外一个是上海市联通,这个用户给这个用户发一个数据包,发一个Hello,这个数据是怎么走的?首先数据会直接走到北京,在北京做数据交换,再走到上海,为什么会这样?我们再回过来看这儿,因为他们一个是电信、一个是联通,我们知道中国运营商排第一位是电信,第二位是联通,第三位是移动,第四位更难了,排第四位是长宽,我是指专门PC上的。以前是接电信和教育网,现在教育网非常少了,很多学校都已经不是教育网了。
这种情况下,这就是中国特色,为什么叫中国特色呢?接下来我讲先中国特色再讲美国怎么样。中国特色的运营商首先运营商之间没有省级交换节点,可以看到千里迢迢跑到北京做数据交换,交换点是最容易网络拥塞的,跨ISP的用户进行直接连接效果一般比较差,用户连接和自己ISP不相同的服务器效果也会比较差。如果美国不让连接,我会告你,这就是跟中国不一样。
我们会看到中国是工信部管运营商,搞各种扩容,扩容的原因就是各个网用户在增长,目前我们得到的资料是核心交换有四个,北京有两个,广州一个,上海一个,其他省份不管怎么样都要到核心交换点进行数据传输,这样很容易网络拥塞。真正来技术问题了,好的传文件关键点有什么,刚才说了架构点是什么,其实这些MSN用过的同学都知道,他的速度比QQ慢很多,包括大家在微博搜索,其实文件的口碑一直是最好的。刚才说了,MSN这些都做了,它在中国还是水土不服,其实我理解,首先他的技术不畅,但是外企一些流程会比较多,还有外企它的一个资源申请都会非常麻烦,因为他的很多思想还是美国那种思想,我们传文件需要五个关键点:

  • 提高NAT穿透成功率。
  • 压缩传输,比如说白领之间传Word和PPT,实际上传输文件是自己大小三分之一,大家认为传一个视频能不能压缩?能不能不损伤质量压缩呢?实际上是不行的,原因是什么?如果能不损伤质量压缩做视频那个软件早已经压缩好了。所以解决视频的这种问题,我们就是通过秒传,数据中转的时候我判断服务器已经有同一种数据,我就直接按一秒传了,其实对发送方来说是快速上传,但是接收方就是慢慢下载,这个就跟中国网络特点有关系,用户上行带宽,只有下行带宽的四分之一甚至更小。
  • 中转直连双通道的保证,什么是双通道的保证呢?说白了就是烧钱给用户服务,为什么烧钱呢?用户本来可以直连传输数据的,这个不花钱的,但是速度比较慢,用服务器速度很快,我们也让他用服务器,烧什么钱呢?运营商烧服务器计价钱跟服务器的费用,还有IDC上网流量,所以要做的好的服务肯定要有资本去支撑的。
  • 最佳接入服务器。说起来很简单,就是A和B两个用户,我怎么样选择一台最好的中转服务器。
  • 海量服务器的运营。

海量服务器的管理
对于海量服务器,我们如何进行管理?这里讲了,这些是给用户中转数据用的,比如说这两个用户想传一个文件,我们会给他分一台中转服务器,这里面可能一共两三千台服务器,而且分布,可能分布在十几个省,通过一个配置中心,但配置中心怎么样管理一两千台服务器,配置中心的功能功能很简单,就是管理这些服务器的状态,还有当前负载。什么是当前负载?就是当前它最大提供一千个人视频,现在有八百个人视频了,就是这些信息。首先配置中心是整个集群的运营核心,因为它要管理这些服务器,另外它就要负责中转服务器的配置,各种集群的配制,还要收转服务器当前的状态,有没有死机,这些都做好了,你才能做到这句话,但这话说起来容易做起来却有难度。就是我们都会有一套系统,然后那系统里面都有你名下管理服务器各种信息,有些同时就在服务器里面写上这句话,机器故障直接重启,不用给机器负责人打电话。用这句话,当然不是说死机不管,第二天再去弄,几千人视频不了没关系,同时几万人视频这种是不行的。
比如说这可能字太小了,分辨率不够高,我简单说一下,这个就是我们每个月或者每个季度定期发的一封邮件,我们有接通率测试,由一台机器自动给我们所有员工打一遍电话,接到电话按照语音提示按一下#号就挂掉之后,如果直接挂掉也不会有直接惩罚,但是总监或者领导会找你谈谈话,而且这里有接通率的记录,上次记录,变化情况是怎么样的。
比如说我管理我下面那些人,怎么样提高他们的意识,这次没接到交一百块钱,下一次小组活动用,他做久以后自然有这种意识,但是在初期的时候你需要用手段让他提高这种意识。刚才讲了,你负责服务器多,手机不能关机,刚做有点朝阳,做一年有中年的感觉,做三年以后,所以说海量服务器一定要把服务器管理好才能一直保持这种状态。
接下来就讲一下配置中心到底是怎么样实现管理这些海量服务器的。他主要分两块信息,一块静态信息,它是在数据库里面,是通过可视化配置,程序启动后把数据从数据库刷如共享内存。动态信息就是由各个服务器定时上报而来,为什么分静态跟动态呢?静态是在配置方案开始就要配置好,而且很容易看到的。
静态信息可能包含这些东西,它不会随着你运营过程中改变而改变,比如说他服务器已经有这么多台,每一行代表一台服务器的话,那这些服务器服务场景就是电信到电信,还有一些场景是联通到联通。第二列标识这个服务器服务这种场景下区域是哪些?比如说他服务场景是广东到广东的电信对电信,这台服务器的唯一ID就是这里唯一ID,这里没有什么特别意义,只是区别它。这台服务器就是在汕头、在天津,这台服务器当前状况怎么样,大部分是可用,也有不可用,服务器最大承载多少人同时传文件,或者是音视频这里也有配置。大家可以看到每台服务器是不一样的,比如说差两年的服务器性能差一倍,这些都是静态信息,就是在你代码运行过程中,不会改变的,这个是动态信息,就是由各个服务器真正数据中转服务器上报而来的,它会改变的,比如它会记录最后上报时间是什么。它当前服务器负载是什么。因为这个还是稍微偏专业一些,可以把它理解为一个Excel,刚才讲了这个怎么管理它们,这个管理他们就是把这些信息提供给策略中心来用,策略中心就是来了两个用户,由策略中心配备一台合理的服务器。
音视频处理数据包的延迟
何谓音视频延迟?就是我一个数据包,一个语音包,从这个人开始说话,到我采集完,到我发给对方,到他真正听到,大概延迟现在一般在500毫秒左右,我们上次测在这个毫秒以内,这就要求你服务器的处理时间要非常短,而且不能有抖动,客户端那边也会做闭环测试,什么是闭环测试呢?这些都不要,我只从采集到直接收听花费是20毫秒,就是说一个数据从采集到真正播放需要20毫秒,没有任何干扰情况下。服务器处理数据包延迟非常小,做一个简单操作都会引起一段数据小搏动,比如说写字团这种就要慎用。
刚才讲了设计理念的变革,从瘦服务端到把服务器养成胖子,以前服务器要求流程很简单、很清晰的,很多的协议组合、逻辑判断都由客户端做,服务器主要是保证面对海量请求的稳定。
手持设备的崛起就需要更轻,更快速移植,这里面需要一些逻辑组合、协议控制、核心控制应该放在服务器。这个就是在音视频上新的挑战,以服务器为核心的云引擎设计,说白了就是客户端只是听命于服务器简单单一的角色,所以它能快速在各个不同版本间进行切换,依据网络的场景、FEC、Jitter Buffer大小去调整,还有终端的能力,CPU用的视频编解码都是耗CPU,还有网络抖动、固有的丢包都采用不同的策略。

总结:

  • 海量服务器涉及的核心简单再简单,能力越高,设计的架构越简单,腾讯流传一句话就是优秀的架构师需要普通的程序员,普通的架构师需要优秀的程序员
  • 一切尽在掌握中,对于Demo性能要了若指掌。
  • 腾讯一直强调后台基础能力,后台保护、灰度、柔性。什么时候保护呢?我本来只能提供一万个人用户,突然来了两万个人,我还是能够保证提供一万个人的服务,而不是说一个人的服务都不能提供了。后台保护最经典例子是关于订票系统之类的,它本来设计新闻发布会说我当时设计只支持一万人同时订票,实际上三万人我也没办法,每个人都订不了了,这种是不对的在后台来说,你要有过来保护的能力。灰度就是我们切换一种策略以后,我们不能一刀切,让所有用户都使用,我们一般一步一步放一些用户去用。
  • 全面监控就是你一定有一套监控系统,去看你各个服务器状态。
  • 可运营,大家工作以后才出现的,就是你开发时间乘以20才是运营时间。

提问:策略中心是一台服务器还是什么?
王帅:肯定不可能一台,所有腾讯基础服务部可能有单点故障。什么是单点故障,就是只有一台服务器死了就没有办法提供服务了,这种是不合格的。接下来就讲,他怎么把收集到的这些信息给策略中心去用,我从技术的角度去讲个,可能大部分同学都能听懂,首先得到双方的IP,就能得到二维数组,得到一个IDC,它的服务场景是这些,服务区域是这些,就是说这些机器都可以给当前这两个人去用,接下来还要上报超时的时间,所谓超时就是这台机器死机了,我们可以看到这台晚两分钟,我们可以把这台去掉。得到双方IP,先找到这列,再找到这列的子类,剩下这三台我可以选一台给当前人用。怎么用呢?这就是刚才讲的负载均衡,这里说一下机器故障可以安然睡觉怎么实现呢?因为已经做管理了,死机的服务器不会为用户提供服务了,这就是简单海量服务器的管理,它的原理没有复杂,就是状态上报一种处理。

本文来自腾讯大讲堂(DJT.QQ.COM),转载请注明出处。