作者:王德清

出品:雷锋网产业组

前言:数据“横行”的今天,用来存储数据的系统至关重要。而一个大型存储系统,从酝酿到诞生再到成熟,并不是一件简单的事情。

腾讯作为国内领先的社交巨头公司,不仅在2006年自研了TFS等存储系统支撑了其内部90%+的数据存储业务,在面向To B业务,腾讯在2018年又自主研发了面向云场景的「YottaStore」存储系统,存储系统要换代,数据迁移是不可避免的,对腾讯这般体量的公司来说,需要莫大的勇气。

契机之下,雷锋网与腾讯存储团队6位老兵展开了一次深度对话,还原腾讯存储系统变革背后的那些故事。

这一切要从2006年开始说起。

彼时,互联网行业正处在社交化浪潮中,腾讯还并非是现如今这般规模的社交巨头,虽然手握QQ这样的爆款产品,但在SNS刚刚兴起的时代,谁都无法保证可以笑到最后。

也就是这一年,QQ空间作为一款定位于“展示自我和与他人互动的平台”,被腾讯推了出来,一开始数据表现出乎意料的好,用户快速增长,活跃度很高,甚至收入也超出预期,但竞争也随之开始了。

就在QQ空间发布没过多久,靠炒房赚得第一桶金的庞东升决定回到互联网继续冒险,他以100万元人民币收购了张剑福创办的个人数据库公司10770。在稍稍弄明白SNS是怎么一回事后,庞升东决定将10770改造成互动社交型的51.com。

在庞升东的心中,51的假想敌只有一个,就是腾讯的QQ空间。

只要腾讯出什么新花样,51在一个月内一定跟上。更可怕的是,在2006年的大多数月份,51的用户增长数一直在QQ空间之上,这让腾讯非常紧张。

“QQ空间”保卫战势不容缓,而这场保卫战第一战,拼的是“技术”。

上线即“王者”

2006年,刚接手QQ空间的负责人听到的都是投诉的声音:「QQ空间无法打开」;「照片下载速度很慢」……而经过测试,打开一个空间,需要5秒钟。

而要解决这些问题,首先要解决的就是存储这个底层技术。

“2006年,我博士毕业来到腾讯的时候,腾讯还没有统一的存储产品或者技术平台,基本上都是各个业务自己去做一个存储的系统。”腾讯云副总裁、云架构平台部总经理谢明对雷锋网说到。

腾讯存储技术背后的十五年往事

QQ空间登录页

据腾讯2006年披露的数据显示,QQ空间上线3个季度,注册用户数就突破了5000万,月活跃用户数约2300万,日访问人数也已经超过1300万。

那时候,QQ空间的存储系统仅能支撑所有用户每天共上传1000万张图片,显然,面对用户持续不断的增长,依靠此前不断购买存储服务器的方式来进行扩容,其速度是无法跟上用户内容的增长速度。

这些持续增长的UGC数据无疑将会给腾讯存储带来巨大挑战,而如果无法突破这个挑战,QQ空间第一战的结果也就难说了。

而这个挑战被一支刚刚成立的团队接下了。

一支被腾讯主要创办人之一、前CTO张志东称之为“黄埔军校”的团队。这支团队成立的第一个任务就是解决QQ空间发展所带来的存储问题,其第一任主帅就是现任腾讯公司高级执行副总裁卢山。

而摆在这个刚刚成立团队面前的难题,并不亚于愚公家门前王屋、太行两座大山。

技术人员都是有梦想的,他们希望用技术来解决一切,亦或是他们可以参考的只有2003-2004年Google发布的关于三大件(BigTable、GFS、MapReduce)几篇比较知名的论文。

“GFS算是最早期的企业级存储转向互联网大规模廉价分布式存储比较早期实践。那时候我们决定去做一个存储系统,我们当时取名叫TFS。”谢明回忆道。

借鉴Google的几篇论文,在团队成立的第二年,TFS存储系统就上线应用,并全面接管QQ空间的相册业务。

再回到产品册遇到用户投诉,空间团队要求技术人员制作一张全国地图,凡是打开速度高于5秒的被绘成红色,3秒到5秒之间为黄色,低于3秒的被绘成绿色,地图制作出来后,挂在墙上,大家看到的是“祖国江山一片红”,其中,尤以西北、西南和东北地区的颜色最深。

只有一个基础的TFS存储系统显然是不够的。

“从技术角度来说,图片都是百K左右的小数据,相比大尺寸的数据来说,这种存储因为索引密集度更高,带来的技术挑战要大很多,一是要解决索引和数据尺寸协调的空间问题,二是要解决大规模下的成本问题。

