腾讯的硬盘里,有互联网的昨天今天和明天

PigSay 2020-11-09 阅读:54

文 | 史中

2018年1月1日,太阳照常升起。

世界上所有的时钟合谋,把最后一个90后推过了18岁的门槛。对于这些年轻的面孔来说,自由的风终于如期而至,只是其中难免裹挟着如刀砂砾。

长大好不好,试过才知道。

有老铁感慨万千,怒而把自己18岁时候的青涩杀马特照片晒在朋友圈。果然,人们纷纷效仿,“全民晒18岁”的操作蔚然成风,各路神仙照片霸榜热搜。

一个扑棱蛾子煽动翅膀都能引起飓风,何况千万人一起搞行为艺术。

此时此刻,把地球轻轻拨动。远在南海边的深圳腾讯办公室突然警报大作,几十部手机同时收到风险预警——QQ空间的存储系统遭遇意外的超大流量访问,随时有被挤爆的风险,引擎已自动开启限流保护!

收到报警,腾讯存储团队的同学和QQ空间团队的同学都是N脸懵逼,他们赶紧把实时数据拉过来查看,瞬间全明白了:

一觉醒来,全国人民都在找自己的18岁照片,可是当年存在旧电脑旧硬盘上的照片现在早就不知所踪了。大伙儿一拍脑袋,没商量就去了同一个地方,QQ相册。

于是,原本一万年都不会有多少人访问的“冷数据”突然被大量调用,就好像一本老影集,上一秒还在角落里吃灰,这一秒突然被家里一百多亲戚争抢着看,臣妾着实有点顶不住啊。。。

这波“偷袭”来势汹汹,腾讯存储团队的运维同学们把吃了一半的早饭扔在旁边,像端起AK47冲锋一样噼里啪啦地敲键盘,从四面八方紧急调集资源,给QQ相册的冷存储系统续上“超大杯”的缓存,用尽一切方法提高访问性能。

忙了一天一夜,他们终于有惊无险地顶住了一浪高过一浪的访问洪峰。

这件事,只是腾讯存储团队历史上一个小得不能再小的波澜,但回忆起来,这帮技术宅脸上都洋溢着幸福。他们比任何时候都更加确信:自己所守卫的数据,远不止是冰冷的0和1,它们是鲜活的眉梢眼角,是亿万人的青春模样。

存储团队,在腾讯内部是一个特殊的存在。

你可能有所耳闻,腾讯讲究赛马文化。无论是微信还是王者荣耀,当年都是同一个题目几个团队竞争着去做,最终“活儿好”的才胜出。但是从QQ时代开始,这么多年过去了,腾讯的底层存储团队却一直只此一家,别无分号。

这就奇怪了,这究竟是一群什么人呢?

这群人,是腾讯最受爱戴的老CTO张志东亲手招来的孩子,被称为“Tony 的毕业生”;

这群人,是腾讯第一批底层硬核技术的探索者,是互联网技术史上的“别动队”;

这群人,也在漫长的时光里开枝散叶,成为腾讯从互联网公司向技术公司转身的中坚力量。

这群人在漫长的十几年间,把代码像地层一样层层堆叠,做出精密又庞大的“分布式存储系统”,不仅扛起了QQ空间、微信、腾讯视频、王者荣耀等等你能想到的几乎所有腾讯产品,也帮无数互联网公司、传统企业甚至政府部门保管着他们的珍贵数据。

这群热血大叔手造的代码里,同样埋藏着自己的青春记忆。

(一)神秘“少年班”

2006年,谢明博士毕业。

和很多憧憬未来的毕业生一起,他加入了如火山喷发的腾讯。

虽然腾讯的名字家喻户晓,但谢明进入的部门名字却非常不性感,叫做“系统架构部”。

中哥得提醒你,可别被这个低调的名字骗了,这个部门其实是腾讯的“技术长老会”。全腾讯最有技术前瞻性的牛人都被 CTO 张志东拉进了进来,这帮“长老”的职责就是:为腾讯所有产品的技术架构做评审——说你行,你就行;说你不行,那就帮你弄到行为止。

如今腾讯赫赫有名的领军人物,例如腾讯高级执行副总裁汤道生、腾讯高级执行副总裁卢山、腾讯副总裁姚星都曾经是这个神秘长老会的成员。这个部门有多凶猛,毋庸多言。

大牛人手毕竟有限,很快就忙不过来了。于是,张志东从一批应届生里“钦点”了12位精神小伙儿,放在了系统架构部培养。谢明就这么稀里糊涂地进入了大牛环伺的梦幻之地。

回想起来,那时候的日子特别轻松,有种恍惚还在学校的感觉。部门总共只有30多人,实际上卢山、姚星这些牛人导师只比我大几岁,当时他们也很年轻,时常会拿最新的技术给我们出些题目做做。

谢明回忆。

谢明

