黄冬:土豆网的云计算

2012年5月23日-25日,第四届中国云计算大会在北京国家会议中心隆重举行,会议围绕“云计算实践”这一主题,探讨云计算在中国的发展与实践,展示国内外云计算最新的研究成果和应用。 

第四届云计算大会直播专题

来自土豆网产品技术副总裁黄冬做了主题为“土豆网的云计算”的主题演讲。主要介绍了在云计算方面,土豆是如何运用云计算,来完成视频从上传到观看等一系列问题的。

其实很多人还不知道到底什么是云计算。我听到的最多的解释就是通过互联网来运算,就是云计算。其实云计算这个词的来由有两个,第一个把云计算的概念提出来的是一个很受人尊敬的公司,SUN。他在83年的时候提出一个网络计算的概念,甚至他认为他就是“.com”上面的那个点。在06年的时候,第一次Cloud这个词出现在我们的面前,是亚马逊的EC2,C2就是弹性的计算云。正式的这个词是在晚一些的时候由Google的CEO提出来的互联网的云计算,这是在他们的搜索引擎大会上提出来的概念。我自己专门找了一个朋友去谈这件事,后来我们俩一致认为云计算一定还有更早的来由,实际上这个来由更正宗,就是在很早很早以前,我们任何人在一个绘图软件里面要描述电信基础设施服务的时候,都会画一朵白色的云,然后拿一个闪电一样的线连上它,管上面叫互联网公共服务,再后来把它当做英特网。终于,我们认为这个云还有CPU,还有磁盘的时候,我们就认为这朵云更像计算机了,所以说,这就是云计算。

土豆网现在以云计算为基础,给大家提供视频云的服务,土豆网是怎么做这件事的。下面我们来详细的介绍一下。现在我们看到的新浪SAE最老的前身叫新浪的动态研发平台。在那个时候,新浪认为他要做一个能够随时都把新的业务很容易的部署进去,并且随时都可以像新浪网的新闻一样,能够面向全国的用户,动态、高速、可扩容的平台,所以出现了一个基础的服务平台。在土豆来讲,比较不一样的是,它更多还是以视频为基础,所以它的存储、计算和交付都会有所不同。

土豆网一个核心的思想就是,每个人都是生活的导演。每个人都是生活的导演带来的状况是我们每天有差不多两亿次的视频播放量,这个数据老了一点,不过还好,每天有3500万的独立访问,每个月有2.3亿的用户覆盖。现在的总视频数超过7500万,有超过一个亿的注册用户。这是一些简单的数据,这个数据是平台支持的整体流量。

每个人都是生活的导演里面核心的三步,一个是不久大家会在美国上市公司里面看到优酷土豆有限公司,我们会和优酷合并,优酷土豆这家公司将会是中国唯一一个把UGC,把专业版权内容和自制剧做到了的平台。UGC是每一个用户可以在任何地方把视频分享给互联网任何地点任何设备上的人,专业版权最大的单位就是单个视频会被极大的人群在短时间内集中性的观看。最后一个是自制剧,自制剧在两者之间都会有一些,它比较讲究快,另外它的内容会更快地播放。前两者对土豆的基础平台来讲比较关键,也就是一小部分内容在短时间内被用户集中快速地去索取,这是两个非常核心的地方。与刚才的业务形态不同的是,三项点播外加两项直播的产品。

到技术和产品的形态,对于我们来讲,分成三个部分加一个服务,这里面包含了一系列快速的并行的计算,第二就是大容量或者极大容量的存储,第三就是很容易的交付,让所有人容易的高速的取到它,这三者结合起来,就是一项视频的云服务。

土豆运用云计算的实践

首先,我们谈一下计算。在土豆网里面的计算和EC2比较不同的事情,是我们对三件事情做优化。第一件事情,希望用户很容易的把数据给我,第二件事情,云计算最核心的地方,就是要把非常非常多的视频去变成用户能看的东西。第三个,就是要把这些东西再分发走,让业务可以去用它。最核心的地方还是在视频转码的业务上面。所以,第一件事,像亚马逊S3,你一定要看到我们是在全球几个不同的点,但是对于土豆网来讲,它的云计算,也就是数据存进来的切入点是就近上传,让用户最快速度传上来。然后再就近上传到一个集群点,我会切出很多个小薄片来做转码的集群,当然这在全国分成好多份,在很多个地方走。我们的计算是单一的编解码,这种编解码上面稍微复杂一点,就是多种格式,网友会给我们传上来各种各样稀奇古怪的视频格式,然后我们把多种格式进行转变,但是又要把它分成不同的码流输出去。最后,就是把这些东西快速转码完成之后,分到用户可能要看到的存储结点上去,这个工作就做完了。