于是存储部门根据业务场景的演变,先后推出了适合各种不同图片存储场景的存储系统,如支持实时回收的CTFS系统、支持高频快速访问的HTFS系统、支持EC编码的BTFS系统、基于HDD的键值对TDB存储平台等

就这样,技术团队一块一块地啃,在地图上,绿色和黄色一点一点地增加。花了差不多一年的时间,到2007年年底,一张绿色的中国地图终于出现在大家的面前。此次速度优化上的闯关,为QQ空间日后流量的倍级增长提供了至关重要的保证。

另一座“大山”

但在2009年,另一座大山挡住了“去路”,带宽不够了。

“那时所有的数据中心都是在深圳。当时的骨干网带宽跟现在实际上不能同日而语,是很小的,QQ相册高峰时占用40-50G,而1G的流量对公司的网络就已经是很大的负担了。QQ空间用户增长带来大量的数据让我们基本上把整个华南地区的骨干网消化完了。”

摆在谢明他们面前的也就只有一条路了:启动相册一通点等项目,将海量业务数据从深圳向西安、杭州、广州、上海等地分布,访问带宽同时调度到天津、南京、东莞等成本更低的一通机房。

“我记得搬第一个设备是100T,现在看来100T不大,但那是腾讯历史上最大的一次数据搬迁了。”

那时,没有数据中心专线网络可供腾讯使用,因此,谢明与团队其他成员在半夜通过用公网出口把数据一点一点地“搬到”了西安等地。

而在做数据分布搬迁的过程中,自身也在同步迭代演进。TFS从3份存储演进为同时支持1/2/3份数据的多副本存储;CTFS从2份存储演进为同时支持2/3份数据存储。TSSD平台也从仅支持单机独享的Uin-Value定制存储演进为支持多租户的通用Key-Value存储

就这样QQ空间在TFS存储系统的支撑下,笑到了最后。(51.com被QQ空间击败,转型做了游戏代理,之后逐渐没落。)

腾讯存储技术背后的十五年往事

2009年腾讯存储团队合影照片

也就从2009年之后,QQ空间的收入大幅增加,成为排在网络游戏之后的第二大收入贡献部门,黄钻收入在2010年达到峰值,也因此QQ空间获得2009年度的腾讯合作文化奖。

此后QQ空间的相册日上传照片数不再受限(用户体验到的受限是腾讯产品部门策略),其照片累计存储量也多达数万亿张。

TFS存储系统也逐渐开始为QQ、微信、邮箱、微云、流媒体加速等提供存储服务,目前已经支撑起腾讯90%+的数据存储业务。

微信带来的“冲击”

如果现在回忆2014、2015年的互联网公司的竞争,可能很多人都会想到那时春晚的红包大战。

可让谢明他们万万没想到的是,给TFS存储系统带来下一个压力的节点竟然会是移动互联网时代的微信朋友圈。

“PC互联网时代的竞争其实没有那么激烈,还在吃人口红利,创业公司也并没有那么多,大家觉得日子都还是很好过的。”

从腾讯发布的财报显示,截止2014年底,微信月活跃用户达到5亿,就是这些快速增长的用户让存储团队感受到了前所未有的冲击。

这里要说一下存储系统在微信中的主要作用,微信用户在给朋友发送图片、视频等文件,甚至发红包的时候,首先这些文件要存储在腾讯公司的存储服务器中,而朋友在看这些图片和视频文件的时候,实际上他们是读取了我们存储在腾讯服务器的上的内容。发朋友圈亦是如此。

2014年,随着4G网络的普及,微信得以推广,QQ也可以用手机登录,因此,在春节,微信和手机QQ成为了人们送祝福的主要平台。

“比如在除夕,大家都会到朋友圈去送祝福、发照片、晒年夜饭等……在2014年的除夕,让我们感受到了压力。”腾讯云架构平台部技术运营与质量中心总监高向冉如是说。

用户在除夕的0:00-0:30分之间都在用微信去给亲友发送春节祝福,这对腾讯的存储服务器的读写能力带来了很大的挑战。

腾讯存储技术背后的十五年往事

微信打开页面

需要科普的是,为了控制存储的成本,存储服务的磁盘容量其实是不断变大的,但读写能力并没有随着磁盘容量的变大而提升,实际上单GB的读写能力是成倍下降的。