站在今天回望,谢明这波“少年班”的人简直不要太幸运,他们不仅加入了一个梦幻的技术团队,还赶上了梦幻的历史转折点——几十年一遇的技术大喷发。

就在谢明加入腾讯的2006年,Google 的三篇论文引爆了整个互联网,分别是 Google FS(分布式文件系统模型)、MapReduce(分布式大数据计算系统模型)、BigTable(分布式数据库模型)。

别被一连串名词吓退,这三篇文章的核心奥义只有一条:

把无数廉价的服务器用缜密的代码缝合起来,可以做出一台无远弗届的分布式超级计算机。

这是人类第一次用锐利的代码语言把“分布式计算”从模糊想象变成钢铁现实,云计算时代的曙光在那一刻怦然闪耀。

看到这些论文的时候,腾讯系统架构部的所有大牛都为之一振。因为,彼时他们正在解决一个“世纪大难题”,而 Google 的思路又和他们不谋而合。

难题正是QQ空间给出的。

当时的那个世界,90后还没成为苦逼的打工人,在玩非主流。社交网络才刚刚诞生——没人对这玩意儿的技术复杂性有充分的心理准备。

结果,QQ空间用户暴涨,带来了甜蜜的烦恼——仅仅60万人在线的时候,系统就跑不动了。(在今天动辄10亿人在线的鹅厂看来,当年的问题着实是小儿科。)

实在顶不住,QQ空间团队只好想出了奇招:让用户“排长队”,进不去的就先玩玩小游戏,等排到了你再说。

QQ空间的总负责人吴宵光紧急把大牛汤道生拉去做了技术总监,这才慢慢让用户在线数突破600万,6000万,6亿。

并发在线(拉客)的问题解决了。很快,压力就转移到了存储系统(接客)上。

对于很多人来说,QQ空间就是他们的“大相册”,每天都会以恐怖的热情上传他们的照片。QQ空间团队自己搞了一个通用的存储方案,这个系统不难用,但问题在于:存储扩容的时候需要复杂的手动操作,速度非常之慢。

本来以为扩容只是偶尔为之,复杂就复杂吧。现在可好,上亿用户每天狂传照片,扩容成了日常操作。

当时负责QQ空间存储系统运维的是如今的腾讯运营管理部总经理郑亚峰,当时他就没日没夜地加机器敲代码扩存储,死去活来,活来死去。结果很残酷——仍然顶不住。

谢明回忆,最危急的时刻,QQ相册只好每天限制800万个用户上传照片,经常还不到中午12点800万个名额就满了,只好明天请早。这导致了神奇的现象:每天半夜12点,就有用户定闹钟,爬起来抢着登录空间上传照片。

这样下去是不行的。

难题摆在了系统架构部负责人卢山的桌面上——如果没有一个好的存储系统,那岂止是QQ空间,未来腾讯所有的业务都会遇到同样的瓶颈。

这事儿有多严重,恐怕很难估量。

深圳大梅沙海滩边的会议中心,卢山、姚星还有一众技术大佬眉头紧皱,他们越说越激动,最终拍案而起——系统架构部全员转向,通力开发一套“分布式存储系统”,就不信顶不住几亿用户!

这一拍桌子,也就注定了一代神兽——TFS——的诞生。

(二)拯救大兵“QQ空间”

大佬们要亲自整活儿了,一众粉丝刷花点赞,板凳排排站,锣鼓家伙响彻台面,只待一场浸透土地的荣誉之战。

姚星使出毕生功力,构思了一套当时最牛的架构设计。要中哥说,这套系统的工作原理像个动物园:

1、每12台存储服务器放进一个机柜,叫做一个 Set。Set 与 Set 之间用分布式系统连接,就好像好多笼子连缀成了一片超大型的“动物园”,这就是分布式文件系统 TFS。

2、在“动物园”旁边还有一个标记了各个“动物”位置的“导览图”,这就是索引数据库。

3、每当用户来存储照片,系统就会根据“导览图”给他在“动物园”里指定一个笼子,把动物放进去;每当用户查询自己的照片,系统就会根据这个“导览图”,去“动物园”里再找到那只动物给他。

架构明确之后,就由少年班的小伙子们一行一行地用代码实现出来。

要知道,分布式存储系统是这个世界上公认最精密最复杂的玩意儿,论精密堪比瑞士手表,论复杂堪比航空母舰。果不其然,越做,老铁们就发现坑越多。

QQ空间上的图片每张都不大,总数又非常多。难受的是:每一张图片都对应索引数据,这就导致索引量也很大。系统频繁地读取索引,就会给索引系统的接口带来炒鸡大的压力——这就好像游客都挤在导览图那,动物园里反而空空荡荡。。。

回到现实世界,用户实际的感觉就是:每一张图刷出来的速度都会变慢。

