admin管理员组

文章数量:1539576

空气里弥漫着泡面和熬夜的味道,杨木窝在项目室,几乎和周边融为一体。

他在这里闭关已经大半年,作为工程师,钻研技术必不可少,而作为年轻人,本该爱玩的他却没觉得技术有多枯燥。和很多人谈技术必言改变世界不同,杨木对它有着更为务实的看法。他把技术当作改变自己命运的阶梯,抓住它,自己就能走出那个偏远山村,走入中国最发达的城市,并最终纵身一跃,成为现代文明的一部分。

他对此深信不疑,因为他已经站到了北京。纵然现在是寒冬的深夜,窗外依旧灯光闪烁,车水马龙。透过十五楼的玻璃看去,杨木清晰感觉到未来就在脚下。

而眼前,他正在迈出关键一步。

今天是封闭开发的最后一天,零点过后,他孤注一掷的实时推荐就会上线,效果的好坏,将直接决定他的去留。他已经做了好几轮上线检查,但即使如此,在时钟倒数时他依然感到紧张,以至于忘了手里的可乐,既没送到嘴边,也没放回桌上,就一直端着,看着屏幕上时间跳动,一直到 2019 年 12 月 20 日 0 点 00。

他知道根据设计,线上流量会在这时切进自己的系统。

物理世界里河流造就文明,互联网络中流量决定一切。

此时此刻,巨大的流量就握在杨木的手中,他看不见它们,却能听见它们的轰鸣。他想象着它们像江水一样涌进来,并在这个由代码织就的超级工程里被再次分配和创造价值。正如水流驱动轮机,切割磁感线,最终转化成电能一样。

杨木面前有很多仪表盘,此刻正跳个不停。

这些仪表盘被分成三个部分,最上边用以衡量推荐系统的最终效果,中间代表着推荐系统本身的状态,最下边则展示着推荐系统对其他系统的依赖——确切的说是一个有 50 个节点的 Flink 集群——的情况。

上面的指标持续走好,杨木对此毫不意外,因为他已经 AB 测过多次,早就能确定效果;他对中间的部分也不担心,因为这里每一行代码都经过了他的审核,他清楚每一个细节,知道不会有问题;他最担心的还是下面 Flink 集群的情况,虽然加了一层保险,但他依然明白 Flink 是一把双刃剑,锋利无比,但弄不好会伤了自己,毕竟,一年前他是领教过的。

想到这里,杨木又开始紧张起来,下意识拿起可乐灌了一口,冰凉的怪味液体流进肚子,受热的碳酸随即开始挥发,然后,气体伴随往事就一股脑涌了上来。

01 萍水相逢,尽是他乡之客

杨木是在他最不漂泊的日子里遇到 Flink 的。

那是 2016 年春节过后的一天,阳光灿烂,他躺在老家抹的雪白的房子里,用多年来少有的轻松心情刷着手机——作为大数据从业者,他保持着关注行业动态的习惯。

这时一条关于 Doug Cuting 的新闻抓住了他的眼球,里边有一小节叫“进入 Spark 时代”,Doug Cuting 先是高度评价 Spark,说它是 Hadoop 生态里执行引擎的统治者,迟早会成为大数据技术栈的基础组件,进而话锋一转,说德国出来一个 Flink,Flink 在架构设计上要比 Spark 好一些。这很像金庸,他说屠龙刀是天下至尊,可以号令天下,莫敢不从,等大家都争得你死我活的时候,突然说其实还有一把倚天剑,要比屠龙刀还要锋利那么一点......

金庸之于武侠,恰如 Doug Cutting 之于大数据,大数据启自 Hadoop,Doug Cutting 便是 Hadoop 的创始人。

所以他说的话,杨木是信的,哪怕他远在地球对面的加州,哪怕杨木刚刚凭借 Spark 改变了自己的命运。

2011 年,杨木从陕西一个普通二本毕业,迟迟找不到工作,为了保证学校的就业率,他和另外一些同学被强行安排,签了一家本地外包公司,月薪 1500。杨木有个邻居,叫胡子,从小一块长大,初中毕业就去打工,当时每月能赚四五千元。一年前胡子出钱,把自己家翻盖出了五间崭新的大瓦房,就耸立在杨木家的东边。

杨木也想把老家的房翻盖翻盖,无奈上学早花光了家里的积蓄。现在他只说找到了工作,待遇还行,不敢回家,每次都拿太忙来搪塞。 

