https://www.chainnews.com/articles/429488959332.htm
主导脸书 Libra HotStuff 算法的尹茂帆是如何一路走来?
主导雪崩协议与脸书 Libra 采用的 HotStuff 算法的尹茂帆是如何探索学术之路?
主导雪崩协议与脸书 Libra 采用的 HotStuff 算法的尹茂帆是如何探索学术之路?
原文标题:《ACM 班校友尹茂帆:做有意思的系统,成为那不可替代的 1%》
作者:刘晓雨
俞勇教授引言:2002 年因上海交通大学一举夺得影响全球的 ACM 国际大学生程序设计竞赛的世界冠军而诞生的 ACM 班,如今 ACM 班的名字也已享誉全球,到 2022 年 ACM 班即将迎来 20 周年庆。
为了迎接 ACM 班庆 20 周年,我们拟推出人物专访、成长征文、成果征集等系列活动,真实反映 ACM 班这群人以及在这群人身上发生的故事与所做的一些事。
自 2006 年首届 ACM 班毕业至今已有 14 届毕业生,累计有 400 余人,遍布全球各地,ACM 班已经成为一张交大名片。
今天,我们推出 ACM 班《校友专访》系列报道,希望通过一个个 ACM 班校友的故事,走进他们,了解他们鲜为人知的故事及成长的心路历程,给予学弟学妹鼓励与启示。
尹茂帆,本科毕业于上海交通大学 ACM 班,康奈尔大学在读博士生,师从 Emin Gün Sirer 和 Robbert van Renesse 教授,在校外也跟著名工业界学者 Dahlia Malkhi 有过密切合作。同时他也是 Ava Labs 的联合创始人以及首席系统架构师,在雪崩协议科研突破的基础上领导构建去中心化的支付平台和计算引擎。尹茂帆对设计和实现各种实用的计算机系统都有着广泛的兴趣。他的主攻方向是分布式系统相关的基础研究。目前他专注于容错、共识协议以及点对点系统。主要参与并领导的科研项目包括雪崩协议(Snow/Avalanche)和 Facebook Libra 所采用的尤物(HotStuff)算法。
不抛弃、不放弃——我的选择,我的未来
小编:您为何选择交大作为自己的大学四年生活的地方?为何又选择进入 ACM 班呢?
尹茂帆:我进入交大的过程不是一帆风顺的,特别感谢在这个过程中,交大与俞老师给了我宝贵的机会。在高中竞赛的时候,由于我「碰到大赛就会挂」的独特体质,即使平时训练的成绩非常不错,但是一到比赛还是会出状况。再加上我也没有其他特别突出的奖项或者成绩加持,所以在现场录取的时候没有获得交大的录取资格。当时我已经做好了最坏的打算,要不直接回去参加高考,要不就再复读一年。但是在高三那年,我终于如愿在联赛获得了保送资格,俞老师在犹豫后仍然给了我人生中最关键的一次机会,我被交大录取了。
谈到我想进入交大的原因,一方面是学长的安利,另一方面也是很重要的一方面就是俞老师的个人魅力。我相信如果没有俞老师在交大、在 ACM 班的话,当时很多人的选择可能会松动许多。某种程度上来说,俞老师就是使我们做决定的那一个存在。他的一些想法非常吸引我,此外,他在管理 ACM 班、制定学生的培养计划方面所具有的前瞻性,以及在学院体系中拥有的话语权,都保证了学生能够在这种学术氛围的环绕下,通过交大或 ACM 班的平台接触到更多的机会。在这一点上,我认为这远比我进入一所普通大学或者其他一流大学的普通班级收获的更多。
在进入 ACM 班的面试时,俞老师曾经问过我今后想做什么,我回答说想做程序、技术方面的东西。这个回答也许并不是最佳答案,甚至还会打 ACM 班的「擦边球」。因为俞老师曾经强调过,ACM 班是培养计算机科学家的地方,当「码农」或「搬砖」只是简单、重复的劳动,拥有「创造性」才能让你的学习、工作充满无限可能。这也算是俞老师给我的一个警醒:对于自己的想法,可以坚持去做,但是无论你从事哪一个方向,你都要成为那不可替代的 1%,而不要去做那 99% 的重复性劳动,或者沉迷于技术本身。我认为俞老师虽然平时看起来很严肃,但是他的严肃是源自许多批判性的想法。换句话说,当他表达出某种忧虑的时候,背后往往是在提醒你,我认为对我来说更像一种激励的过程。
尹茂帆 @ 交大
小编:在《我的选择》中,您将自己前两年的大学生活总结为《四时》《三思》《两难》《一心》,您在 ACM 班的学习经历似乎跌宕起伏,您能像我们描述一下当时的心情吗?您是如何在当时的情境中做出选择,一步步走出困境的?
尹茂帆:我认为这几篇中写得最好的应该是《四时》,因为那是我挂科之后写的,比较发自肺腑。
最初进入 ACM 班,我就决定参加 ACM 竞赛。这是出于两个方面的考虑:一方面是俞老师的鼓励,另一方面也是对于自己高中竞赛的一个延续。这个延续不单单是指继续参加竞赛,我认为更多的是弥补自己高中阶段参加竞赛时的遗憾。在一年多的训练过程中,从写程序的习惯到思路到思维模式,我收获了许多,它对我整个人都产生了巨大的改变,直至现在都有很积极的影响。
但是参加竞赛就涉及到如何平衡学习和竞赛的话题了。相较于投入到 ACM 比赛的精力,我在第一年对于大学基础课程的时间投入明显不足。如果说其他学霸还能吃高中教育的老本,对于我这个高中参加竞赛,在班上有效逗留时间只有一年半的人来说,这条路显然行不通。所以我第一年的学习之路非常坎坷,同时,中学时期教育的差距、个人水平的差距又让我觉得在所难免。
在挂科之后,我很担心自己是否会被 ACM 班淘汰,甚至在交大没有容身之处,所以我当时的目标一度降为留在交大。直至遇到了我比较擅长的课程以后,我才经过努力,一步一个脚印,从困境中走了出来。经历过挂科之后,也让我想清楚了:到底自己想要什么?以及其它一些关于为什么的答案。就像你刚才问的一样,我为什么要来交大?为什么要进 ACM 班?我非常珍惜交大的平台和环境,挂科、能力差并不是你全部的标签,它只是你与大学生活磨合过程中的一点小挫折,你需要的是直面困境,重新站起来。如果你被淘汰或者无法重新站起来,那么你之前千辛万苦争取到的平台和机会就会完全消失,这是我最不愿意看到的场景,所以我要想尽各种办法,不惜一切让自己留下来,这就是我当时的心情。
ACM 亚洲预选赛
小编:您在大三时的《方向》中写道:「我想做的既不是纯粹理论的研究,也不是一般意义上的 coding,而是将科研和业界相结合的粘合剂」。您能向我们深入描述一下这句话的含义吗?或者说您认为您现在的工作是否达到了自己当时的愿景?
尹茂帆:Google 有一个大牛叫 Jeff Dean,他是我最大的偶像之一。Jeff Dean这个人相当于做技术的「皇帝」,他是谷歌大脑 (Google Brain)、谷歌机器学习开源框架Tensorflow、谷歌广告系统、谷歌搜索系统等技术的重要创始人之一,可以说是谷歌技术的奠基人,也是一个将技术做到极致的人。他受人敬仰不仅仅是写几行代码,或者是懂一些技术,而是能领导团队去设计一个系统。因为你要做的是去实现一个产品或服务,使它们能够投入实际生产使用,而不仅仅是搭建一个玩具级别的模型或者模拟。Jeff Dean 就具备这种将理论研究转换为工业界应用的能力。
这种能力我认为很难培养。我们之中不乏聪明优秀的人,对于大公司安排的修修补补类型的任务,每天的工作可能只需要几个小时就能完成,其余的时间可能在休闲以打发时间,这也是很多硅谷程序员的生活现状。但是如果这时不让他们去做这些简单的、添砖加瓦的操作,而是说交给某人一个新的大项目,比如领导从头开发一个 XX 人工智能的 XX 框架,让他自己来主导设计和实现——第一步从哪里开始?如何生产出一个可用的系统?这都是需要思考的问题。简而言之,单纯具备写代码的能力是远远不够的。对于纯做技术的人来说,他们更像是一名听从指挥的士兵,上级下达命令说开战,他们就扛着枪向前冲,一个士兵就算能力再强,他也只是个士兵。就算你是个神枪手,你也只是几十万人的军队或者几千名神枪手中间的一员。对于一场战争来说,能否取得胜利的主要因素其实是决策者,也就是指挥官。虽然指挥官不一定需要亲自上阵杀敌,但是他需要对整个形势作出准确的判断,对战略、战术的重点有一个核心的把握。类比来说,在工业界,你想做出一番成绩,做出可以落地的、实际的、新奇的系统,实现别人从来没有实现过的东西,你的根基从哪里来?很大程度上还是从科研这方面出发。首先,你需要去研究它,或者是理解已经发表的论文,然而不少论文往往只是讨论理论上的可行性,缺乏对于实际情况的考量。
单在科研看来,我认为自己当时的判断还是相对比较准确的。做科研也包含很多种类,有纯理论的,也有偏实际应用的。如果你让一个擅长分析纯理论的人去研究工程的东西或者产业化的东西,结果未必能成功,因为这不是他们的专长。对于做技术的反之亦然。对我而言,我认为自己比较擅长一个两边「倒」的过程。换句话说,我可能不是做理论领域最厉害的人,但我争取成为做技术领域最厉害的,并且还是最懂得与理论结合的那个人,一个出色的工程师或代码手并不足以形容我的工作身份。给你一篇论文,公司要求把它变成产品:第一要多长时间,第二需要哪些人,第三能不能变出来?能做到什么程度?这些都是非常非常重要的问题。而根据我的观察,能够解决这样的问题的人其实非常少。
以我现在的状态来说,自己还处在学术圈中,这也是一个好的起点。至少目前看来,我实现了当时大三写的这个愿望:一方面是我在康奈尔读博,这本身就是一个积累学识的过程;与此同时,我也可以做一些能够将理论与实际结合的工程。以HotStuff为例,我可以将理论进一步打磨,相比之前的工作,它更加简洁易懂,更加实际,易于公司去实现。我认为这算是学界与业界相结合的一个很好的例子。另一方面我和导师一起筹建了一个创业公司,目前这个公司已经开始平平稳地推进,看上去进度也很不错。这个公司的建立和其产品的研制也是我直接把学术成果尝试向工业界、商业界转化的一个过程,我也在公司中担任首席架构师,这也部分实现了我带领团队的梦想。
尹茂帆在韩国参加区块链会议
小编:您认为在 ACM 班的这 4 年里,您的收获大吗?它给您之后的学习或是生活方面有没有带来影响?
尹茂帆:在 ACM 班学习的这四年,对我来说收获很大。
它让我跳出了自己的舒适区。一个人想要提高能力、获得成长,都需要跳出舒适区。所以可能也是这个班级的设置或是我本身的属性与班级匹配产生的结果,我从进入班级时就感觉不在舒适区内,这个状态对我反而产生了正面的影响。我很清楚地知道,并不是说我进入交大,就意味着自己非常厉害,可以随心所欲。之前我为了能够进入交大作出了很多努力,那么在 ACM 班,我必须要有所收获,才能对得起之前的自己。俗点说就是所谓的奋发图强,但具体到行为上更多的是要想清楚自己要干什么以及需要什么。我认为在交大 ACM 班的四年里,最大的收获就是搞清楚了自己到底要什么,这也是俞老师经常跟班上同学提到的一个问题。他也可能意识到,ACM 班的同学大部分人都是非常有潜力的,但是很多时候大家也会迷茫,空有一身学习本领的筋骨,而自己却无从施展;只是单纯的跟着大家走,这样是没有结果的。
所以俞老师不止一次的提醒过我们:要明白自己到底要什么,如果你知道自己想要什么,那么你就能做出选择,朝着这个方向去努力。关于这个问题,我也是花了整整 4 年的时间才想清楚,因为直到大三之前我都没有想过要出国,一开始我仅仅是希望自己能够顺利毕业然后在国内的公司找到一份比较好的工作,包括我去康奈尔交流以前也在想,要不要考虑一下 Google、Facebook。我一度认为 Google 就是程序员最好的归宿,也是我人生的终点。但是在一次买二手书的时候,我与贾枭和马融学长坐在一起聊了很多,在这次聊天中,他们让我意识到Google 不是我人生的终点,恰恰相反,只是我人生的起点。老老实实毕业,找一份不错的软件工程师工作,有一份不错的薪水,安于现状并没有什么不对,但这是一个温水煮青蛙的过程,我还很年轻,有很多试错的机会,我认为可以读个博士,把各种想做的东西都试一试,从事一些有影响力的研究或者一些别人从来没有做过的东西。
一入系统深似海:Hotstuff「尤物」,应运而生
小编:作为 HotStuff 的第一作者,您能否向读者简单介绍一下 HotStuff?
尹茂帆:理论上来说,大多数人甚至不需要知道 HotStuff 是怎么工作的,因为这是个非常技术核心的东西,就像你不需要知道国家是怎么制造核电站,怎么浓缩提取铀——大部分人是不会碰到它的,它只是对于工业界来说至关重要。区块链这个行业你肯定听过很多次,你可能也会在想,区块链到底是在干什么?这些应用我之前不是已经见过了吗?这只是把它放在了所谓的链上,有什么区别?其实区块链在我看来,包括很多研究人员看来,它和传统的云服务、云计算的最大区别是「去中心化」。比如说一个互联网企业垄断,例如滴滴打车,或者拥有淘宝、支付宝的阿里公司,这种情况并不是你希望看到的,你想要看到的应该是存在多家服务提供商,他们之间相互竞争,彼此不信任对方,但是又不得不在一起合作以达成共识,一起经营起一个统一、有序的平台。也可以这么简单的理解,就是我们希望能够让一些利益冲突的企业也好,个人也好,计算机或者服务器也好,让他们聚集在一起,通过相信真理掌握在大部分人手中,或者是少数服从多数的原则,来实现一些「共识」。因为大家两两之间其实是互不信任的,所以这个操作其实是一个很复杂的问题。Hotstuff 解决的就是如何让大家聚集在一起,能够对一个计算或者一系列的操作形成一致性。这样就能保证,比如说同样是一个平台,假设有 5 家公司或者多家公司在合力运行,那么你看到的状态跟我看到的是一致的。如果是同一个账户,你用某一家提供的服务看到的余额和我用另一家提供的服务看到的余额是相同的。不仅仅是余额,系统的操作、交易、整个业务逻辑都是有一致性的。简而言之,Hotstuff 要实现的事情就是让一些利益冲突方,能够在一起,对一系列的交易或者计算达成这种一致性。
尹茂帆与导师 Dahlia 对 PBFT 期刊版本的讨论
小编:作为 Libra 背后的共识算法,Hotstuff 为何能够被 Facebook 采用?它本身具有什么样的优势呢?
尹茂帆:Hotstuff 的优势比较明显。主要分为两个方面:一个是理论方面的优势。另一个是实用性方面的优势。
理论方面是它的复杂度,比如在大家所熟悉的算法竞赛中,算法会有一个复杂度,就是能够跑多快。可能原来是平方,或者立方这个水平的消息复杂度,然后我们把复杂度下降到了线性,也是下界。
实用方面首先是这个协议可以做跟其他同类协议一模一样的事情,但是协议本身的逻辑却又比以前的简单很多很多。它的特殊情况较少,更加一般化,让人更容易理解它是怎么一步一步运行的。甚至对于一个本科生,他可以看着论文就能用例如 python 语言写一个很简单的例子出来,这是在以前没有出现过的。另一方面是它可以把系统中的两个关键点进行解构。一个系统既要做到安全、一致,又要有实际效率,能够运行起来。通常在学术上被分为safety和liveness,暂且称为安全性和活性吧。往往系统的这两个方面在它的协议中是相互纠缠在一起的,比如说你从协议中抽取某些东西 , 想要修改里面的逻辑 , 那可能会出现两种情况 : 要么不小心破坏了安全性 , 要么搞定了安全性却又出现了活性的问题。对于之前的工作,他们的问题在于虽然在理论上被证明是正确的,但是投入使用的时候,大家往往需要根据实际需求去调整决定它性能或者活力的部分,因为那个部分与他们实际的应用或者产品息息相关,但是这种操作会使他们陷入一种尴尬的境地,就好比你给他们推荐了一个算法或代码,类似「魔法」一样,他们知道照着这个「魔法」念就是正确的,但是一旦他们想对这个「魔法」的咒语做一些改动,就会发现自己束手无策:可能你稍微改一下,这个「魔法」就不 work 了,开发者也不知道这个算法在改动之后还能否正确运行。
所以Hotstuff 另一个重要贡献就是将安全性与活性在算法层面进行分离。具体来说,就是你只需要在一个很少的逻辑的部分,用很少行数的代码,就能保证它的安全性,同时,无论你怎么改动它的活性或者性能,都不会影响它的安全性,这对于工业界来说是一个巨大的优势。在 Facebook 发布的 Libra 白皮书或技术报告中,他们提出了Libra BFT 共识。相比 Hotstuff,它的主要贡献就是根据他们的需求实现了我们论文中提到的一个可以让算法使用者自己定制的东西---「起搏器」,我当时起名叫 pacemaker,用以保证协议的活性。使用者可以在算法提供的框架下去定义自己的起搏器,这样就可以得到一个适合自身需求的协议变种。Libra BFT 利用了 Hotstuff 安全性跟活性分离的特性,使用了 HotStuff 算法并定制了他们的起搏器。这个是我们论文的初衷,也让我们看到了工业界对于它的认可。
HotStuff 诞生地--VMware Research 总部门口
小编:Facebook 发布的数字货币 Libra 与比特币又有什么区别?
尹茂帆:我简单介绍一下它们之间技术层面的区别——算法上的区别。它们使用的是两种不同类型的算法:在给定前提条件的情况下,比特币算法的安全性是概率的,而 Libra 所用的 HotStuff 是确定性的。比特币运行非常慢,交易费用高、成本高。比如说买一个交大的鸡蛋灌饼,你可能需要一小时才能确认交易,并且在这一小时中,你什么也干不了只能干站着,那一笔的交易费,无论你买或不买,买一个或买几个,它都会收取数美元的高昂费用。产生这个现象真正核心的原因是比特币背后需要矿机来支撑,它需要一个对于应用层没有实际贡献的算法来挖矿。
挖矿,简单理解,就像不停去猜一个东西,类似于暴力破解你的密码。比如你的电脑设定了 8 位数的密码,你需要把它猜出来,使用穷举的方式可能会让你猜一个下午,比特币使用的就是类似这种东西。它让你去猜一个数,使得它经过一个给定计算过程后的结果小于某个值,你可以认为它就是一个不停去穷举、去猜测的过程。
同时,挖矿的计算必须昼夜不息进行以保证系统的安全,但是这会消耗大量的能源。大概在一两年前我所知道的是比特币一年全网消耗的总电量,相当于丹麦一个国家电网三年的装机总量。这是一个非常不低碳,不环保一个系统。然而Hotstuff 只需要投票,它的速度与服务器本身的处理消息的性能以及网络本身的性能直接挂钩,并不需要一个额外的挖矿的过程。
还有一个很大的区别是比特币使用的是同步模型,即协议的正确性(前面提到的安全性)是建立在对于整个网络最大传输延迟的基础上的。而 HotStuff 则是一个部分同步算法,使得它的正确性不依赖于任何网络延迟的假设,更加地可靠。
最后是 Facebook 的数字货币是一个联盟链。不是任何人都可以跑这个系统的结点,它会有一个准入机制,这个标准是由现实社会中的一个委员会来进行讨论的,这种准入门槛需要在系统以外的空间去通过政治或者商业手段去解决。比特币的优势是人人都可以运行结点,虽然可能你跑的节点一直都挖不出矿来,但是你还是可以跑。
小编:您对目前的区块链技术以及市场的前景有什么看法?
尹茂帆:区块链现在已经有很多酷炫的技术,因此我认为现在的问题更多的是大家需要找一些实在的应用。目前市场的前景取决于你能不能够用这种技术去解决一些传统问题,或者是找到一些非传统的好问题。如果你能很好地解决这些问题,并为它们提供一个完全可用的服务,那么它的前景是非常美好而又光明的。但是,如果你只是去炒作币本身,炒作这个概念本身,那么它的前景就会十分黯淡。因为市场总是不停起起落落,许多资本虽然进进出出赚了钱,但对于技术本身来说并没有落地,只是永远停留在概念阶段。我认为现在需要的是有人能够做一些东西出来,不能只是指望着割韭菜,赚了烂钱就走。
做有意思的系统,成为科研和工业界的「粘合剂」
小编:对于初入科研的学弟学妹,您有什么好的建议?
尹茂帆:我有两个建议:第一,不要害怕去尝试。对于自己感兴趣的方向,如果有条件、有资源,就一定要去试试。如果没有,在力所能及的范围内创造条件也要去尝试。在这个过程中,你就会理解科研或者工程大概是什么样子,但是更多的是你要学会思考一个当将军的问题,而不是说我去做研究,跟着学长学姐干点活,写几行代码,然后老板点了几个头就足够了——不要总想着当士兵,你要去思考为什么要做,这个东西的前景是什么。比如说我要去做人工智能的某个方面,它的前景怎么样,我能做的还多吗,我能做多少……你思考的是这种更高层次或者是更本质的问题。第二,坚持自己的选择并继续下去。当你对不同的事物进行尝试以后,你需要择定一个方向并坚持下去,而不是在几个方向之间摇摆不定,「三心二意」,既觉得这个有意思,又想尝试另一个。我见过很多这样的同学因此浪费了不少时间。如果你能够尽早想清楚这件事,会对你日后的发展有很大的益处。暂时想不清楚没关系,但我建议大家最好一开始就思考这个问题。
小编:您平时除了科研,还有哪些爱好或者兴趣?
尹茂帆:其实我在本科实习的时候比较喜欢做菜,现在因为比较忙,做得少了。现在比如说做点电子小制作,焊焊电路什么的,之前还玩了下胶卷摄影,在家里冲胶卷,做暗室之类的。总的来说,会有点杂。不过我也会坚持那么几个长期的爱好,大一下学期开始学的古典吉他,我整个大学每周都去上课,风雨无阻,现在仍然尽量抽空练习。读博之后开始学习射准反曲弓,希望能在这项运动上有所专精。我觉得人必须有一些兴趣,或者是趁着自己还有时间去做一些想做的事情,因为你以后只会越来越忙,别给自己立 flag 说「等我有空」了。
尹茂帆练习吉他
小编:您对未来的工作和生活有什么目标或规划?
尹茂帆:对于以后的工作,我目前还不是很确定,但是已经有了一个雏形。我认为要是指望一毕业,就能去大公司做大项目,担任首席架构师,肯定会有点困难。因为这种职位当然需要更多的项目经验,需要更多的历练,看更多的系统和设计。由于我现在主要在学术界,所以这些还不够。因此,我认为一个比较好的切入点,就是去做工业界的研究员。这是我比较喜欢的一个方向,目前也没有找教职的计划。我认为不考虑去找教职是我个人选择的问题,不当教授不代表降低自己的科研要求。另一方面,我现在在做的方向目前还比较有热度,也有很多理论,很多论文,而问题就在于市面上很少出现什么落地的项目,我希望自己能够亲手与志同道合的人一起改变这个现状,而不是隔岸观火,批评区块链有多少割韭菜的东西,当个喷子。只有你身体力行,努力想要做出一点可用的东西来,你才能真正推动它的发展。因此,相比于当教授发论文,我更在乎自己能不能做有意思的系统,投身到工业界做研究员对我来说是一个更合适的安排。
来源链接:mp.weixin.qq.com