[译] Node 也许不是构建大型服务的最佳选择:Node 之父 Ryan Dahl 访谈录

2017-09-07 Leson

导读:本文是对 Node.js 之父 Ryan Dahl 的访谈。 Ryan Dahl 谈到了创造 Node 的过程和现在做的一些很有意义并有挑战的事情。

Ryan Dahl 是 Google Brain 的软件工程师,Node.js 的创始人。目前他正专注于深度学习研究项目,目前的关注重点主要是图像转换。他为几个广为使用的开源项目做出了巨大贡献,其中包括 HTTP Parser, libuv。

Pramod:你好,这里是 Ryan Dahl,他让我们领会使用同步 IO 是不正确的姿势,并教会我们如何使用纯异步编程模型来构建软件,Ryan 也是 Node 的创始人。 很高兴 Ryan 接受我们的采访。

Ryan:你好! 很高兴来这里。

Pramod: 您作为 Node 的创造者而知名,可以告诉我们你之前的技术经历吗?

Ryan:当然可以。我在圣地亚哥长大,今年 36 岁,当我六岁的时候,妈妈拿到了一台苹果 2C,所以我很早就接触电脑了。随着互联网的出现,我的时代就来了。我去了圣地亚哥的社区学院,然后去了 UCSD,在那里我学习数学。然后我去了罗切斯特大学的数学研究生院。在那里,我研究代数拓扑,这是一个非常抽象的主题。毕业后,我开始攻读博士学位,随后我意识到自己并不想成为数学科学家,于是我就退学去了南美,找到一份做网站的工作。这就是我编程生涯的开始, 在一个滑雪板公司做 Ruby on Rails 程序开发。

Pramod:退出数学博士攻读去南美做 Web 开发?这个经历听起来非常有意思!

Ryan:是的。我的意思是你习惯于处理非常抽象的问题,而做网站是一个非常具体的过程。但是我真的试图把它变成一个美丽的数学理论,就像我在研究生学习过程中一样。我真的很喜欢 Ruby,你可以在 Ruby 中更清楚地表达你的想法。我认为 Rails 真的很有趣。它给了一个新的结构,虽然可能不是原创的, 我认为 Rails 普及了 MVC 结构 。 Ruby 能够清楚的表达我的想法和 MVC 这两件事结合在一起,对我来说真的很有趣。

Pramod:构建 Web 应用程序是非常有意思的事情。而 Ruby 是一个完美的工具。接下来,您继续在德国担任自由职业的 Web 开发人员。您工作的其中一个项目是 Node,我想那时候接下来六到八个月内都在忙这个?

Ryan:对。离开南美以后,我和女朋友一起搬到了德国,因为她是德国人,不得不回到大学继续学业。我开始去参加那里的 Ruby 会议,人们经常会讨论 Rails。其中有个人叫 Chris Neukirchen。他开发了一个名为 Rack 的项目,这是 Web 服务器的简化抽象。它是把一个 Web 服务器变成单一函数接口,你发起一个请求,然后得到一个响应。结合我在 Nginx Module 上做的一些工作,这让我想起过去。在 Nginx 中一切都是异步的。因此当你为其构建模块时,必须非常小心地避免阻塞。我认为 Chris Neukirchen 的脚手架加上 Nginx 的非阻塞 IO,使我开始思考如何将这两个问题结合起来。

Pramod:现在你有结合 Rack 和 Nginx 的想法了。 你是怎么说服自己,花半年时间做出可以在服务器端运行的 JavaScript,这可能会很大程度提高性能?

Ryan:那么这两个简单的 Web 服务器接口就是 Rack,而这个异步部分是 Nginx,我一直在思考这一问题。 Chrome 于 2008 年 12 月发布。随之而来的是 V8 JavaScript 解释器。这是一个很好的运行时。所以,当 V8 出来的时候,我尝试了一下,它看起来真的很有意思。 JavaScript 实际上是单线程的,每个操作都是非阻塞的。人们使用 AJAX 请求和内容时,就已经在执行非阻塞请求了。我想: 我认为 JavaScript 加异步 IO 加上一些 HTTP 服务器实际上是一件很酷的事情 。而且我对这个想法感到非常兴奋,在接下来的四年里,我一直坚持不懈。