如果你下载一个电影,耗时10分钟还是20分钟,你感觉上区别其实不明显,反正都很慢。但是如果你刷一张图,1秒钟刷出来还是2秒钟刷出来,你的感觉就会天差地别。

虽然受 Google 启发,但面对这种海量小图片的存储模式,我们其实很难直接借鉴 Google 的架构,而是要自己独创很多技术。

谢明回忆。

那边QQ空间靠限流苦苦支撑,这边系统架构部还在代码的尸山血海里艰难爬行。时不我待,谢明他们一夜之间都被迫从轻松的“新兵蛋子”变成了眼里喷火的“沙场勇士”。他们每推进一行代码,都距离拯救QQ空间更进一步。

这情景像极了《拯救大兵瑞恩》。

讲真,这个团队本身就是一台大戏,自带反差萌看点:一方面,姚星是出了名的高标准、严要求、暴脾气;另一方面,少年班毕竟刚毕业,很多思路着实是幼稚可笑中透着不自量力。

“姚总,ASN 最新的版本是1.7,你为啥还要让我们用1.3嘞?”一位同学问。“废话,1.3稳定可控!1.7出了问题你负责吗?让你干啥就干啥!问这么多干嘛?”姚星直接怼回去。

越是高标准,小伙子们越是犯错误,姚星气得整天训斥他们。小伙子们自己还没觉得怎么样,隔壁组同事都看不下去了:“老姚你这训得也太狠了,嗷一嗓子,把我们都吓够呛。。。”

不过,今天的谢明提起老领导姚星,眼里唯有感激——姚星手里的戒尺,把这批年轻人对于技术的模糊理解变成了精准的肌肉记忆,这是一生的财富。

姚星

2007年春节前几天,TFS 终于准备就绪。

QQ空间一刻都等不了,决定马上从旧系统一点点搬迁过来。

我记得,当时春节我和老婆回她家,家人在那边其乐融融,我在这边抱电脑搬迁索引数据库,也顾不上亲戚怎么看我。。。

谢明笑。

搬迁绝对是个技术活:

不仅要把上亿用户的数据都“打包”清楚,还要把索引也“拆分”明晰,这有点像把长城上的每一块砖都标号,然后拆掉从另一个地方重建起来;

而且为了挪动数据的时候不影响用户的正常使用,往往都要放在后半夜进行。

眼看就要到2007年五一节了,那时候五一还是“七天乐”,大家都会去旅游。想都不用想,假期最后几天肯定会疯狂上传照片。

谢明和伙伴们熬了几个通宵,终于赶在五一前把所有QQ相册的数据都搬到了新家——TFS。

猜猜最开心的人是谁?当然是天天生无可恋搞扩容的郑亚峰。由于 TFS 自带了扩容自动化程序,当年996的活儿,现在只需要敲几下键盘就能完成。郑亚峰热泪盈眶,恨不得亲存储团队的兄弟们几口。(后来他果然以身相许加入了存储团队。)

那个五一,用户开始还按照惯性每天抢那800万个上传名额,不过很快他们就发现,腾讯好像已经完全放开了上传的限制,想什么时候上传就什么时候上传,简直不要太爽。

QQ空间得救了。

当时谢明大概就是这状态。

直到这时,这帮兄弟们才有机会坐在岸边,好好欣赏自己创造的这片代码海洋摄人心魄的美。

这的确是一个令人骄傲的存储架构。望远方,一个个 Set 在赛博空间的地平线上汇成无边浪涌。看脚下,磁盘里每一个字节都被钢铁机械臂一样的数字引擎引来送往,眼花缭乱,一派未来世界的朋克景象。

在后来的腾讯内部讲义《解密腾讯海量服务之道》里,专门有一章就叫“分 Set 部署”,罗列了这种分布式架构方便扩容和运维的种种优点,骄傲之情四处荡漾。

然而,光芒的背后总是阴影。这种 Set 架构中潜藏了一个隐隐的伤痕。而这个伤痕,将在十年后下一次技术大喷发中被猛然撕裂成一道巨大的沟壑。只不过在当时的历史情境下,让这群技术宅意识到问题所在有点强人锁男。

况且在他们面前,还有更紧迫的事情要解决。

(三)知心爱人也得练“硬功夫”

时光转眼到了2010年。

谢明已经百炼成钢,成为了存储团队的负责人,而当年的“少年班”又续了好几茬毕业生,人丁兴旺。

在烟火人间,除了QQ空间,这两年人们还迷上了偷菜、抢车位,好多人用QQ邮箱收发邮件,好多人用QQ旋风下载电影,还有好多人去腾讯网看新闻。当然, 彼时他们还不知道,很快一个叫微信的东西就会横空出世。这些炙手可热的服务,无一例外都跑在存储团队开发的产品上。

很长时间存储系统一直有求必应,宛若“知心爱人”。

但风雨还是眼看就要来。。。

