!important 希望我们是最早给你祝福的朋友
去年的1024,我们回顾了第一代到第五代架构
去年的今天,我们和大家分享了 SOFAStack 背后的这群工程师。比如程立,花名鲁肃,蚂蚁金服 CTO。胡喜,蚂蚁金服副总裁、副CTO。杨冰,蚂蚁金服智能科技产品技术部总监。
也与大家分享了从第一代到第五代架构的进化历程,详解了 SOFAStack 走的这一条跟传统金融行业不同的分布式架构之路。要基于不可靠的硬件系统实现金融级的性能和可靠性,要应对支付宝这样的超大规模互联网金融应用,有很多难题要解决。蚂蚁金服构建了一整套处理金融级交易的分布式架构与平台,在金融级的一致性要求和海量并发处理能力上达到了很好的平衡,并在快速容灾恢复、弹性伸缩能力、多地多活高可用保证能力和按需供给的精细化资源调度能力方面沉淀了丰富的实践经验。
前往去年此刻的时光机:蚂蚁金服自研架构SOFA背后的工程师|1024快乐
今年,SOFAStack 团队在忙什么呢?
近几年来,“云原生架构”的相关话题讨论比较热烈,我们也相信这也将是金融 IT 架构的关键发展趋势之一。IT 架构转型绝不是一蹴而就的,积极探索和应用以“云原生”为代表的新兴技术的同时,还需考虑与传统模式和技术融合并存,沿着一条稳妥的可落地路径进行创新变革,确保架构转型的价值交付能够稳妥支撑甚至积极引领业务创新。
Service Mesh 是蚂蚁金服下一代架构的核心,这一年,我们在奔跑的火车上换轮子,将现有的微服务架构快速演进到云原生架构。RPC、消息、DB、安全、运维等每一个环节均充满挑战。
蚂蚁金服每年双十一大促会面临非常大的流量挑战,在已有LDC微服务架构下已支撑起弹性扩容能力。当有多个大促分阶段进行时,如何在架构上保障资源最大程度复用降低大促成本极具挑战。期望在最小规模的资源集群下可通过灵活的架构来支撑起快速的资源腾挪来达成多个大促链路最大化利用资源的目的。通过 Service Mesh架构的支持,基础设施层在应用外具备更强的管控能力,通过流量的调拨,JVM 内存的动态 Swap等手段可以使用技术手段达成节省资源的目的。
今年即将到来的双十一,蚂蚁金服这套 Service Mesh 将迎来第一次大考 — 双十一实战,也或许是业界第一个如此大规模的实战,请持续关注本公众号,我们会逐步进行技术揭秘。
今天,我们想介绍蚂蚁金服开源背后的这位“有意思”工程师:
对于蚂蚁金服研究员王益而言,2019年是个颇有纪念意义的年份。今年他整40岁。从10岁开始,写代码整30年。这30年来,他当过“不务正业”的学生,创纪录地在大一就考下系统分析员,“单枪匹马”闯荡过从国内到硅谷的多家知名互联网科技公司,和AI领域许多传奇人物都有所交集。不惑之年对于许多工程师来说,或许已是需要焦虑的年龄,但40岁的王益在蚂蚁金服每天都过得很充实:起床,自由泳一千米,然后去做他最喜欢的事——写代码和组织大家一起写代码。
2019年9月11日,在上海举办的Google开发者大会上,蚂蚁金服研究员王益分享了新开发的分布式深度学习系统ElasticDL。这是他来到蚂蚁金服的一年之中所做的第二个开源项目,主要用于大幅提升集群总体利用率以及深度学习团队的工作效能。之前开源的 SQLFlow系统在短短的几个月之间,已经在GitHub上获得了三千多颗星星。
2019对于王益而言是个颇有纪念意义的年份,今年他整40岁,写代码整30年。这听上去是一件不可思议的事——30年前,上世纪的80年代末,他在⻓沙上小学,全城都很难找出一位能教编程的老师,个人电脑更是一个陌生名词,一台以苹果2为原型、可以用BASIC语言编程的 “中华学习机”售价7000人民币,在当时几乎可以买下一套房子。
幸运的是,王益在10岁那年得到了这样一件贵重的礼物,从这台学习机和一本BASIC语言教材开始,他开启了与代码结缘的人生。
“我那时不是个好学生,经常受‘别人家的孩子’打击,老师和同学都觉得写代码是不务正业。”回想起30年来的经历,这位清华博士、足迹从国内到硅谷历经多家知名互联网科技公司的学霸笑谈自己“活得比较任性”,“但我就是想做与众不同的事。别人越说这样不行,我就越想用这种方式证明自己。”
初中毕业那年的暑假,他用“中华学习机”和自己焊接的电路板,把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机。同时,他用Apple BASIC语言和6502汇编混合编程,写了人生中第一个游戏。高中三年,其他同学努力备考,他却加班加点自学了大学计算机系所有课程,随后参加计算机水平考试,先后获得了程序员、高级程序员、以及最高级别系统分析员资格。2018年,他获得Google APAC Innovation Award。从不断摸索代码世界的少年时代,到专注于AI基础架构和系统开发的求学工作生涯,这份“任性”一直伴随他走到今天。
“我经常从零开始。选择去做什么的一大标准是‘有意思’。”
相比于规划一条稳妥的职业发展道路,王益更愿意顺应自己强烈的好奇心,去选择最困难但最有意思的探索方向。他在中国和美国互联网公司都工作过,也分别在美国公司的中国分部和中国公司的美国分部工作过。他的足迹遍及国内BAT三家。任性的是,每次跳槽, 他都从一个人coding一个创新项目开始,吸引同事们加入,从而组建团队。虽然2011年就在腾讯作为广告系统技术总监,但是他从不在跳槽时要求带何等规模的团队。
2014年,王益带着妻子和两个月大的女儿离开腾讯移居硅谷。“一切都归零了。工资减半。”他笑笑说。不过凭着多位学界和业界领袖的推荐,他很快就安顿下来,不到一年就开始在硅谷创业,作为Head of Research Scienets 参与创建了AI创业公司 ScaledInference。这是一家人才济济的创业公司。人工智能行业的领袖人物、加州大学伯克利分校的Michael Jordan教授是这家公司顾问。陆奇曾代表微软到访,讨论技术合作。“可惜我们不够关注业务落地,做的不够好。技术研发一定要有落地的能力。”事后,王益不无遗憾的说。
在加入蚂蚁金服之前,王益在百度硅谷研究院工作,负责开源深度学习系统PaddlePaddle。在历经两年的艰苦开发,新一代技术Fluid开始系统地落地百度各个业务之后,他发起了他在 PaddlePaddle的最后一个子项目——一条太阳能驱动的无人驾驶船。这是一条双体船,由他和五岁女儿的两条划艇构成。船上的笔记本电脑运行基于immitation learning的人工智能系统,自动学习驾驶者的技巧。为了船体稳定,他在自家车库里焊接了连接两条划艇的金属框架。便于拆装的结构,可以装上他的皮卡,方便下水测试。
做出加入蚂蚁金服的决定,也是出于同样的理由——“有意思”。“这里的业务很新颖,对AI 有着更加多样化的需求。”如何用AI解决金融行业的问题,是和他以往所面对的完全不同的全新挑战。
SQLFlow:分析师与AI模型间的翻译
加入蚂蚁金服不久,王益就意识到自己之前的朦胧猜想越来越清晰地被验证:和主要依靠流量与广告赚钱的传统互联网公司不同,蚂蚁金服不是纯互联网公司,它有独特的商业模式和对于工具的独到需求。
此前的十多年中,他的大部分经历是在传统互联网行业做搜索推荐技术,这一类业务所需的模型总数比较有限,只需要算相关性的模型、排序的模型等,一个成熟的模型通常会有几十上百人维护,每年修改调整去提升性能。但在蚂蚁金服,这种模式被颠覆了。因为金融行业的数据远比社交、电商和搜索引擎的数据要稀疏,很难完全靠机器来挖掘出规律,必须依赖金融专业分析师的智慧。分析师大量使用SQL语言来验证想法,或者进一步做探索,这些结论对金融业务非常关键。
每一位分析师平均每天要提交很多个AI任务,这些任务对AI模型的需求各不相同,差异性特别显著。但是,模型是建模团队用Python语言描述的,分析师们如果要调用模型,要么需要学习Python语言,要么需要专配一位工程师,效率难以显著提高。
语言不通,所以需要翻译,那么能否在SQL和Python之间也设立一个翻译?
基于这样的想法,王益和团队一起开发了SQLFlow,这个系统好比一个“翻译机”,能将分析师们输入的SQL命令翻译成Python语言,这样一来,分析师无需学习Python,使用SQL语言就能够处理数据、训练AI模型,并使用训练好的模型来回答业务问题。
这套系统更重要的作用,是重新界定了分析师、建模团队和工具开发团队的责任,让同一个机构里的这三个工种有了清晰的分工,有效形成合力。
ElasticDL:一个“聪明”的智能学习系统
通过SQLFlow被调用的模型,会基于基础架构来进行分布式执行,这套分布式的智能学习系统,就是刚刚开源的ElasticDL。ElasticDL基于TensorFlow2.0构建,是面向未来的下一代技术,其很重要的独特之处,就在于它很“聪明”。
首先,它能和SQLFlow一起,补足简短的SQL程序翻译成复杂的Python程序的过程中所需的信息。根据深度学习模型的数学特性,它能够决定用什么样的方式来进行计算,还能在计算过程中智能地决定一些参数。
其次,它的容错和弹性调度机制,能让集群的利用效率更高。用户提交需求之后,不再需要“排队”等待资源释放才开始计算,计算会“插空”进行,这样闲置和等待时间更短,大幅度减少了浪费在等待上的系统资源和人力资源。
在数据收集能力极大提升的今天,拥有能算“大”数据的能力,比算得快更为重要。这是王益一直未变的观点。ElasticDL的开发,着眼之处不仅是计算本身的提速,更是针对云计算时代中,数据量大且多人共用集群的特点而进行的调度优化。“等待的时间有时会占到60%-80%,如果不能有效减少这部分的浪费,只是提升计算速度的话,对整体效率的提升就是杯水车薪。”王益说,但是ElasticDL的弹性调度能在资源不足的情况下,有多少就先调用多少,让计算尽快启动。
长远看来,ElasticDL还将支持各种学习模式,以顺应金融行业对AI的多种需求。很多在传统互联网行业可有可无的训练模式,在金融行业都很有广阔的应用场景,比如保障数据安全的同时还能共享数据背后规律的共享智能,或者建立可以进行各种大胆试验的虚拟环境,这些面向未来的需求,在ElasticDL的设计之中也有所考虑。
对于一直在做AI基础架构的王益来说,对AI有着各种不同需求的金融行业,是一片全新的驰骋疆场。无数新的问题等待他去尝试,去寻找新的解法,让他乐此不疲。
实践出真知,无需等待理论完美证明
“数学模型和分布式架构是互相影响的,只了解其中任何一面,在这个领域都做不好。要为深度学习的架构去改数学模型,也要因为数学模型的数学特点去做架构调整。”
站在今天回顾过去做AI基础架构的十多年,王益觉得这是自己所学到的最重要一课。
这一想法的首次验证,是在他2009年离开Google进入腾讯之后写出的Peacock系统。和在Google所做的语义理解项目不同,这次他将算法和分布式架构一起考虑调整,让语义理解的规模扩大了上千倍,后来集结成了论文发表在ACM Transactions on Intelligent Systems and Technology杂志上,广为业界知晓。
2015年,他进入百度硅谷参与语音识别项目Deep Speech 2,这一项目不仅被MIT科技评论评为 2016年全球十大科技突破之一,也成为他了解深度学习的一个契机。他一度坚持要有完美的理论论证才能进入实践验证,因为深度学习的理论未经严格推敲,他一直认为只有统计学习才是“正道”。
在百度,王益获得深度学习科学家徐伟的推荐,去负责深度学习平台PaddlePaddle。在不断探索解决实际问题的过程之中,他的想法改变了。
“并不一定先要有完整论证的理论才去进行实践,也可以先实践,实践出真知。实践之后再总结提升为理论。”王益说,“这就像是在牛顿发现力学原理之前的几千年前,人类就已经利用杠杆原理修起了金字塔。”
Code Review:从最初的震撼到长年的习惯
今年5月,SQLFlow宣布开源,之后仅四个月,ElasticDL也宣布开源,这在蚂蚁金服的历史上并不多见,却是王益的坚持。他认为唯有开源才能保证信息透明,唯有让代码直接面对全社会,才能全方位的接受审视和检验,对写代码的人自身来说,也是一种自我约束。
“开源和codereview不仅是个技术问题,更是管理学问题、社会学问题,关系到如何把大家组织起来变成更高效的团队。”王益说。
Code Review对他自己而言,也是人生中一段难以磨灭的经历。他用“最初的震撼”来描述12年前初出校⻔加入Google中国时的体验。当时他已经写了18年程序,手握系统分析师资格,还特别研究过了Google的Code style,所以初次遭遇Code Review时并没有太当回事:“以为自己写了这么多年程序,怎么都还行吧。”
但现实是骨感的:他在Google写出的第一个程序,总共不过100行代码,却被来自美国的同事和好友Jerad提出了120行意见。“当时深受打击,简直觉得屈辱。”
他压制了情绪,仔细去看那些意见,这才发现每一条都真诚且很有帮助。“从那一刻起, Code Review 成为了我们的工作方式。”每天和这些同事们一起coding,互相review,让中国工程师们很快知道了应当关注哪些地方,应当如何沟通合作。因此,不管是腾讯的 Peacock,百度的PaddlePaddle新版本Fluid,还是蚂蚁的SQLFlow 和 ElasticDL 都是王益先开发出原型,再吸引感兴趣的同事一起来完善。
这种工作方式的影响一直延续到了今天,他也希望能够以这种方式去影响更多的工程师。“搞技术必须实事求是。”王益说,代码是工程师最好的名片,藏着掖着、互不交流,就无法带来信赖、合作与提升。帮助大家了解和实践code review,需要花费大量的时间和精力。“白天弄管理,晚上写程序”这是王益总结的在腾讯工作时的办法。“后来在百度和蚂蚁,我更刻意地专注做技术工作,确保精力更集中。”
这正是现在的互联网科技公司的组织管理和人才选拔之中不可或缺的一课。在开源机制之中,每个人都会对自己的coding更加认真,主动的人会脱颖而出,被动的人会自动淘汰,团队成员之间会自发地相互协同,互相认同,找到沟通和合作的方式。“现在技术领域的成果已经很难靠单枪匹马的个人英雄主义去取得,团队合作必不可少。希望用这种方式来找到开朗真诚的伙伴,一起去摘高处的果实。”王益说。
SQLFlow官网地址:https://sqlflow.org
ElasticDL开源地址:https://elasticdl.org
公众号:金融级分布式架构(Antfin_SOFA)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。