虽没有什么可歌可泣的故事,但每一次技术的突破,他们都欢呼雀跃过。
前言:数据“横行”的今天,用来存储数据的系统至关重要。而一个大型存储系统,从酝酿到诞生再到成熟,并不是一件简单的事情。
腾讯作为国内领先的社交巨头公司,不仅在 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 空间”保卫战势不容缓,而这场保卫战第一战,拼的是“技术”。
1、上线即“王者”
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 空间日后流量的倍级增长提供了至关重要的保证。
2、另一座“大山”
但在 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%+的数据存储业务。
3、微信带来的“冲击”
如果现在回忆 2014、2015 年的互联网公司的竞争,可能很多人都会想到那时春晚的红包大战。
可让谢明他们万万没想到的是,给 TFS 存储系统带来下一个压力的节点竟然会是移动互联网时代的微信朋友圈。
“PC 互联网时代的竞争其实没有那么激烈,还在吃人口红利,创业公司也并没有那么多,大家觉得日子都还是很好过的。”
从腾讯发布的财报显示,截止 2014 年底,微信月活跃用户达到 5 亿,就是这些快速增长的用户让存储团队感受到了前所未有的冲击。
这里要说一下存储系统在微信中的主要作用,微信用户在给朋友发送图片、视频等文件,甚至发红包的时候,首先这些文件要存储在腾讯公司的存储服务器中,而朋友在看这些图片和视频文件的时候,实际上他们是读取了我们存储在腾讯服务器的上的内容。发朋友圈亦是如此。
2014 年,随着 4G 网络的普及,微信得以推广,QQ 也可以用手机登录,因此,在春节,微信和手机 QQ 成为了人们送祝福的主要平台。
“比如在除夕,大家都会到朋友圈去送祝福、发照片、晒年夜饭等……在 2014 年的除夕,让我们感受到了压力。”腾讯云架构平台部技术运营与质量中心总监高向冉如是说。
用户在除夕的 0:00-0:30 分之间都在用微信去给亲友发送春节祝福,这对腾讯的存储服务器的读写能力带来了很大的挑战。
微信打开页面
需要科普的是,为了控制存储的成本,存储服务的磁盘容量其实是不断变大的,但读写能力并没有随着磁盘容量的变大而提升,实际上单 GB 的读写能力是成倍下降的。
这背后其实,就是在遇到高并发(用户在同一时间点发消息 / 朋友圈)情况下,那时的腾讯存储服务器的读写能力是无法满足几亿用户高并发动作的,用户的直观感受就是你的消息对方无法及时看到,你也可能无法及时收到朋友发给你的微信 / 朋友圈。
因此,存储团队联合微信产品团队首先在各个层面制定了相关的柔性策略,保证用户可以及时的将信息发出去并能被看到,而信息的存储落盘在 30 分钟内完成。
而在落盘的过程中,需要存储团队通过技术将磁盘的读写能力开放到极致。
“压力其实是挺大的,因为你中间一旦有什么问题,风险还是很高的。”
而在之后,这样情况也并不只是在春节的时候发生,无论是哪家公司筹谋的活动,大家都会来微信朋友圈来“晒”。
“很多时候,友商活动策划做的是否完美,我们可以‘检验’的,而检验的依据就是某一时间段节点给腾讯存储带来的压力。因为微信的业务太大了,一个活动产生了爆点,就会额外给我们存储带来很大的压力,因为用户所有分享在朋友圈的图片和内容最终是要存储在我们数据中心的。”
得益于 2014 年春节期间的经历,腾讯存储团队在春节过后就开始针对这些“爆点”制定了柔性策略。
2015 年春节,微信与央视合作,为观看春晚的微信用户发红包,也让微信的用户量快速增长,除夕凌晨零点的朋友圈等存储场景也达到了数十倍的增长。
2016 年腾讯存储团队春节值班零点后留影
“微信是一个要出海的业务,出海其实给我们带来了很多挑战。
说这句话的是现任腾讯云架构平台部系统研发中心总监郭振宇:“微信出海是有一些竞争对手,特别是在东南亚有 LINE,还有 WhatApp,东南亚的人和自己国内人进行数据沟通的链路很长。”
显然,这是不利于微信抢占海外市场的。
作为公司业务的支持方,我们在存储上面要配合微信团队做更定制化的服务,因为微信也是腾讯重要战略业务,所以当时我们团队为微信做了很多存储相关的业务系统。
郭振宇接着说:“比如怎么样让图片传输更快,我们在全国建立了很多接入点,用户数据只需要传到最近的地方,国外只传到国外数据中心,内地也只需传到内地数据中心。”
而这一切,其实对于存储团队来说,都不再是什么难题。
4、来自外部的“挑战”
云计算的发展,让很多厂商都瞄向了 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 存储系统。
5、着眼于未来
“开始我们想的名字是 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 级别。
6、腾讯内部的“黄埔军校”
从各种渠道的信息来看,关于腾讯这支存储团队的报道少之又少,但其实在内部,这支团队被称之为腾讯的“黄埔军校”。
现任腾讯云架构平台部研发中心总监朱建平也曾是这其中的一员。
“存储部门走出了很多人去负责很多其它方向的技术研发。比如做 FPGA 异构加速的,做医疗 AI,做视频编解码,同时还从这个团队里面不断孵化出创新业务。”
朱建平接着说:“我们内部说存储部门是专家的摇篮,分布式存储平台,系统设计也好,还是运营等各个维度,面临的问题比较多,存储部门特别能锻炼人,所以过往一般都是最好的毕业生放进来,然后这边能力成熟了以后,慢慢又分流到其他战场去。”
据雷锋网了解,目前腾讯 AI、服务器、运管、研效、搜索、CDN、视频编码等很多领域的带头人都是从存储团队出来的。
而也正是这样的一个团队,在为腾讯默默筑建着技术的根基。