所以,这里面有几件比较重要的事。第一件事情是实际上是以用户来源区域为核心去做这种上传调度,我认为DNS是互联网最基础的帮助用户走到一个地方的方法,这个是非常对的,但是实质上现在的云计算里面,基于在七层业务层面去做调度非常重要,也就是说DNS给过来的数据,我认为他是在哪个地方,但是他不一定真的在哪,在会话的时候可能会做一些改变,所以会话的时候会做二次调度,所以我们会把客户放到比较快的结点上去。然后我们有一组基于任务和优先机制的系统送到多个服务器,再去并发转码,转码实际上我们现在有很多架构。在刚才这个机制上,我们可以看到,一般来讲,它很难多线程去做,每台机器上现在有多少个任务有用,是我的一个调度机制。比如说我现在正在播一个电视台上面的节目,播完之后立刻点播给最终观看的人,这时候他的优先级别就高一些。有一些电视剧或者电影,大家还没有看到它的时候,版权方已经把介质给我了,我还得偷偷藏一下,不能让大家看到。

最后一个是核心的非常大的MateDB的管理,我们的MateDB是一个基于传统的数据库去做磁盘的存储。但是,实际上是一个分布式的内存数据库。它的作用就是我的每一个视频是什么,它现在在哪些地方存着,很像文件的分区表放在这里面。但是除此之外,这个MateDB还要做一些提前的工作,里面有去重、里面有版权,去重的概念就是我希望不要存多份,一个人一上来,就是我希望他当时是不是转好码了。其次还要做版权,版权是个很复杂的事。第一个比较重的版权,就比如《大话西游》的版权,或者我没有《大话西游》的版权,用户给我一个,我怎么知道它是《大话西游》,需要从里面抽音频和视频比对,这个是需要CPU大容量计算的工作。

最后一件事比较简单一些,就是跨网络、跨机房、跨运营商把我计算完的数据分发出去。后面我会讲存储的模型,但是一般来讲,用户在一个地方转好码之后,最复杂的事情是怎么传到另外一个运营商的点去,从中间要选好走的路径,这是比较重要的,这是我们的计算部分。

对于视频计算而言,也就是说对于云计算里面纯粹计算的部分,在视频云里面有以下几点,我认为是未来可以不断优化的地方。第一块,就是视频转码会有一些很不一样的优化,现在第一种优化是我们以前把视频转码出来了之后,变成一个格式。但是今天我们可以拿一部移动设备去看它,我手上拿的是一个iPhone,它只支持MP4,只支持TS的流。在这种情况下,我们的转码提前要对各种各样的输出做好优化。如果优化做得好的话,那么在最终交付的时候,兼容的设备就足够多,同时你交付出去的时候,所损耗的CPU会更少。这是一个。

第二件事情,是我们现在已经开始在研究,这是前段时间和一个朋友讨论的东西,就是快速转码,这个快速转码是一个很不一样的事情。就是FMpag把一个流转成目标的格式,但是如果我把.263变成.264,还有一种模型叫翻译。这样,去做编码的次数会少很多,会节约非常多的CPU。

所以,第二件事就是视频计算大IO的优化,这件事现在来看还是一个不好去做的事情。我们提出过三种解决方案,第一种解决方案是用内存去替代磁盘,方法很好,我们甚至准备了128G,甚至更大的内存去做这件事,但是麻烦的事情是用户上传上来的东西在一台机器处理的时候有时候会超过128G,这件事就不是特别可行,也试过SSD,SSD大的问题是SSD读非常好,但是如果既写又读的时候性能非常差,所以硬盘IO,我们还没有一个很好的机制,但也许我认为这是一个未来去做计算时候硬盘上面可优化的一个很好的点,谁解决它,谁会在这个上面拿到很多先机。

第三个是我们自己分布式的MateDB的改造,现在的MateDB是一个一个核心放在那,现在我看异地复制和同步机制确实也不太好,也在内部做一些这方面的改造机制,主要还是看速度有多快。从计算来讲,我认为未来的纯粹在云端的计算,像EC2这样的产品,差的就是存储,它的本地存储太小了。云计算的计算模型,我认为更多是类似Hadoop的模型,就是机器的CPU用于本地存储去做计算,最后获得最大的收益,这样的云计算模型是一个最好的模型。但是EC2还没有很好的解决这个问题,如果我们的某一个公共的纯解决方案能够解决好这个问题,我相信会有非常非常不同的收益。