这背后其实,就是在遇到高并发(用户在同一时间点发消息/朋友圈)情况下,那时的腾讯存储服务器的读写能力是无法满足几亿用户高并发动作的,用户的直观感受就是你的消息对方无法及时看到,你也可能无法及时收到朋友发给你的微信/朋友圈。

因此,存储团队联合微信产品团队首先在各个层面制定了相关的柔性策略,保证用户可以及时的将信息发出去并能被看到,而信息的存储落盘在30分钟内完成。

而在落盘的过程中,需要存储团队通过技术将磁盘的读写能力开放到极致。

“压力其实是挺大的,因为你中间一旦有什么问题,风险还是很高的。”

而在之后,这样情况也并不只是在春节的时候发生,无论是哪家公司筹谋的活动,大家都会来微信朋友圈来“晒”。

“很多时候,友商活动策划做的是否完美,我们可以‘检验’的,而检验的依据就是某一时间段节点给腾讯存储带来的压力。因为微信的业务太大了,一个活动产生了爆点,就会额外给我们存储带来很大的压力,因为用户所有分享在朋友圈的图片和内容最终是要存储在我们数据中心的。”

得益于2014年春节期间的经历,腾讯存储团队在春节过后就开始针对这些“爆点”制定了柔性策略。

2015年春节,微信与央视合作,为观看春晚的微信用户发红包,也让微信的用户量快速增长,除夕凌晨零点的朋友圈等存储场景也达到了数十倍的增长。

腾讯存储技术背后的十五年往事

2016年腾讯存储团队春节值班零点后留影

“微信是一个要出海的业务,出海其实给我们带来了很多挑战。”

说这句话的是现任腾讯云架构平台部系统研发中心总监郭振宇:“微信出海是有一些竞争对手,特别是在东南亚有LINE,还有WhatApp,东南亚的人和自己国内人进行数据沟通的链路很长。”

显然,这是不利于微信抢占海外市场的。

作为公司业务的支持方,我们在存储上面要配合微信团队做更定制化的服务,因为微信也是腾讯重要战略业务,所以当时我们团队为微信做了很多存储相关的业务系统。

郭振宇接着说:“比如怎么样让图片传输更快,我们在全国建立了很多接入点,用户数据只需要传到最近的地方,国外只传到国外数据中心,内地也只需传到内地数据中心。”

而这一切,其实对于存储团队来说,都不再是什么难题。

来自外部的“挑战”

云计算的发展,让很多厂商都瞄向了To B的生意,腾讯云亦是如此,但这又何其容易?

集团层要制定大的战略,事业部要具有To B的思维,技术上也需要具有To B 的意识。

但腾讯的存储部门却在此走了一次“弯路”。

腾讯存储技术背后的十五年往事

腾讯云副总裁、云架构平台部总经理谢明

“说到腾讯云,其实在2012年腾讯开放平台就已经开始做云了,但是开放平台跟现在的腾讯云并不一样,开放平台时候,我们和合作伙伴对接时我们是资源方,因为你要用QQ、QQ空间的资源。但是到后来腾讯云做To B服务的时候,这时候要靠自己的实力去证明我们是专业的。”谢明如是说。

此时,支持腾讯自己业务的TFS存储系统等,已经成熟且稳定。在腾讯看来,将TFS存储系统进行一次产品包装后也能服务好外部第三方业务。

谷歌其实就是这么做的,目前,Google的云存储产品GCS建立在ColossusV2的根基上。ColossusV2是典型的元数据Federation架构的分布式文件存储系统,说白了ColossusV2就是Google由GFS存储系统改进优化而来的。

“但Google的GFS存储系统是诞生于云计算兴起之前。”现任云架构平台部存储研发中心总监杨奋强接着说:

那时候扁平式的对象存储场景不像今天这样丰富清晰,所以分布式文件系统管理的单位是文件,过多过小的文件会导致元数据管理爆炸,所以主要面向几十M的大文件,这样一个百字节的元数据可以管理几十M的大文件,元数据单字节管理效率大概百K级别,冗余的目录树显然对对象存储场景是多余而且低效的。

而此时,又有几个问题摆在了腾讯云存储产品团队和存储技术团队面前:

  • 云计算迅猛发展,行业竞争的日益激烈,客户可选择面较大,对功能、性能、质量、价格等方面的需求不断增强;

  • 从自身现状来说,数据量的不断增大,随之带来软硬件成本、运维成本、优化成本的日趋增大;

  • 行业下游的基础设施,如大型数据中心、新机型、新硬件、各种存储介质、网络环境的不断发展演进。

在这个形势下,2017年,腾讯存储部门决定要做一个新的存储系统,一个更适合云计算的Blob存储系统。