当时腾讯所有的数据全部存在深圳的机房,每天全国人只要使用腾讯相关的的产品,就必然通过网络连入广东省。中国十几亿人可不是吃素的——你想象一下,就好像通向深圳只有几条高速公路,全国人民却每天都开车进进出出反复漂移,不堵爆才怪——华南地区的骨干网络已经告急。

当时深圳机房的图片流量每天都创造新峰值,每多1G,对公网来说都是很大的挑战,我们也捏着一把汗。

而且对于腾讯自己来说还有个更严重的问题:深圳的机房已经全被填满了,扩容出来的存储服务器肉身都没地方放了。

谢明回忆。

存储团队身上的压力越来越重,如果解决不了这个问题,“空间”“视频”“游戏”“新闻”所有业务都将面临数据无处可存的恐怖命运。

你还记得我们之前把数据比作动物,把存储系统比作动物园吗?这群技术宅的紧急任务就是:在全国其他城市也迅速新建几座“动物园”,然后把深圳的“动物”分给它们。

这第一个省外机房,团队选择了西安。

要知道,这不是普通的数据搬迁,从深圳到西安,不仅要跨越机房,还要跨越城市,更要跨越长江黄河千山万水。这堪称存储产品历史上难度最高的一次“乾坤大挪移”。

然而,谢明他们却做出了一个大胆的决定:这次搬迁全部使用公网。

简单科普两句:公网就是我们平常上网用的线路,相当于民用公路,谁都可以上去跑,所以鱼龙混杂有些拥挤还可能出事故,速度大概是500M 每秒;而专网就是运营商给你修一条“专用道”,你掏了钱,整个路上就只有你一辆车,速度大概是1.5G 每秒。

这群技术宅为啥非不用专网呢?

两地实在太远了,专网也提供不了极端稳定的传输能力,况且还要额外花钱,本就不富裕的家庭雪上加霜。我们商量了一下,索性是技术人就对自己狠一点,来一次极限挑战,用公网把数据搬过去才说明我们掌握了最硬核的技术。

谢明笑着说。

当时刚刚加入团队一年的运维负责人高向冉完整见证了这次“血泪搬迁”。

2009年6月,数据开始进入尝试性迁移。为了安全起见,最早迁移的都是 Alpha 账户。Alpha 账户就是腾讯员工自己的QQ号下面的数据。毕竟是自己人,就算万里有一迁移出了问题,也都有个担待。。。

虽然大家都屏气凝神小心翼翼,然而墨菲定律还是生效了。

一方面因为没有经验,一方面因为压力太大,跨城迁移的脚本接连出现了两三次错误。大家惊出N身冷汗,幸亏高向冉他们多了个心眼,提前备份了数据,才没有酿成大祸。

这个事情,和数据安全息息相关。每次出问题的复盘都是很严肃的。那时候开会,总是姚总一个人开骂,先骂一上午下午再干活。大家心里别提多难受了,憋足了劲想要把迁移搞成。

高向冉回忆。

迁移脚本经过各种非人测试,终于万无一失。2009年7月,迁移正式开始。

每天深夜,高向冉他们都攥着拳头,护送珍贵的数据在公网中孤独地穿过华夏大地,如此往复,蚂蚁搬家。一个月后,西安机房宣布:每一个字节的数据都平安落地!

这帮技术宅创造了中国大规模数据搬迁的“样板工程”,经此一役,他们的战场就不再是某个机房,某个城市,而是广袤的土地。

那之后,腾讯每在一地建设机房,存储系统就在那里生根发芽。腾讯存储毫无悬念地成为了全中国最大的分布式存储系统,团队的同学上班都插着腰,可把他们牛坏了。信心爆棚的少年班决定挑战其他的硬科技。

其中一个有趣的技术就是:“分级存储”。

2015年,存在 TFS 上的文件已经超过了500PB,相当于8000个全世界最大的图书馆。

谢明和同学们随即发现了一个有趣的现象:这500PB数据的“访问密度”是不一样的——这和动物园的情况相同:国宝大熊猫前面总是围满了人,狮子老虎前面的人就少一些,而像火鸡这种菜市场能买到的动物就基本上没人看了。。。

特别是腾讯推出“微云”之后,访问密度的差异就特别明显了。用户把资料传到微云上,有时候几年都不会看一眼。这些就成为了“冷数据”;而像一些游戏里的状态参数,恨不得每秒钟都要被改写,那就是超级热的数据。

谢明说。

热的数据,可以用成本高昂但性能爆棚的高速内存来支持;反之,特别冷的数据就可以用成本低廉的HDD硬盘来存储。这样“分级存储”,好处就是能省下不少钱。

技术大牛朱建平当时就参与了分级存储的开发。

朱建平

例如,像农场、抢车位这种每秒钟访问3万次的数据就用全闪存的 T-Memory 顶住;

