饿了么CTO张雪峰谈饿了么四次技术进化的曲折路
近几个月,饿了么CTO张雪峰气定神闲了一些。如果把时间拨回两年前,你会发现他焦头烂额。
这并非夸张,张雪峰加入后,饿了么日订单从几十万增长到一百万,又从一百万增长到三百万,接着到2016年圣诞节的九百万。至今天,其订单量仅次于淘宝和滴滴,与美团不相上下。亮眼数字背后,张雪峰和他团队背负的技术压力可想而知。
业务突飞猛进的两年里,这位敢于挑战的技术人,做过很多尝试和努力,但他最终明白一件事:“如果完全靠自己去招人,不管用多大的代价,压力还是太大了,不仅成本居高不下,人肉堆积也未必理想。”面对云栖社区记者采访时,他指出,对于创业公司而言,时间更为宝贵。
饿了么CTO张雪峰
在一个阳光明媚的初春午后,他坐在西溪湿地内某栋楼的一个阳台,迎着太阳和记者讲述了饿了么的技术发展历程,以及他的一些思考。
1.
2014年秋天,张雪峰跟饿了么邂逅,那个时候他是饿了么联合创始人汪渊的技术顾问。2015年春节后,他正式加入饿了么,成为这家外卖平台的CTO。缘分开始之时,挑战也接憧而至。
两个维度:
1.业务:业务发展实在太快了,2014年5月份,饿了么接受大众点评D轮融资时,订单还只是刚有10W,但仅仅几个月后,饿了么订单就冲到了接近百万。“全网系统压力非常大。”张雪峰说,以前只在几十个城市有业务,而当时准备在两百多个城市上业务。
2.人才:2014年秋天,饿了么的技术团队大概只有35人,随着业务发展,当张雪峰入职时,人员已经翻到70多人。如果要扩充技术路线的话,挑战非常大。挑战并不在技术或技术架构上,而是在人上。“业务翻倍,人不能跟着一直翻倍吧?”更何况人才难招,这让张雪峰很是头疼。彼时,Python在国内基础设施和运维比较多,但做核心系统比较少,所以招人很难。
2015年那个夏天,他开始决定真正上云。当然在上云前,也做了很多尝试。比如,Python招不到人?那就分多路,使用Java和Go。另外,饿了么也有充裕的现金储备,所以在IDC上也加大了很多投入。
但问题的解决之道,并不是仅靠堆砌就可以解决。“不同技术路线及新技术不断引入后,要考虑全局复杂度”,但这还不是关键,在张雪峰看来,最关键的是饿了么的特殊性:“饿了么峰值压力很明显:集中在中午、晚上的前后三个小时,而且在高峰时,问题会不断放大。”他举了去年的一个例子,2016年5.17饿货节,饿了么峰值高达每秒1.5万笔,导致前几秒就把入口打爆而不得不进行限流(用户体验不好)。“特点很明显,峰值效应后就是一个陡峭的曲线。”他说,压力大的时候,会很大,其他时候则是闲置,全局资源利用率较低,不太划算。
于是他换了个思路,部分上云——IDC+云。促销、恶劣气候、特殊事件或季节效应时(用户在盛夏或寒冬时,点外卖最多),切换到云,用云挡住大部分流量。
上云,帮助张雪峰解决了大问题。之前饿了么部署在传统机房,虽然投入了很多,但安全防护非常弱。每天后台攻击流量高达几十G,尽管做了很多努力,但每天提心吊胆。饿了么有一半的故障都是DDOS导致的,每天都被攻击,每周都有一两次大的攻击。“而上云后,基本不用为这些攻击的事情担心了。”他说。
与此同时,上云也把饿了么的运维团队从体力活中部分解放出来。“IDC是体力活,云计算解放了运维团队,让他们有时间干更高级的活。”张雪峰极为推崇云原生(Cloud Native Application),他认为这是云时代的潮流趋势。“很多人说,云时代运维要无用武之地了,但我不这么看。云时代,运维可以更加Focus脑力活而不是体力活或大量重复工作。”他希望饿了么的团队,能够往这个方向努力并逐步转型,具备云时代的技术运营思维。
这次上云的尝试,也让张雪峰想明白一个道理:如果完全靠自己去招人,不管用多大的代价,压力还是太大了。他认为:“作为创业公司,时间对饿了么来说更为宝贵,尤其是我们还处在一个业务快速上升期。”这是饿了么愿意尝试借助外部力量的原因所在,而不仅仅是因为“开放的技术氛围,极客的技术精神”。
2.
回顾饿了么发展历程,你会发现,它经历过几次P0最严重事故:红包金额发放异常、支付完成状态异常、机房核心主备全挂。而压力最大的一次是,新浪微博在当天午餐高峰期的头条报道——饿了么点不了饭,快饿死了。
一语双关的头条,除了让全社会的目光聚焦在点不了饭上,也让人心中暗忖这家创业公司的技术力量,究竟能否长期稳定地支撑起业务的极速扩张。“买不了东西,只会抱怨两下,而钱上如果出问题(指支付状态完成异常,实际会原路径退回客人账户),一定会恐慌的。”张雪峰指出。
技术故障对公司而言,是危机,但对技术团队来说,也是成长契机。在饿了么身上,你会发现后者占了绝大部分。
有两点为证:一是饿了么系统对订单的承载能力飞速成熟,如开头提到,短短两年的时间,它的订单从几十万跃升到2016年圣诞节的九百万;二是, 谈及三次P0,饿了么CTO张雪峰并没藏着掖着,反而是与记者促膝长谈,话里行间全是对事故的反思和根源性讨论。
他说,三次P0的原因很简单,比如:支付状态完成异常那次,只是字段溢出,修复问题只用了30秒……而红包金额发放异常,从深层次来看,是当时的饿了么全网系统还没有建立统一的风控体系(有反欺诈模块)。
大部分技术架构问题背后,都和组织架构有关。随后一段时间,他开始调整组织架构。原来的风控是三级团队,现在独立出来,被提升为二级部门(一级为整个技术)。原来风控隶属于大数据部门,现在则会构建自己独立的数据模型与算法。职能上,只要被风控拦住的需求,一律先更新PRD,不允许直接开发。希望通过这些措施,构建起统一、专业的风控体系,最重要是做到两点:尽量提前发现问题、“守门(兜底)”。
“这几乎接近于尚方宝剑。” 张雪峰说,统一的风控建立后,一开始有点波折,一个是人员有波动,“另外是风控刚开始可能有点过激,动不动就是P0最高优先级需求。”张雪峰说,团队磨合了一段时间后,效果立马出来,尤其是基本遏制住了O2O领域的顽疾——刷单(用户端/商户端/配送端/ETC)。
3.
虽然饿了么在2015年就上了云,但当时的上云只是测试环境,非生产环境。那后来为什么灾备也选择上云,并进而开始做多活?
张雪峰解释说,上云后发现比他们想象的要复杂的多,也发现很多问题——IDC和云机房之间要拉光纤,很多事情需要配套。仅仅就这样吗——不轻不痒?进一步深挖则发现,让他下定决心在云上做多活是因为一次事故。
那次核心主备全挂,张雪峰的技术团队,只能干瞪眼。因为这是供应商设备Bug,“主”挂了后,“备”上线后也会自动触犯一个Bug。那时的张雪峰压力极大,但只能苦等厂商拿更高级的设备过来紧急替换。饿了么CEO张旭豪(Mark)当时比较宽容,还安慰他说:“这事急不了。”
事故让人反思,“虽然大家都知道两地三中心,但没真正吃过一次亏,就不信邪。”张雪峰发现一个机房也不可靠。并且,饿了么灾备前后也做了一年时间,前后断过几次。由于一些历史原因,饿了么当时的灾备建设并不以自动化为主,所以上灾备的(人肉)工作量非常大,而且灾备也没有发挥应有作用。于是饿了么决定进一步上云——做多活。
决定启动多活,还有一个重要原因是:通过单机房支撑饿了么全网业务的极速发展,已逐步显现容量瓶颈。
当时饿了么内部团队也有担心,完全上云后,运维是不是要转岗了? “原因很简单,因为IDC+云是能解决峰值的效益问题,但也引入了新的问题——混合模式下的运维复杂度成倍增加,这对人员的能力和数量提出了全新要求 。”但大家没有抵触,希望通过多活慢慢往云原生方向转变,适应云时代的趋势,让自己成长起来,最终具有云思维。
实施多活中,张雪峰面临很多挑战,比如数据一致性。饿了么的外卖和配送业务对时效性要求非常高,如果几秒没响应、状态没变,用户会很着急。“互联网、分布式系统最大的挑战就是CAP,很难同时满足一致性,又满足分区容忍度——这是淘宝没有面临的局面。” 张雪峰说,随着不断尝试,他们的解决方案目前正待生产逐步验证。
目前饿了么使用阿里云ECS、RDS、云盾、CDN等服务。它在阿里云上有几千个节点,为保证多活顺利切换,会进行多轮生产演练 。张雪峰说:“多活顺利的话,会在今年四五月份,划分不同时段和区域进行生产切换。”
这家外卖巨头多活的目标是几秒钟数据延迟,一分钟内完成所有切换。对于下一步,张雪峰称,如果一切顺利的话,他将会做一个能承担所有业务的一键部署单元。
“为什么?”
“这样当容量出问题时,我只要在阿里云上开ezone(全网业务最小部署单元)就行了。”面朝午后太阳的他,脸转向笔者,直接又简单地补充到。
4.
2016年9月份,饿了么创始人、CEO张旭豪表示,引领外卖行业下半场不是靠执行力,而是要靠人工智能、数据分析等技术创新。而大数据、人工智能,张雪峰一直在布局。
今年1月份,有媒体报道,饿了么已同阿里云合作研发出人工智能ET新的调度引擎,并全面推行到外卖送餐领域。就实际来看,人工智能调度引擎优势体现在两点:全局的洞察和实时决策,落到三处:1.预估餐厅出餐时间;2.预估骑手送餐地等待时间;3.订单分配和路线规划。
为什么要和阿里云合作,张雪峰表示,仅靠饿了么自己做这件事不现实,需要更专业的团队来一起推动。
原因有两点:
1.数据太大了:饿了么创业团队主要来自交大,一开始他们自己做智能调度,但发现小看事情的难度了。“交易涨10倍,大数据可能会涨50-80倍。”张雪峰说,数据的压力太大,而且不划算,并且数据暴增之后,计算也是个问题。
2.模型的正确性很有难度:比如说特征工作,怎样从这些数据当中,发掘出特征?“挑战非常大。”, 张雪峰说:“这并不是来一位人工智能专家,就能把事做好。其中,有很多业务维度,有很多细节需要大量分析。”这要求对数据极度敏感,同时也要非常熟悉即时配送这样的非传统物流业务及产品形态。
于是,双方合作下的虚拟团队就成立了。团队包含三组,一组是物流工程团队,主要把算法模型成果做成应用;一组是饿了么大数据团队,提供一线的数据反馈与修正;另外一组是阿里云山景博士带的智能调度团队,在方向和专业性上提供帮助。其中,阿里云的作用主要是让效率上得到更大提升。“比如说,十个特征,饿了么要一一组合验证后,才能明确知道是否适用,而阿里云团队可以指出,这几个不用试了(ROI不高或死胡同),试别的。”
合作中,遇到很多挑战,最典型的是鱼和熊掌不可兼得。比如,出现异常情况,两个单都面临超时,保哪个单?金额最多的,还是新用户的单子?这些都是需要不断拿捏和思考的。投入使用后,张雪峰对于灰度测试的结果比较满意,认为可以取代人工调度:“一是省成本;二是机器出错的概率低;三是高效,以前一个配送员5个订单,后来7个,现在是9个订单。”
智能调度只是饿了么在大数据、人工智能上的一个应用方向,而在另外一个维度,张雪峰还将数据应用于业务的运营。健康度,这是饿了么在业务运营中提出的一个概念,强调全局最优。
“并不是说,商户上了饿了么就行了,一定要让商户觉得在饿了么平台有价值。”张雪峰希望通过数据和销售的经验,抽象出规律,让商户感受到,上饿了么平台的确能帮助到自己。比如说,让一个区域的几家奶茶店,分别盈利,实现共赢。
“饿了么是LBS,消费很密集,更应该去做精细化经营。淘宝头部效应很明显,我们是曲线很明显,Top 1000的店都未必占饿了么很大的份额,所以我们希望每个店都能在对应的区域做起来。”
餐饮店最难的是选址,张雪峰还希望通过数据知道:这个区域内,开什么店合适?或者说,这种类型的店最好就不要开了。另外,所有的生意都是有瓶劲的,数据也可以表明:是否适合做外卖?如果不符合商户的预期,到底是对利润期望过高,还是他的经营不好,亦或是已经到极限了?
接下来,饿了么还会利用技术尝试什么?张雪峰说,会去探索送餐机器人,也许是和阿里云合作效果不错,他又说:“以及和阿里合作智能客服。”
5.
采访中,张雪峰多次提及运维以及运维团队需要转型。笔者问为什么,他回复称:“这是他下一步重点考虑的事。”
“业务涨两倍,人涨两倍是不健康的,应该是业务涨到一定阶段,人就是一个水平线,甚至往下降了,这才是最终努力的方向。”他说,云上有很多基础设施和API,更强调自动化,传统的互联网运维思维已经不行了。团队需要改变思维,去适应写程序解决问题。“希望我们团队能够转变思维,自动化水平就自然而然提上去了。”张雪峰认为,人的意识提升能推动饿了么基础设施向更高效的自动化方向前进。
另外,经过大半年努力,在2016年底,张雪峰也从硅谷请到了几位技术大神,分别以副总裁、高级总监等身份加入,负责饿了么大数据与人工智能、核心基础设施、模型算法策略等关键技术团队。有了这一批世界级专家,饿了么会加速进入下一个10x发展周期,不仅仅是技术上10x成长,也为技术及数据驱动业务10x发展奠定坚实基础。
回顾个人发展经历,张雪峰说,有两段经历很特别。一段是微软出来后的那次创业,一次是饿了么。对于前者,张雪峰评价到,如果不是这次历练,他不太会考虑加入一家创业公司。
从微软出来后,张雪峰跟着老板做教育,线下做的还好,但转到线上时却没有成功。这对他有一些触动,体现在安逸的环境到不可知环境后的思考。
在今天来看,就是很多人都在疑问到底要不要去创业公司赌一把。但在张雪峰眼中,是否去创业公司,应该思考以下几个问题:
1.是否热爱这件事,真的想去改变什么:张雪峰说,很多人创业只是因为在原来公司待的不爽或感觉创业很酷,于是意气用事创业或进创业公司。但这种不是发自内心热爱的行为,往往做不久。
2.经济上有没有太大压力:经济上有压力的坏处,体现在两个方面:一是压力会让你没法去热爱和干好这件事;二是,当经济上有压力时,去初创公司就变成赌,心态会变坏。
3.家庭支持:如果已经成家的话,家庭要支持你做这件事。
4.追求的事有没有高度:当有热爱,也没后顾之忧之后,你的追求有没有高度?张雪峰举例子到:“有了滴滴打车后,你继续做打车去死磕,这不是改变。有追求的改变,是利用技术去做新的东西。”他还指出,去创业公司千万不要想着一夜暴富,或经济上有多少的收益,这概率很低,因为大部分都是失败的。
在最后,张雪峰说:“我喜欢去做一些现有秩序解决不了,或者至少目前看不到解决的事。”他不喜欢提VR、AR和人工智能这些概念,“我喜欢想一些具体的事。”
从这来看,也不难明白——张雪峰为什么能带领饿了么技术团队,扛住业务快速发展带来的巨大挑战,完成四次进化:因为只有具体并落到细节,才能深入。