着眼于未来

“开始我们想的名字是BlobStorage。”

杨奋强笑着对雷锋网说:“Blob的意思是一大块连续的二进制数据,像一个视频文件就是一个Blob数据,Storage的意思是存储空间。”

显然,这完全是大家印象中程序员的“正常操作”,但没有获得谢明的赞同。

最终存储系统的名字被确定为「YottaStore」。

“我们是做存储的,每天打交道的词汇比如说GB、TB、PB、EB、ZB,而在ZB上面是YB,也就是YottaByte,目前全世界所有的数据加起来也不超过一个Yotta。”杨奋强接着说。

“另外这个单词又朗朗上口,中文译名‘有他’,给人安全可靠放心的感觉,我们在内部的分享课程,就是‘存储有他,能力无限’。”

而这个名字,也代表了腾讯存储部门的野心,这个存储系统的理论峰值是YB。

“我们现在一个集群可以存储1ZB的数据,如果是1000个这样的集群,那我们就可以存储一个YB的数据。”杨奋强很自信的说。

腾讯存储技术背后的十五年往事

回到重做一个存储系统的问题上,为何腾讯会做出这样一个决定?

“我们当年将内部业务上云的时候,TFS系统支撑我们内部业务的海量数据都是没问题的,支持外部业务当然也没有问题,但我们要把目光放到十年以后。”谢明如是说。

但事实上,重新自研一个存储系统不是一件容易的事情。

再以谷歌为例,为什么谷歌不做一个适合于GCS的云上的Blob存储系统?其实Google也深谙ColossusV2的问题,在几年前,谷歌就组建了一个二三十人团队去做这件事,但最终却不了了之。

由于业务驱动着技术的变革,腾讯选择了Google没有成功的那条道路,YottaStore在2018年开始了研发,并于2019年正式上线。

“YottaStore,我一直说它是一个云数据存储系统,这跟当前业界绝大多数公司的做法是完全不同的,它的优势也是很明显的。”

杨奋强介绍说:“YottaStore的极限是一个集群可以管理超上千万台服务器,而要管理这上千万台的机器,我们原数据管理只需要用600G左右的空间,用一台机器就能存下所有的索引结构,管理上千万台的存储节点服务器,这在业界是绝无仅有的。”

此外,杨奋强表示,YottaStore一个集群可以同时支持各种不同的冗余模式、任意的EC编码,同时,集群可以自适应各种各样不同的机型;对于存储节点的升级,无论集群规模多大,YottaStore都可以在20分钟内完成一个集群的升级。

更令腾讯存储团队骄傲的是,YottaStore开始上线大规模支撑业务的前三个月一直维持百分之百的可用性,而目前系统仍实现单人值周零故障运行。

“YottaStore存储系统上线之后,一反通常系统上线后的紧张忙碌的状态。就在系统上线的第二天,我们研发团队怀着无比轻松的心情去吃了一顿人均500多的自助餐,来犒劳自己。”

杨奋强笑着对雷锋网说道。

用户最为直观感受的就是,基于YottaStore存储的腾讯云COS存储的最低价格为1分钱/GB/月,而其数据持久性达到了99.999999999%(11个9)以上。

YottaStore上线后即获得了腾讯公司级的业务突破奖。

而如今,基于YottaStore存储系统的腾讯云对象存储COS平台,正在为快手、OPPO、小红书、海康、猎豹、58同城等几十多万个企业客户提供了可靠的存储服务,整体数据量高达EB级别。

腾讯内部的“黄埔军校”

从各种渠道的信息来看,关于腾讯这支存储团队的报道少之又少,但其实在内部,这支团队被称之为腾讯的“黄埔军校”。

现任腾讯云架构平台部研发中心总监朱建平也曾是这其中的一员。

“存储部门走出了很多人去负责很多其它方向的技术研发。比如做FPGA异构加速的,做医疗AI,做视频编解码,同时还从这个团队里面不断孵化出创新业务。”

朱建平接着说:“我们内部说存储部门是专家的摇篮,分布式存储平台,系统设计也好,还是运营等各个维度,面临的问题比较多,存储部门特别能锻炼人,所以过往一般都是最好的毕业生放进来,然后这边能力成熟了以后,慢慢又分流到其他战场去。”

据雷锋网了解,目前腾讯AI、服务器、运管、研效、搜索、CDN、视频编码等很多领域的带头人都是从存储团队出来的。

而也正是这样的一个团队,在为腾讯默默筑建着技术的根基。