像图片索引数据库这样比较热的数据就存在 SSD 硬盘搭建的 T-SSD 系统上;

像日常QQ空间的图片就存在标准的 TFS 上;

像微云里用户上传的文件就可以存在成本最优的 BTFS 上。

朱建平给我科普。

咋一下子多出了这么多英文词儿呢??

别害怕,你就把他们都当做存储系统的不同形态就好了。有关 T-Memory 和 T-SSD 的故事,中哥在另一个故事里有详细讲过,这里给你说说成本最低的“BTFS”。

在 BTFS 上,朱建平他们降低存储成本的法宝叫做“纠删码”。

啥是纠删码?

举个例子:现在你就是这个 BTFS 存储系统,你的任务是存储两个数字“1024”和“2020”。于是你拿来两张纸,分别写上“1024”和“2020”。但是现在有个额外的“安全要求”,那就是假设随便一张纸丢了,你的数据还要在。

于是,最容易想到的办法就是:你把两张纸再抄一遍,就是“1024”、“1024”、“2020”、“2020”,共需要四张纸。

但是,你也可以用另一种省钱的方法:除了“1024”和“2020”这两张纸,你再找来第三张,写上“第二个数比第一个数大“996”。这种方法同样可以保证随便丢一张纸但数据不丢,你品品,总共只需要三张纸,成本大大的节省。

这就是纠删码技术。

除了纠删码,BTFS 存储系统还会把文件压缩之后存储,这也能大大减少磁盘占用(为了加速压缩朱建平他们甚至还专门定制了芯片)。总之,用BTFS存储同样的内容,可以比标准的 TFS 节省一半多的磁盘,可以说相当会过日子了。

说到这些,谢明满脸骄傲。要知道,正是凭这些硬技术,腾讯存储系统服务了全球十几亿人,一个技术人一生中如果有这样的作品,已经堪称人间值得。

存储团队的黄金一代开始创造属于他们的鼎盛王朝。

然而,彼时这帮技术宅们还没意识到一个更加严峻的事实——腾讯存储不是腾讯的存储,而是全国人民的存储。

2011年,腾讯存储突破50PB。

(四)扛!扛!扛!

微信简直是存储团队历史上的欢喜冤家。

2014年春节,微信红包横空出世,全国人民发钱抢钱不亦乐乎,存储团队猝不及防扛了一波访问压力;2015年春节,微信赞助春晚,全国人民一起摇红包,存储团队又死扛了一波。

好不容易到了2016年春节,存储团队目测今年终于没啥事儿了。。。

那年带着大家在办公室值班的正是高向冉,晚上九点多,他看一切数据都很平稳,大家过年还加班真的很辛苦,于是决定开车去龙岗海底捞买食材,回来大家一边吃火锅一边值班跨年。

我记得特别清楚,晚上十点十几分,我刚进海底捞,手机就响起来了,支持微信的存储系统莫名其妙地飙到极限。团队给我打电话,从后台数据来看,突然大家都在转发图片,发朋友圈。

由于隐私规定,腾讯不能查看用户发送内容,所以没办法直接确定发生了什么。。。幸好微信和我们都做了一些缓冲预案,能保证微信不挂掉。

高向冉回忆。

当时高向冉一个箭步冲出海底捞,啥也没买, 开着车160迈的速度杀回办公室。

回到腾讯总部,高向冉才恍然大悟,原来是另一家友商赞助了春晚,大家在抽福卡,结果最后一张你懂的福卡特别少,开奖之后,无论抽中还是没抽中,大家都在微信群朋友圈里吐槽,反而对微信造成了巨大的冲击。

那时候我才第一次意识到,微信赞助春晚,我们要帮着扛流量,别人赞助春晚,我们也要帮着扛流量。。。

高向冉笑。

意识到自己是一个“国民基础设施”以后,存储团队的服务意识就变得特别强。快手做活动,他们要做预案,抖音做活动,他们要做预案,拼多多做活动,他们也要做预案。

但是,即便这样,人算还是不如天算。

有一次,深圳突然刮台风,人们早晨起来突然开始在微信里各种发被台风折断的树,存储系统无端承受巨大的冲击;还有一次,北方突然下大雪,人们也是集中时间各种发照片发视频;还有一次北京三里屯,算了不说了。。。

也正是从那时开始,谢明深切地意识到,仅仅做一套能自动化扩容的系统还远远不够,未来的世界需要的存储得具备超高的“系统自治性”。

不过,这个“自治性”的存储系统究竟应该怎么做,由谁来做,彼时的谢明还看不太清。

2016年春节值班后,同学们合影。

(五)裂痕

有关腾讯云的崛起,是腾讯历史上另一个五彩斑斓的故事。

腾讯云最早孵化于汤道生负责的社交网络事业群(SNG),听这个名字你也会有感觉,腾讯云和社交网络好像八竿子打不着。你的感觉是对的,腾讯云最初也只是一次尝试,并没有如今这么高的战略地位。