Pramod:是的 JavaScript 加异步 I / O 工作得非常好。我相信开发商正在期待看到一个这样做的框架。在这段时间里,你曾经咨询过别人吗?

Ryan:基本上只是我。有些有编程经验的人给了建议。后来,我最后搬到了旧金山,在 Joyent 工作,并遇到了很多很棒的专业人士。很多人的思想汇聚而成日后的的 Node。

Pramod:自从你在 2009 年左右创建了 Node 之后,我知道 Ryan 这个名字就已经很久了。

Ryan:我觉得至少对我自己来说,在我的生活中,没有比这更伟大的时刻了,真的有时间坐下来好好地工作。我认为 Node 是一个等着发生的想法,如果我没有做,别人会有。但碰巧的是,我失业了有一些空闲时间,可以连续工作几个月。

Pramod:太好了这太妙了。你做得很好, Node 是建立在“纯异步”编程模型的基础上。这个想法如何产生的?

Ryan:是的,我认为这是一个非常有趣的问题。现在已经好几年了,而且自 2012 年或 2013 年以来,我还没为 Node 工作过。当然, Node 已经是一个很大的项目了。 所以当它刚出现的时候,我试图说服人们以非阻塞的方式完成一切工作,我们将解决很多编程难题。 也许我们可以完全忘记线程,只使用进程和序列化通信。但是在单个进程中,我们可以通过完全异步处理许多请求。当时我非常坚持这个想法,但是在过去的几年里,我认为这可能不是最终目的。特别是当 Go 出来的时候。 当我第一次开始听到 Go 的时候,那是 2012 年左右, Go 有一个非常漂亮的运行时,它有 goroutine, goroutine 是真的很容易使用抽象。程序员以为在使用阻塞 IO,而实际上是在执行非阻塞 IO。

而 Go 向用户提供的接口是阻塞的,我认为这是一个更好的编程模型。如果阻塞调用接口,你可以在很多情况下思考你在做什么。如果你有一连串的行动,可以说:做 A,等待回应,也许返回错误。做事 B,等待回应,或者出错。在 Node 中,这更困难,因为你必须跳转到另一个函数调用。

Pramod:是的,我喜欢 Go 的编程模式。使用 goroutines 是非常容易和有趣的。事实上,我们正在工作中使用 Go 构建分布式应用程序。

Ryan:是的,我认为这是某种类型的应用程序,如果你正在构建服务器端程序,我无法想象使用 Go 以外的任何系统。我认为 Node 的非阻塞范式非常适用于没有线程的 JavaScript。而且我认为,回调有很多问题,您必须跳入许多匿名函数才能完成工作。对使用 async 关键字,异步功能的现阶段 JavaScript 来说,这个问题已经缓解很多了。因此一些较新版本的 JavaScript 使得完成工作更容易。 我认为 Node 不是构建庞大服务器网络的最佳系统,我一定会用 Go 去做,这基本上是我离开 Node 的原因。实际上, Node 不是最好的服务器端系统。

我认为让 Node 真正发光的是客户端。例如,在建立网站时做一些脚本,捆绑客户端的 JavaScript。你可以在客户端和服务器端使用同样的语言。 对一些比较小的服务器功能来说, Node 可能是正确的选择 。但是如果你正在构建一个大规模分布式的 DNS 服务器,我不会选择 Node。

Pramod:这应该是全世界所有开发人员的好消息。选择正确的应用工具非常重要。 我们对 Node 没有任何偏见。您在 JsConf 2009 Berlin 中介绍了 Node.js。你惊讶于它突然收到的成功和牵引力吗?

Ryan:是的。我四年来基本上处于惊喜状态。因为它增长非常快,人们非常喜欢它。

Pramod:你加入 Joyant 之后,为 Node 工作,你搬到了 SF 吗?经验怎么样?开发者很喜欢 Node,你是 Node 的中心。

Ryan:这是一生只有一次的经历,我感觉到我是这一切的中心。有一次,我去了日本,人们要求和我拍照,我觉得有点奇怪。在网上,每当我评论一些东西,我会得到很多人回应。所以,我发现我不得不非常仔细地选择我的言论,以及我如何表达自己,因为似乎人们真的在听。而我也不喜欢这样。我是一个程序员,我仅仅想写代码而已,有时分享我的意见,大家不必太在意。

Pramod:我记得你是在 29 或者 30 年纪时候就创造 Node,而 Node 造成如此巨大的影响。