忙确实是忙,但待遇是真不行,杨木干了 3 个月,整个人瘦了一圈,只攒下两千块,他琢磨这样肯定是不能回家过年了。于是就在 12 月,所有外来务工人员都想着回家的时候,杨木带着仅有的积蓄和一卷被子到了北京,他决定在这个满是神话的地方闯一闯。

为了省钱,他没租房子,也没住旅馆。白天没有面试的时候,他就把棉服反穿,在西站边的 KFC 里看面试宝典,到了晚上,他先是花四块钱在旁边的网吧里上机一小时,查邮件、找工作、投简历,然后回到西站里边睡觉。他曾在西站周边转了半天,发现还是火车站里最好,有暖气,暖和。

他选的地方一般都是墙那排椅子的后边,很多候车的民工就躺在那里。后来有个清洁工注意到了他,攀谈过后,发现居然还是老乡,便把他带到了二楼餐厅后边。这里挨着暖气出风口,而且还用装修的挡板隔了起来,用他俩的话说,就是一个豪华标准间。

当然了,当有重要面试的时候,他会步行几公里,去离西站稍远一点的小宾馆开个房间,洗个澡,然后好好睡一觉。

2011 年,王兴的美团杀出重围,张小龙的微信力挫米聊,唐岩的陌陌也默默地上线了——这是移动互联网准备席卷世界的一年。虽然杨木跟这些人和公司都没关系,但正是他们吹起的风让他找到了工作。那年8月,有家要做 LBS 的公司拿了一大笔钱,创始人拍着胸脯说产品节前上线,趁春节打一仗,明年市场格局就能定下来。所以 12 月杨木满世界找工作的时候,他们正好也在招兵买马。

经过两轮不甚严谨的面试之后,杨木顺利拿到了 offer。实话说,他的技术很一般,面试表现的也很拘谨,所以最后通知他来报道的时候,杨木十分惊讶。然而更让他惊讶的是,他的待遇居然高达 8000 一个月,足足是之前的五倍,同时还有一台巨大屏幕的智能手机给他“体验体验”。

他简直高兴坏了,连礼貌性的考虑一下都没说,立马收拾东西就入职了。他开始全神贯注的搞安卓开发,春节也没回去,但给家里打了 8 千块,这多少让他心里好过一些。

然而好景不长,公司在春节的数据表现很差,投资人说这叫钱扔水里也没溅起一个水花。所以年后不久,正在春暖花开的时候,创始人便坚定而无情的宣布要过冬。原来这些迷迷糊糊被招进来的人,大部分都要被开掉,杨木也收到了通知。

杨木起初并不十分害怕,他摸着兜里的工资卡,心里盘算,早就感觉这钱赚的太容易了,然而他又想到公司可能会把钱再要回去,于是这才开始担心起来,决定一会就下楼把钱取出来,到时一口咬定都花完了。

果然,运维老大出现在了他的面前。

但让他惊讶的是,运维老大不是来跟他要钱的,而是问他愿不愿意跟着一起走。

原来,杨木这加班如归的天赋早被运维老大盯上了,他断言杨木在运维界会有一番作为,并承诺工资可观。

杨木当然愿意。于是他加入了另外一家正在试验大数据的互联网公司,开始做 Hadoop 集群的运维。

2012 年,大数据技术在国内不过刚刚兴起,杨木靠着肯拼肯学,倒把集群弄的不错。一晃两年,他换了一间稍微大点的房子,不过依然很少回去休息。

转机出现在 2014 年,公司开启了一轮融资,决定押宝大数据。为了弥补研发人员的不足,杨木被抽调出来,转成了研发。这时的他,已经不比 3 年前了。凭借这几年打下的底子,他很快就在一众年轻人中脱颖而出,担负起了调研 Spark 的重任,自此一路顺风顺水。

他拿钱给家里盖了一排大瓦房,听说和胡子家一样高,比他们还多一间,他让老爹把二伯也接了进去。

2015 年 5 月,他在老板的授意下,基于 Spark Streaming 做了一套实时风控,完美支持了这年的春节。节后老板让他回家放松一下,说再回公司的时候会有惊喜。当时都传言部门要组建实时计算团队,他多少意识到老板说的惊喜会和这个有关。