其实早在2013年底,腾讯高层就有过一次 PK,讨论的题目就是:“腾讯云这么苦逼的活儿,到底值不值得赌上公司的身家性命去做。”

那次讨论的结果是:“稳妥起见,再等一下”。

商业世界就是这么残酷。就是这“等一下”的功夫,阿里云电光火石般异军突起。友商的成功也在客观上坚定了腾讯的信心。从2015年开始,各大机场开始出现腾讯云铺天盖地的广告,这在客观上宣示着腾讯云已经成为了腾讯的主力战略。(有关腾讯云的故事,浅友们可以去看。)

这是腾讯云最初发布时候的照片。

显而易见,一个云计算系统只要对外服务,就必然提供存储能力。腾讯存储团队和腾讯云团队的两条故事线,就这么猝不及防地撞了个满怀。

回忆一下我们故事的开头就会知道,汤道生和卢山这两位顶级负责人,当年可是“技术长老会”的老战友。如今汤道生要搞云,卢山怎么可能不帮忙呢?

不仅帮,还要用力帮,用卢山的原话说就是:要“往死里帮”。

你可能会说,帮就帮呗,咋还要死要活的?把存储系统开放给腾讯云,卖给客户去用不就行了?

可不是这么简单。人人都会在家自己做火锅,很多人也做得很好吃,但是如果让你开个火锅店,你能干得过海底捞吗?这说明一个道理:自用的技术和商用级别的技术,中间还差着十万八千里。

存储团队一开始也没意识到问题的严重,就吹着口哨把存储系统直接包装了一层接口,改名叫“腾讯云存储”,直接交给腾讯云了。

讲真,这个存储模块对于一个云计算系统来说是完全够用的,但是对于一个伟大的云计算系统来说,还远远不够。不好意思,腾讯云还是想做那个伟大的云计算系统。

果然问题出现了。。。最头疼的问题有三个:

1、云存储系统的索引全部基于QQ号(或类似的ID),而其他公司就没有QQ号这个东西,很难调整;

2、云存储使用的对外接口都是自研的,和国际不接轨,客户用起来莫名其妙,不方便;

3、云存储的成本有点高。当年腾讯自己产品的盈利能力强,并不那么在意成本,但是你要拿到市场上按照市价卖,就会赔钱。

这些问题单拿出来哪一个都够存储团队喝一壶了。

要知道,用QQ号管理数据是腾讯的创举,这么多年功勋卓著,解决了很多问题。2009年那次“世纪大搬迁”,也正是因为用QQ号做索引,才能打包得条理清晰,迁移顺利。

没想到,过去最大的优势,反而成为了今天的劣势。

苦难开始降临。

作为存储运维负责人,高向冉经常会收到腾讯云的同事发来的一些截图,内容是他们和客户的对话。客户要么就是吐槽存储性能不如友商好,要么就嫌弃存储价格比友商高。每一张截图都直戳心窝。其实还有更难听的话云同事没好意思截给他看。。。

高向冉

用户口碑确实体现在了市场份额上。

“2016年是我们和友商市场份额差距最大的时候,那时我的心里真的有些动摇,难道我们的技术真的不如别人?”高向冉说。

最让人煎熬的,倒不是技术差距,而是心态上的微妙变化——前些年,腾讯存储是一个托举着十几亿人的骄傲技术团队;如今,自己却突然要变成一个聆听用户需求的“乙方”。

对方的每一个要求,听上去都那么刺耳。

足足两年,大家在幽暗里穿行,有不少新同学实在看不到光明,提出了转岗,他们想去腾讯的“优势”部门,去做那些一上线就有几亿用户的游戏、App,去舞台中央,去追光之下暖暖身子。

高向冉抿抿嘴,告诉我他都会尊重年轻人的想法,他觉得每个人都有自己的追求,多说无益。“只是有时候觉得可惜,我能看到,有的小伙子真的很有潜力。”平常嘻嘻哈哈的他有点伤感。

“最艰难的时候,你自己想过走吗?”我问高向冉。

“我没有”,高向冉斩钉截铁。“十几年的战斗感情,我们这群兄弟一起见证了历史,我把这儿当家。”

其实那几年也并没那么暗淡——不只有同学离开存储团队,也确实有很多同学申请转岗来到存储团队,他们想做一件更久远的,能在代码世界留下深刻痕迹的东西,虽然为此付出的代价可能同样深重。

这帮技术宅扶稳坐好,又重新上路。

他们最先利用内存数据库和纠删码技术做了“分级存储”,大大降低了存储成本(就是在第三章我们讲到的那个);

然后他们着手开发了不基于QQ号的索引系统 LavaDB,大大扩展了腾讯云存储的适用范围;