Ryan:是的。我在那时候还是一个新手。

Pramod:好的 Ryan,当时有很多服务器端的 JavaScript 项目。 Node 不是唯一的。你对 Node 的成功归因于什么?

Ryan:对。当时有几个人都在尝试让 JS 运行在服务器端。我完全忘记了他们是什么。问题在于他们都使用阻塞 I / O,然而 JS 根本没有线程。因此,如果您正在使用阻塞 I / O,您根本无法提供请求。如果一次只能提供一件事情,那么 Node 永远不会成功的。我希望使得 HTTP 服务器运行的更加良好。而且我把这些事情做得很好,让人们可以很快的建立网站。老实说,构建 Web 服务器并不是简单的事情。我认为重要的是,当你发布一个软件框架,或者任何种类的软件,需要让人们可以坐下来立即使用。这是 Node 所做的事情之一,就是人们可以立即下载并使用 Web 服务器。

Pramod:如果人们可以轻松下载,安装和使用它,会有很大的不同。此外,人们都知道 JavaScript,他们可以随时开始编码。

Ryan:是的。我们认为在语言之间切换是很容易的事情。我的意思是,即使你会用另一种语言,切换语言也是非常困难的。还有很多人非常熟悉 JavaScript。并且给他们这些工具,以便能够在其他情况下使用它激发人们。你突然能够做到比以前能够做的更多的事情。

Pramod:是的在 2012 年的 Node 已经有一个巨大的开发者基础。你为什么离开,把 Node 的控制权转转交给 Joyent 的 Isaac Schlueter?

Ryan:我认为有两个原因让我做出如此决定。我已经为 Node 工作了四年。已经达到了我想要的地步。我从来不想让 Node 成为一个非常大的 API。我想让它成为一种小而紧凑的核心,人们可以在其上构建模块。还有几个关键的特性,在早期添加了扩展模块,我们已经得到了所有的网络库, HTTP, UDP, TCP,我们可以访问所有的文件系统。然后把它移植到 Windows,而且我们想使用 Windows 抽象来进行异步 IO,即是用 Windows 的 IOCP 接口。这需要重写核心库,其结果是编写了 libuv 库。在那个时候,所有这一切都已经完成了,我们已经在 Windows 上发布了。虽然接下来有很多 BUG 需要修复,但已经有不少人参与其中。而我想去做别的事情,加上 Go 已经出来的事实,我看到 Node 并非服务器端的终极解决方案。当我发表博客时,也不想成为关注的焦点。

Pramod:确实有些人不喜欢成为众人注目的焦点。当您开始在 Node 上工作时,您绝对有一些目标。今天的 Node 是否达到你的期望呢?

Ryan: Node 被这几十万的用户广泛使用,我觉得这绝对超出了我的预期。

Pramod:Ryan 在你与 Node 的精彩旅程之后,你决定从事什么工作?

Ryan:在 Node 之后,我搬到了纽约,花了一些时间来完成自己的项目。当时 Instagram 已经出来,我也忍不住想做同样的事情。我有一个社交网络项目,还有有一个 C++ 的构建系统项目,甚至有另一个 HTML 的构建系统项目。我有一堆项目,其中没有一个是在我心目中淘汰的。我会在某个时候回到这个项目。我这样做了一段时间。然后我我开始听到卷积网络,图像分类,这让我对机器学习真的很感兴趣。

Pramod:你也是 Google Brain 的 Residency 计划的一部分,里面的经历怎么样?

Ryan:是的。我刚刚在山景城度过了一年。回过头来, TensorFlow 已经在两年前发布了。与此同时,他们宣布了 Google Brain Residency 计划,邀请了 20 人来到 Google Brain。我认为这个有想法的并不一定是真正懂机器学习的人,而是在数学和程序设计方面有一些背景,并且对机器学习感兴趣,喜欢这些新想法。因为机器学习正在快速变化,而且还有大量的工作已经完成,现在缩小的神经网络成为机器学习中最有用的算法,加上 TensorFlow,将产生一些有趣的想法。