土豆的存储与交付

再讲讲我们的存储和交付。土豆的存储和交付是这样一个模型,首先,它把自己的存储在一个运营商内,当然一个运营商内这样的小环也可以有多个,我们管这样的环叫小组,比如说北方电信和南方北方是两个小组,每个小组里面有若干个服务器,对于我们而言,刚才所阐述的一个小组有全土豆的全部视频文件是在哪里的分区表,我们会有若干个小组,为什么?因为小组之间的交换很难,所以会有若干个。小组之间我们有一组机器在不同的IDC里面打出特殊的通道来,去做热交换,我们会有一组调度专门去做热交换。最上面的这个调度,它的作用是每当一个用户决定访问里面一个视频的时候,他先看这个土豆到哪个小组快,第二再看这个小组到哪个数据中心快,再看看那个数据中心里面有没有文件去完成这个操作。所以,在土豆的计算非常简单,就是纯粹文件编解码的工作,但是它最核心的部分还在存储和交付的地方。存储,它整个把互联网当做一个大的计算集群,虚拟变成了一套存储系统。

首先,会有一个小组,一个小组里面拥有完整的一份,然后里面若干个Data,这里面也分成截然不同的机制,每一台机器里面都有也许一半,也许一小部分,底下的这个我们管它叫备份,但是它是全部的存储文件。我们的热交换知道现在的磁盘的IO上面,哪些文件被用户观看得最多,然后我们通过热交换把热点放到这个节点里面的热点部分。举个例子,现在最热播的《甄嬛传》,在所有服务器所有硬盘的片区都有它,所以所有人就用最大量去获取它。

我们还会有一部分的节点,这部分节点是一些中小运营商。比如说我们家所在的小区叫宽带通,宽带通这样的运营商通常我们在他那布不了很大的节点,因为他的用户索取量不是特别大。在这种状况下,我们只在这点部署一些节点,他们只存储热点的东西,热点的东西对于我们来讲,它能够支撑一个大的百分比的访问量就OK了,剩下的还是跨自己的运营商,跑到大的完整虚拟节点去取。所以说在存储部分,我们发现云计算已经完全不同了,以前一台计算机里面的硬盘在云计算里的试点变成了一台服务器,我们在一个文件里的分区表变成了一个MateDB,原来的磁盘控制器在我们这点变成了一个调度器,文件系统在我看起来变成了云存储。

最核心的地方,我们认为一个存储,它既应该是存储,也应该提供交付。互联网最公共的HTTP的协议应该是存储协议的最主流协议,当然我们还有更多的视频协议,缓存是在节点级别的缓存,而不只是在内存级别的缓存。未来,我认为云存储一定是基于HTTP协议的大容量的存储,最核心的地方还是存储与交付能够并行往前走,这样的话,他才能够解决我们现在的存储容量很大,交付的时候,单一视频或者说单一存储IO比较密集时候的问题。

在土豆,我们认为云交付也是一个非常非常重要的部分,在这里面,云交付所去承担的是走线,也就是把数据最终读出来交给用户的这么一个东西。对于未来来讲,交付和存储能够混合起来,并且交付本身支持多个协议,这个协议是指假如我看的是一份文档,那我拿PC下载下来,它就是一个word,基于内容的多协议相结合的存储是云交付的一个很有趣的特点。在视频就是,我一个视频存在存储里面,你可以拿任何设备,通过任何特有的视频协议去把它拿走,这是一个很有意思的话题。

在土豆而言,一切云计算都是围绕在视频上面的,里面这个视频对外要支持多个平台、多个协议、多个码流让用户看到。用户看不到我们的存储、计算、交付这样的东西,用户看到的是多平台、多协议、多个码流去到土豆看视频。

再总结一下,土豆的云视频服务,主要基于两个入口。第一个入口,用户可以简单方便的上传,并且把他的任何格式的东西给我们。在这里面,土豆的计算部分是特别优化的云计算,首先,它不是通用的,是一个极其专用的做编解码的云计算。其次,存储和分发提供大容量的高效的云存储和云交付,这非常重要。所以,对视频而言,也就是对土豆网来讲,存储和高效支持多协议相结合的云视频交付,是未来一个比较关键的工作,也是未来的一个愿景。