随后,他们又忍痛割爱放弃了自研的数据接口,全部改成了兼容 AWS S3 的国际接口。

这一波连环掌干下来,腾讯云存储重回业界技术第一梯队——“往死里帮”的 Slogan 初见成效。

但是正当他们准备一鼓作气再刚一波时,猛然发现自己面前出现了一座难以逾越的“大山”。

你还记得吗,我曾经说,让腾讯存储团队引以为傲的 Set 架构,其实隐藏着一个重大的裂痕。没错,这座绕不过的大山就是 Set 架构 本身。

站在2017年看,Set 架构的问题有两点:

1、资源利用率低。由于存储的最小单位是 Set,每个 Set 就相当于一个可乐瓶,可乐瓶里的水不能溢出来,所以就要留有一定的余量。例如每个 Set 都留有20%的空闲磁盘,写到80%就不再写了。这20%磁盘就是一种资源浪费。

2、接口闲置。由于数据是分 Set 存放的,所以早期的数据存在较早的 Set 里,新数据存在新的 Set 里。但客观规律是,较早的数据访问量会很少,新数据访问量会很大。这会导致老 Set 里面的读写接口处于闲置状态,新 Set 的读写接口又时常处于满载状态。这也是一种资源浪费。

不过这里还是要给 Set 架构说句公道话:在十年前,网卡硬件还没有取得技术突破,数据很难在服务器间自由流动,Set 架构确实是当时技术条件下最优的解决方案,但是如今,主流网卡已经是万兆吞吐,旧的架构就不是最优方案了。

一句话:旧有的存储架构已经无法适应云上的环境,腾讯云在等待一个“云原生”的存储系统。

这时,一位“天降猛男”被谢明拉进了团队,他就是云原生存储大神杨奋强。

(六)YottaStore 创生记

2017年,杨奋强来到腾讯云存储团队。

杨奋强在分布式存储系统里泡了多年,人狠话不多,一个云原生的分布式存储系统早就在他的脑海里了。

回忆起研发时的状态,杨奋强用“清苦”形容。最开始团队只有三个人。

虽然清苦,但谢明给了杨奋强他们更宝贵的东西——信任。他们可以毫不妥协地打磨自己心中的理想世界。

杨奋强

咱们先来硬核科普一下吧,这个云原生存储系统的结构是酱的:

1、抛弃了12个存储服务器组成一个 Set 的结构,而是每个存储服务器都通过网络和其他的存储服务器相连。这样的话,所有服务器就连成了一个更为细密的海洋。

如此,就不存在为了每个 Set 预留20%空间的操作了。整个海洋可以存储到99%,余下的空白量的绝对值还是很大,不会出现溢出的问题。这大大降低了成本。

2、每一台服务器上存储的内容,都是系统自动调度的——同一个磁盘上,这个区域存储着QQ空间10年前的照片,下一个区域就存储着微信群里刚刚分享的视频。

如此,就不存在某台服务器满载,某台服务器闲置的情况,整个存储海洋的接口使用率是平均的。这大大提高了性能。

一个系统越精密,其实也就越脆弱。

分布式存储系统由于把文件都打散到了各个服务器,每一块硬盘上都存储了众多文件的一部分,如果它突发故障,影响的范围就很广泛。(就像你同时做着100个甲方的项目,你要是猝死那影响可大了。。。)

旧的文件存储方式:

新的文件存储方式:

更主要的是,存储系统变大以后,每时每刻都会有硬盘坏掉。就好像一个国家足够大,一定每时每刻都有人生病一样。

这个特性,就对系统自愈能力的要求高到变态。

打个比方,假设每块硬盘就是一个人。以前的系统要保证100个人里面有1个人都不生病,这个还容易一些。现在的系统要保证10亿人里1个人都不生病,这对防疫系统的要求就相当高了。

杨奋强说。

所以,杨奋强他们的做法是在存储的全部路径都加上自动校验逻辑,并且在重要的硬件上添加了定期巡检逻辑。如果一块硬盘出了问题,系统会马上把坏盘停用,再把里面的数据自动恢复到其他健康的节点上,与此同时,通知运维人员去机房换掉那块坏盘。

这一整套操作中,外界对于存储系统的访问不会受到丝毫影响。

而且,这套系统也可以零成本支持各种冗余模式,可以三副本、四副本、纠删码,都可以根据需要自动调整;另外系统还自动支持你能想到的一切存储介质:HDD硬盘、SSD硬盘、光盘、磁带,什么姿势都能给。

你有没有发现,以上说的种种金光闪闪的特性,都是系统自动完成的,不需要人的干预。

这就是谢明期待已久的“系统自治性”。

有了这种自治性,高向冉他们再也不用大年夜飙车160迈来解决系统扩容问题,也不会出现大家去QQ空间翻个相册就把系统打挂的尴尬现象。

顶级的系统,需要顶级的工匠精神,整个系统研发历时一年多,直到2019年才整装待发。