我花了一年的时间,编写了基本模型,并写了关于这些模型的论文。我主要从事图像转换问题。如果你有一些输入图像,你想得到一些输出图像。例如,您可以将黑白照片作为输入,尝试将照片的颜色预测为输出。这个问题最酷的地方是有无限的训练数据。你可以拍任何彩色照片,然后把它的饱和度调低,就是你的输入图像。机器学习的一个问题就是需要大量的数据,而使用这些方式,这个问题就不是问题了。最近也有很多关于生成模型的工作,也就是输出图像的模型。它们已经表现出了学习自然图像多样性的能力,能够真正理解什么是真实图像,什么不是真实图像,什么看起来像真实图像。我的想法是把这个最近的工作应用在生成模型中,并采取这个无限的训练数据,看看是否可以做一些图像转换问题。因此,我做了一些关于超分辨率的工作(转换低分辨率图像到高分辨率)。这也是一个图像到图像的转换问题。

Pramod:我已经看到, TensorFlow 是许多机器学习问题的一个很好的平台。图像分类和转换,我相信这很有趣。你是否继续专注于 ML?

Ryan:对。我还是在谷歌,作为一名软件工程师,处理同样的问题。研究生成模型,并试图帮助研究人员构建下一代系统和下一代模型。

Pramod:生成模型与之前的 JavaScript, Node 或 Web 开发工作有很大的不同?

Ryan:我想是这样的。我想我有相当不错的数学知识基础。我不想成为一个只做 JavaScript 的人,我也不想只成为一个机器学习研究者。对我来说探索什么是可能的非常有趣。令人兴奋的是建立一些以前从未做过的新事物,它可能在某种程度上造福人类。

Pramod:很高兴知道机器学习需要一个很好的数学背景, 在最近的博客关于 Optimistic Nihilism 的话题,你说我们有可能有一天会模仿大脑,并建立一个像人类一样理解和思考的机器,我们距离这个目标还有多远?

Ryan:我必须对一些预言有点小心。我们无法接近人类智慧。我们正在使用的机器学习系统非常简单,它基本还不工作。事实上,我有一篇博客文章,其中列举了开发这些模型的所有困难。我认为那些不在这个领域工作的人有这样的想法:你可以接受这个模型并通过它得到一些数据。但事实并非如此。这些东西都是非常挑剔的,不是很好理解的,它需要很长时间的精心调整和实验才能得到结果。

我认为最近确实出现了一些有希望的技术,也就是说卷积网络似乎起作用了。事实上,这些东西是建立在一个模型的基础上的,这种神经网络模型不是真正的大脑,但是它是由大脑激发出来的,这是非常诱人的。我们有 GPU,我们展示了如何在这些 GPU 上进行训练,并在一定程度上分配加载在 GPU 上的训练。因此,我认为建立更大、更智能的系统的基础正在发生。就我个人而言,我是一个无神论者,我相信除了化学物质和大脑中的神经元外,我脑子里再也没有别的东西了。我们的意识是编码,但是我们还不知如何在神经元之间的相互作用。我不知道哪一天,我们有足够的研究和工作在这个领域可以效仿那种行为。这太远了,无法预测会有多长时间。

Pramod:你想在未来 20 年看到什么新科技?

Ryan: 我对机器学习和它带来的可能性感到非常兴奋。 我认为这种技术有很多应用。基本上,任何一个可以帮助你的系统,都将从这项技术中获益匪浅。有不可数的工业流程可以从这种事情中受益。有很多很多系统可以从简单的机器学习系统中受益。而且我认为我们将越来越多地看到这些系统应用于不同的领域。所以我认为这会大大影响科技界。

Pramod:是机器学习是非常令人兴奋的。当我在山景城看到自动驾驶车时,我感到非常兴奋。谢谢 Ryan,为我们带来了漂亮的 Node,感谢您的参与访谈。也祝你未来的项目成功。

Ryan:是的,它非常酷,感谢邀请我出席访谈。

Pramod:谢谢。我真的很喜欢和 Ryan 聊天,一个非常谦逊及厉害的人物,在非常年轻时候就 在技术上 取得了很大的成就,这样一个鼓舞人心的故事。

英文原文:https://www.mappingthejourney.com/single-post/2017/08/31/episode-8-interview-with-ryan-dahl-creator-of-nodejs/

文作者 Pramod HS,由 Jesse 翻译,转载译文请注明出处,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

推荐阅读

高可用架构

改变互联网的构建方式

长按二维码 关注「高可用架构」公众号


用户评论
开源开发学习小组列表