自打上学开始,他从没在 3 月的时候回过老家。他惊奇的发现老家的雪还没化干净,积雪把村口的破庙和荒山连在一起,他一眼看见了雪线旁边自己家的房子,它站在朝南的山坡下,覆满阳光。

久别的重逢化作几句寒暄,放下书包的娘很快就准备出来一大桌子饭菜。有鸡有鱼,还有他最爱吃的拆锅肉——这是节前的猪肉,家里知道他回来,一直留到现在才煮。老爹不知道从哪拎出一瓶酒,招呼杨木,叫他二伯一起来吃饭。

那晚杨木吃的很饱,睡的也很香,从八点睡到天光大亮,直到化雪的水顺着屋檐滴滴答答掉在地上,他才恋恋不舍的撑起身子。

他一拿起手机,便遇到了 Flink。

02 关山难越,谁悲失路之人

杨木回家的日子很短。

在这段时间里,早就驼背的老爹又焕发起了容光,他常常挺起身子,去那些他曾经很少去的村民聚集点。一边走,一边有人问他,老杨啥时候去城里住啊,他便声音洪亮的回答道,去那地方干啥,羊都不让放,不去,说完双方就哈哈大笑起来。

村子很小,这些对话杨木能听见,他想等再拼几年,还是要把老人们接过去。

后来他回北京后,果然被提拔成了实时组的 leader,虽然整个组才仨人,但这对他来说已经是大喜过望了。

随着级别的提高,杨木的压力也一下子变大了,他想调研Flink的事情就一直拖着没开始,只能先保持关注。再后来,他在那年的 Hadoop Summit 上看到一个 Flink 的分享。他对这事的印象很深,一来那届 Summit 里 Flink 相关的话题本来就没几个,二来这一个话题有俩人讲,都来自阿里,一个叫蒋晓伟一个叫王峰,一个讲的时候另一个就旁边站着,站着的时候很安静,讲的时候又很自信,反差很大。

那会是 2016 年,用 Flink 的公司真不多,实际上那届 Hadoop Summit 只有两个关于 Flink 的话题,另外一个来自 Flink 德国的创始团队。

但风起于青萍之末,只过了一年多,杨木就明显感觉到网上关于 Flink 的分享多了起来。到了 2018 年的时候,他也用 Flink 做了一些东西,比如实时报表,实时 BI,不过总觉得不过瘾。

于是他把目光又投入到了风控上。这个他的成名作上线两年了,虽经过多次升级,但一直基于 Spark Streaming 在跑,延迟大概 5 秒,他知道这是 Spark 的极限。而用 Flink,理论上时延能做到 1 秒以内。风控中时间就是金钱,几秒钟看似不多,但在系统里却能让一些“重型”模型撒开了跑,把效果往上提升一个层次。

杨木谨慎的盘算过重构的方案,确认没问题之后找老板——带他过来的运维老大——做了汇报。老板听完之后只说了一句话,行啊,你别搞挂了就行。

哪知一语成谶。

系统重构在业务上是风险最低的,但在工程上却是风险最高的,多少工程师折在这上边。重构完不出问题不算功劳,出了问题就很难解释,毕竟原来就好的东西,怎么还能搞坏呢。

杨木就搞坏了。

项目从 18 年 4 月开始,10 月开发截止,上线跑一个月之后支持双十一,双十一不出问题,这才算成功。

杨木偏偏就在双十一出了问题。

那天流量很大,上午 9 点又一波高峰来临的时候,本来已经调好资源的集群突然停止了消费,上游数据还在不停写入,眼看着就大面积延迟了。杨木的电话被打爆,他满头汗水,带着几个熬了一宿的同伴逐个排查任何可能存在的问题,毫无效果。电脑钉钉上的消息像爆米花似的不断往外蹦,所有人都在问他怎么回事。

他实在没办法,只好启动降级预案,切回了老系统。

最终业务方为新系统上线的活动损失惨重。

后来复盘的时候,他发现了问题。他用的是 Flink 1.1.3 的版本,该版本的网络 buffer 管理存在一个问题,简单来说就是大量申请与释放 buffer 的时候可能会死锁。而双十一那天恰好触发了这个场景——上游数据量很大,系统要频繁申请和释放 buffer,然后发生了死锁,下游的工作线程只能 waiting,于是明明有资源,系统却不消费数据……其实社区早就修复了这个问题,杨木不知道,但他本来也觉得 1.1.3 版本太老,只是太忙没来得及弄。