到了最激动人心的环节——给新的分布式存储系统起个名字。

杨奋强他们算了一下:

数据的计量单位从小到大是MB、GB、TB、PB、EB、ZB,YB(每大一级就增加1024倍)。现在互联网公司的数据量都是 EB 级别的,而理论上这个分布式数据库每个集群就能放下1ZB的数据(1024PB),如果未来全世界建立1024个集群,总量就能达到 1YB。而YB的全称是 YottaByte。那我们的存储系统就叫 YottaStore 吧。

YottaStore 的名字就是这样来的。

杨奋强和他的 YottaStore 同学们

2019年7月,是 YottaStore 大规模上线的大喜日子。

作为运维负责人,高向冉又开心又害怕。开心的是,终于可以让腾讯云上的客户享受全宇宙最强的存储系统了,把“难用”的帽子甩进南海,从此吐槽是路人;害怕的是,杨奋强把 YottaStore 的性能吹得这么神,上线之后可别打脸啊。。。

可反观杨奋强,却跟没事儿人一样。系统上线第二天,就带着同事们“怀着无比轻松而又一览天下小的那种很吊的心情”,一起去吃了人均500块的自助大餐。

YottaStore 对外承诺的可用性是至少14个9,意思就是整个生命周期内不出问题的时间要占比99.999999999999%。这个数看着就眼晕。

牛X的是,YottaStore 上线之后整整三个月,系统没有出过哪怕一个最轻微的问题,可用性是纯纯的100%。

经常夹在客户和底层系统之间的高向冉彻底释放自我了:“原来客户提过来什么需求,我都提心吊胆,生怕存储系统的架构不支持。现在我放心了,您有啥要求,尽管提,我搞定!”

不过作为普通用户,人们并不关心 YottaStore 研发背后的热血故事,他们感觉到的只有一点:腾讯云存储在参数不变的情况下,越来越便宜。

前两天,腾讯云官网上居然挂出了一个疯狂的价格,深度归档的存储,1GB只要1分钱每月。

我们就是要比别人便宜的情况下,自己还能赚钱。

杨奋强笑。

(七)少年

2018年9月30日,是腾讯历史上一个绕不过的里程碑。

那一天,马化腾发表内部信,宣布了腾讯历史上第三次架构改革,史称“930变革”。

这次改革,汤道生带领一众人马,成立云与智慧产业事业群,这就是大名鼎鼎的 CSIG。而为了更好地支持云,腾讯专门成立了云架构平台部,总经理由谢明出任。

兜兜转转这么多年,谢明也从一个技术人渐渐成为了运筹帷幄的指挥官。

作为存储团队,原来我们的成就感来自于支持的业务发展,例如QQ空间有了6亿用户,微信有了10亿用户。但是现在我们会看营收,从1亿到10亿,从100亿到200亿。这种成就感是完全不同的。

谢明说。

这群技术宅告诉我,腾讯云存储系统正走在“软硬一体化”的路上。

存储系统需要什么样的服务器,就和服务器制造商一起联合定制,现在每三个月就会出一款性能更优的新机型,由于 YottaStore 无敌的自治能力,这些机型一接进去马上就成为存储海洋的一部分,可以对外提供服务。

这些服务器被闪闪发光的代码连缀起来,仿佛生命睁开眼睛,望向星辰大海。

从2006年,QQ空间上的第一张图片存到 TFS,到2020年,腾讯存储系统上的图片已经超过10万亿张。这10万亿张图片里,有你18岁蓄起的摇滚长发,有你怦然心动的姑娘的脸庞,有你毕业前深夜无眠刷到的快手老铁,有你30岁深夜加班朋友圈的自嘲,有你精打细算过日子的拼多多百亿补贴。

这十五年的历程,是腾讯这群年轻人的奋斗,恐怕更是一代中国人的岁月长歌。

想要了解腾讯,你一定会读吴晓波的《腾讯传》。但我觉得,真正的《腾讯传》,仍然鲜活地流淌在谢明、高向冉、朱建平、杨奋强还有无数腾讯人的身上。

高向冉告诉我,从2013年开始直到今天,每年除夕他都带着大伙儿值班到凌晨,已经快十年没回家过年了。

“我和这些兄弟们见面的时间,比和我老婆都长。”他说。

路过野草幽香,也穿过泥沼荒凉,有人转身寻觅彼岸,也有人创业重走长征。然而劫波历尽,当年“少年班”的兄弟却大多仍在此地,只是花谢花开,人无少年再来。

但时光从不会白白流走,他们曾如彼努力地守护互联网的昨天。阳光下,他们的身影也正在召唤无数年轻人,和他们一起守护互联网的今天和明天。

恰同学少年,中流击水,浪遏飞舟。

人间又有谁比他们幸运呢?

2009年,“少年班”的合影。