然而一切都太晚了,他在随后的复盘总结里被撤了职,但在老板的力争下保住了工作。

他很害怕,比六年前要被清退的时候害怕的多。

一路走来,他有了一些东西,但却面临着更大的问题。他谈了一个同乡的女朋友,想结婚,想买房,想把老人们接到北京来……总之,他想继续,稳定的继续。而他回首往昔,除了来北京,很难说自己还控制过什么。于是,他不禁担忧起来,自己或许只是偶然被时代所选择,又终将被时代所抛弃,自己纵然做了很多努力,但一切不过只是巧合。

他害怕命运如河,自己是一叶小舟,永远随波逐流。

他害怕这种无力感。

他 80 年代出生在陕西一个小山村,一落生便有村干部围住了家门。因为已有个姐姐,所以他们说杨木不符合计划生育,要把他抱走。他妈急的直哭,拽着干部的裤腿不让,他爹被两个人按住,拉扯中撕掉一只袖子才脱身。双方僵持了很久,后来他爹从炕头的箱子里摸了半天,拉上干部说去房后抽袋烟。再后来他们就走了,留下杨木,并把杨木算成了他那个光棍二伯的儿子。

他们还带走了杨木家攒了几年要买牛的钱。

杨木一点点长大,开始翻山越岭的去上学,他对钱还没概念,不害怕穷,但是害怕饿。他记得有一次放学回家,走着走着就倒在了山路上,饿晕的。幸亏他那时和胡子一起,不然很有可能在遇到人之前先被狼发现。

但他很喜欢学习,初中毕业那年,他和胡子都考上了县里的高中,学费每年一千。得到通知的那晚,胡子他爸、杨木他爸、杨木他二伯,三个人在院子里抽了半宿的烟,会谈的结果是生在山里就是命不好,都不要上了。

杨木竖起耳朵一直听着,想了一晚上,第二天很早便包了个包袱,找到他爹说要去县里打工赚学费。杨老汉还没说话,杨木的二伯正好走了进来,他弄清情况后慢慢装了一袋烟,说他想过了,娃考上了就是有出息,学要上,钱大家想办法。

就这样,他上了高中,胡子就去打工了,再之后他考上一个普通二本,那会胡子每月能赚好几千,给家里盖了大房子。所以那时杨木很少回家,每个假期都在城里打工。他不是不想家,他想多赚些钱,好证明当初大家的选择都没错。

直到他到北京,经过这几年的奋斗,家里条件才开始好转。

如果一切都是命的话,那他本该和胡子一样,可他已经回不去了,他要在城里立足,他要抓住些什么。

他想了很久,最后得出一个结论,像他这样的人,想在当今社会完成这样大的跨越,能依靠的只有技术。信息时代机器无处不在,机器又是公平的,无论代码是谁写的,最终都在同一个地方按同一个规则以同一个速度执行,严格的能者上,平者让。

他必须抓住技术,他只能抓住技术。

03 穷且益坚,不坠青云之志

被撤之后工作内容只剩了做报表,一切按部就班,但杨木总觉得少点什么。

但让他奇怪的是,老板并没有骂他,反而有天给了他一张票,说 12 月 Flink 在北京开大会,你去看看吧。

大会的时间是 12 月 20 日,杨木去看了,这是他第一次参加这么多人的大会,见到很多东西。

他还见到了胡子,胡子听他在北京赚到不少钱,去年也跑过来了。据说他干过工地,也当过保安,现在就在国家会议中心这边送外卖,因为跟保安和工地的人都熟,所以他被允许从工地里穿行,比同行都快。

他忘了大会的许多内容,但永远记得一幅画面。

杨木和胡子聊天时,一个刘先生从胡子这里领走了外卖,转身消失在玻璃门的后边,他穿着 Flink 的套头衫,杨木有印象,他刚刚分享过一个配餐调度和识别虚假订单的方案,所以他可能和胡子是一个公司,或者给胡子指派了这一单,又或者拦住骗子没让胡子白跑另外一趟,总之,他在以某种方式和胡子发生着联系,深刻的联系。

但这一切胡子都不知道。

杨木突然有了一种使命感,他发现没有一个时代能像现在这样,人与人之间如此陌生,却又能如此深刻的发生联系。他突然觉得即使不为钱,自己的工作依然有意义。他能和很多人联系,也能影响很多人,这显然已经超越了命运把他生在偏远山区的设定。

他一直把技术当做改变自己命运的阶梯,但现在才想明白背后的道理,不是技术给了自己什么,关键是能用技术为别人做什么。

回公司后,杨木看着那一大堆报表程序,开始琢磨。

他想到把这些零散的脚本统一到一个更大的概念中去,做实时数仓。现在工作单一很多,虽然一个人,但升级计划却能得以稳定实施。到 2019 年 5 月的时候,实时数仓已见雏形,直接效果是,业务方发现以前要的指标要排一周,现在一两天就出来了,偶尔还能买一赠一,多给几个他们没想到但确实有参考意义的指标。

公司里那些说怎么还不开掉杨木的言论逐渐平息。

5 月的一天,老板把杨木叫到会议室,半玩笑半认真的问他敢不敢再挑战一下。原来公司想把老的推荐系统改成实时推荐,老板已经向上边推荐了他。

又是重构,杨木知道,这次再出问题一定非走不可。但他还是接下了,老板为了支持他,协调过来两个新同事跟他一起,并附送一句好好努力。

杨木知道,努力最多只是一种态度,不能保证结果,本身也并不值钱,他必须脱离单纯而空洞的努力。

项目开始的前两周,他常常坐在电脑前,一行代码都不写,看着窗外发呆。新同事一边熟悉环境,一边狐疑,跟别人打听过他的情况后开始寻思:这人是不是已经开始考虑跑路了?

但这些疑问在两周后的一个早上得以澄清,这天早会同事们都到齐后,杨木把老板约了过来,说他有个三步走的计划。

第一步,完善 AB 测试系统。

第二步,迭代上线。

第三步,做备链。

老板还在咕噜咕噜的吸着豆浆,他眨眨眼,示意杨木继续展开。

杨木继续讲了下去。

第一,升级 AB 测试系统,老系统只支持单引擎内的策略对比,新系统必须能做到多引擎间的总体对比,然后还要进一步提高流量切分的灵活度。这样一来能细化实时推荐在不同场景下的收益,二来如果当天有什么意外,可以快速把流量再切回去,这样至少不会出大问题。

第二,在上边的基础上,迭代上线新系统,由小场景,小流量逐渐扩展到全场景,全流量,小步快跑,保证效果和稳定性。

第三,上次风控出问题就是底层 Flink 集群的问题,同样的错误不能再犯,除了自己技术升级外,这次还要做两个集群,一主一备,全量上线当天双跑。

老板点点头,提问道流量这么大,哪有资源做备链?

杨木笑了,打开电脑,说现在各大云厂商都有 Flink 的服务,按量付费,他计算过了,做个备链最多几天,成本也不高。

老板也笑了,说他算是进套啦,罢了罢了,提个单子先看看,然后借还有个会为由,踩着平衡车嗡嗡的跑了。

一旦掌握了科学的办法,那接下来的过程就是按部就班和波澜不惊的。所以纵然杨木和同事们从夏天坐到冬天,但除刻意把上线时间定在 12 月 20 日之外,这里就再没什么好讲的了。

同样,杨木在当天零点的担心也是多余的,就在他回首往事的时候,他的推荐像穿过地铁的旋转铁门一样穿过无数用户的大脑,他们在这个寒冷的深夜惊喜的发现,手里的软件似乎更懂自己了一点。

然后在这个深夜的晚上,或者说,2019 年 12 月 20 日 19 点,老板把杨木他们都叫了过来。他说今天上线不错,又是杨木的生日,一块庆祝庆祝。

面前摆着一个大蛋糕,上边用果酱写着“Happy Birthday”,杨木愕然,“今天不是我生日。”

“系统显示的,不然你怎么选今天上线,而且去年还送你张票呢。”

“哦,显示错了,我阴历。”

“就这样吧。这里还有几张,那会今年还开,明天你们仨都去看看,杨木你许个愿吧!”

“不是生日许啥愿?”

“随便,说句话也行。”

杨木想了好一会,最后看着老板,又看着大家,故意拖长声音说道:

“献给这萍水相逢的——Flink!”

哄堂大笑。


关注 Ververica,获取更多 Flink 技术干货

你也「在看」吗?????

本文标签: 萍水相逢Flink