【IT168技术】如今,Javascript在前端开发领域占据主导地位,成为Web开发人员的首选语言。Node作为服务器端的JavaScript运行环境,帮助更多的人将技术延伸到后端系统。它具有无阻塞、事件驱动等特点,让熟悉JavaScript的开发者无需学习Java、C++等传统“后台”语言就可快速简便地创建服务器端应用。
关于如何用Node.js实现“Hello, World”,我相信大家已经见怪不怪了。然而,曾有人怀疑:初出茅庐的Node.js,其成熟和健壮程度是否足够应用于企业级的生产环境中?这也一直是技术社区关注的热点。令人欣喜的是,我们看到越来越多的企业开发者在实际应用中采用了Node相关技术,并给予了肯定。LinkedIn、沃尔玛和微软这样的大公司都对Node.js兴奋异常.大家是否知道背后的原因?
Node.js提供了一个强大的平台,可以用来构建企业级应用。从流程管理、利用多核计算、安全,到NoSQL数据库、信息队列,甚至是反向代理,Node.js全部能搞定。不仅如此,还有一个彻头彻尾的、基于云的开发环境,能提供丰富的调试和团队协作开发体验。除此之外,有很多云供应商都对部署Node.js应用提供全面支持。在本演讲中,我们将会看到Node真的开始起跑之后,能展现出多大潜力。
▲微软项目经理Glenn Block
以下是精彩演讲:
您好!我来自微软,很高兴来到这里。我在上海待了一个月,在微软云平台上面工作。我的太太和我的家人,在上海一个礼拜学两次中文,每次学两个小时,一个礼拜学四个小时。学了那么多小时,今天终于鼓起勇气说给大家了。
Node.js是什么
我在负责Node.js团队,Node.js是我们的云平台,也在开展这个工作,Windows Azure,微软对Node.js非常感兴趣,这么多年来大力发展Node.js。今天不会像上课一样告诉大家Node.js是什么,我会很快的做一个介绍,实际上是一个平台能够用Java脚本做Windows应用,可以写非常完善的程序。Node.js的长处在于在服务器里面使用Java脚本。人们听到Java脚本,觉得很慢,我们用外部语言Java怎么够呢?当今的Java脚本跟四五年前不太一样了。比如说谷歌的、微软的,都可以把Java语言提升到新的台阶,而且充分利用。
大家会看到Node.js提出了一个没有任何阻断的IO模型。所写的代码不会阻断的。很多时候写一些应用可能会发送一个HTTP要求,在做HTTP呼叫的时候,中间做一些阻断,要发一个请求才会顺畅。在当今看到的很多语言都是一些多现成的执行,但是必须要把现有的拿出来用才行。如果同时发生阻断会把IO阻断的。Node.js可以用异步的方式看一下。没有多少API是异步的,我们这里异步。我们发出HTTP呼叫,不会出现阻断呼叫。每次呼叫有一个反呼叫发回来给我。
微软在这方面投了很多的资金,到底投了哪些资金呢?三年前刚刚发明了Node.js,在Linux的操作系统上,所使用的系统和Windows不一样的,有多少人跟Linux打交道?有多少人Windows打交道的?很少人。你们用的是什么呢?
Node.js一开始用的Linux系统上,用Windows不怎么样。但很多人在环境里面使用Windows,我喜欢Node.js,因为Node.js非常简单,占用空间小,而且速度非常快。因此,开始在Windows用Node.js。但是用的转换装置,用比较慢,在Windows上开发Node.js,无法把Node.js部署在Windows上,因为转换器太慢了。因为工作环境只有Windows。或者加上几个服务器来用用。
微软发现这个商机,现在很多客户想用Node.js,微软做了里程碑的事情,我们和开源社区开展合作,建立一个Node.js的核心团队,为Windows打造Node.js。PPT左边的图,Windows的安装器,成功将Node.js安装到上面。用开发的方式参加开源的项目从而成功。我们达到微软的Node.js,在Windows可以用的。我想在云端使用,我们又把Node.js带到云端,用开源的方式做的。
Node.js安装管理器,实际上就是一些模式化、模块化的东西,让你使用Windows Azure。如果是Node.js的环境里面就可以使用Windows Azure了。我们还提供了工具组件,无论在Windows还是非Windows系统里面都可以用Node.js。很少人知道,上面有很多的开源项目,有非常丰富的社区资源,而且中国有一个Node.js的社区,其中很多人淘宝的创始人,在北京、上海等其他地方的使用Node.js的用户群体。数量在不断增加,淘宝现在也在用Node.js。
Node.js确实引发了人们越来越多的兴趣。现在看到的图里面告诉我们客户对于Node.js的兴趣越来越高涨,这么多编程语言中和Java、PHP相比总量不高,但是对感兴趣的程度、增长的趋势来讲,Node.js远胜于主流的操作。
而这部分看到新的工作越来越多,呈爆发式增长。绿色的增长的非常快,目前在不同的网站上,通过Node.js做了不同的工作数量正在极速的攀升,Node.js呈爆发式增长的趋势,高增长引发人们一轮又一轮的使用热潮,确实非常吸引人。
而且使用Node.js的公司非常认真,非常看重Node.js。比如说有skype,微软收购了skype,我们和skype团队一起合作,在Node.js开发上也做了很多工作,微软不是简单帮助开发人员使用Node.js,自己也在用Node.js,充分利用了Node.js的产品帮助,实际上还能给我们其他的帮助。有些东西卖东西,像eBay也在用Node.js,还有Joyent等都提供微软服务,在云端用Node.js。接下来举一个案例,有Linkedin、沃尔玛。沃尔玛主要做零售、批发,在Node.js开发也开展了很多工作,雅虎也是一样。不是流行一阵子就没有了,如果看这么多列表、这么多公司。觉得麻烦是这些企业发展的时候,觉得扩展是大问题,所以才用Node.js。因为Node.js的扩展性非常出色,有效实现企业这方面的业务扩展。
现在看到的是我挑出使用Node.js公司的列表,对Node.js的网站,还有微机百科的主页,也列出了用Node.js公司的列表。比如说沃尔玛,我们用Node.js,用的非常好,很想告诉大家用很好,你们也来用,现在看到的列表是很小的公司。但是,接下来他们有37(英文),这个公司也会用Node.js,也会展示一下使用Node.js的项目跟大家分享。
And npm是Node.js包管理,需要很多的概念、需要很多的社区和支持。有很多人都做模块的存储,比如说(英文)知道吗?Java知道吗?Java有(英文)。npm实际上从刚才这些中吸取了很多的做法,是最好的模块化分装的工具。所以上网了解一下为什么有这么强大的威力,可以解决很多问题。因为用npm在同样的模块上用两个不同的版本,用统一个上面,不会崩溃。威力非常强大。如果有新的模块出来之后,可以尝试新的模块,跟之前的模块版本不同,必须要同时使用。所以,可以继续延用用的好的模块。
2011年有一个叫事件,在全世界有Node.js的活动,比如说在日本也做Node.js的大会。我们对Node.js的兴趣非常的浓厚,所以在全世界出席这种Node.js的会议和活动。像编写npm的人,2011年有1800个项目,明年大家想象不到有多少个数字,2012年一定会震惊,1.2万个。1800个项目,今年猛增到1.2万个项目。而并不是说应用的项目,而是一些资料库的项目,解决各种各样的问题项目。所以Node.js的挑战是我们想解决问题的时候,发现不是一两个,有时候可能50、100个,两个不同的模块来解决问题,这时候是一个挑战了,这个数字还是很惊人的,主动的数据包的作者,实际上是增长了5倍,达到730个。所以我们可以看到这个数字的增长是爆炸式的增长。
${PageNumber}企业为什么使用Node.js
第一个是Linkedin,当他们发表一篇文章,是一个杂志上的访问文章时,(英文)在Linkedin移动团队,可能想象不到,有了Linkedin针对LOS的应用了,整个都是建立在Node.js上的,用很多服务器来支持。现在看到以前在LOS的版本。
现在看到的是我们的架构,Node.js的位置,可以看到我们的服务在不同的客户端,包括LOS、安卓等,他们都是一些消费者,有自己的API,基本上所做的是在中间这一层(英文),处理这些不同来源的指令,把它介入(英文)功能,这之间全部用Node.js来编写的。Node.js的扩展性非常好,用的对,IO如何频繁的操作就很适合用Node.js了。大部分的(英文)都会使用Node.js,因为我们之前用HOL(音)时,有很多的框架,有多少人用Java(英文)写客户端的代码?还是不少。
基本上Linkedin所做的把Node.js放在终端,有非常好的扩展性,从16个服务器削减到4个服务器,使服务器所需要的数量大大减少,也可以支持Linkedin的应用。另外一个原因,很适合IO的呼叫。实际上Node.js做得最好的,收到一个请求、发出一个呼叫,Linkedin不是只用一个Node.js,但是Node.js是策略的核心。Node.js是一个单线层的执行模式,怎么样扩展呢?为什么可以扩展?是因为当你做一个Node.js的呼叫时,把可以放权给IO系统,放权给应用系统,应用系统通过IO执行,这样的话可以处理大量数据的请求,因为把IO权限放在这一块。用Node.js的原因实际上不是因为数据分析,因为数据分析是一种数据块的分析能力,要进行复杂运算的功能,这不是Node.js所擅长的,可以把Node.js放在中间,有请求的时候,可以传给其他一些分析的过程,分析做出反应之后,可以进行处理。
另外,比(英文)有一个重大的性能提升,这是很关键的一点,希望能注意。因为听到新的事物时,首先要想到,这是玩具吗?对于Linkedin来说,他们发现是一个非常大的服务,可以支持数百万计的同步用户,这是我 为什么喜欢Linkedin的例子。
eBay发布了一个产品,也是用Node.js的,eBay的IO是把不同系统因为汇总,提供域的语言,有不同的服务器抽取信息,作为客户端不需要找服务去找这个信息,可以通过QL.IO提供这个信息。在中国也许我们没有太好的带宽,在中国带宽质量比较低,QL.IO就算这块IO不算好,但是可以发送一个请求,可以通过QL.IO进入不同的服务器检索。自己不用发多次的请求,而QL.IO把一次的请求到不同服务器查找。
现在看到的是易购的服务,是不同的,QL.IO进行检索。已经成为最流行的网页体验应用的工具了,这些非常流行。在这里可以看到S-1、S-2、S-3,分布在不同地方的服务器,但是QL.IO实际上就成为网关的形式。
现在看到的是我们一段代码,看上去是一个选择的(英文)的语句,但是并不是一个(英文)的查找,QL.IO是帮助我进行多点查找。选择Node.js的时候,第一个要点是扩展性,操作性是第二个特点。
今天如果使用Node.js的话,在Windows上面有一个单一可以操作的。单一执行文件可以连接到(英文)上,运行是一个单独的执行文件。我们觉得非常重要的一点是,他们可以密切的监控他们选择的哪种语言、哪种引擎是可以达到效果的。可以通过监控确保执行是有效的。而非常好的监控功能来看(英文)的运行。QL.IO能对信息处理进行监控。所以他们也会有一个非常低的IO的工作负载。有些客户延迟,但是对内存占用少的。(英文)是动态语言,希望能够开发一种敏捷的工具,动态语言的好处是不需要花很多的时间做这种类、编写。因为(英文)可以简单的变成一种对象进行使用。他们发现可以很快的进行重复,用(英文)和Node.js可以快速更迭使用。
刚开始使用Node.js的时候,Node.js太年轻了,如果撞墙怎么办?如果发现想做一些东西,但是Node.js没有能力做到。后来发现Node.js本身是一个很小的程序。在文件夹里面就可以了。这个模块系统可以把中间感觉到的差距填补,想做什么都可以帮你做好,看上去很简单,是一种非常好的方式,HTTP上一些复杂的高级方式来完成工作。
开发源级别的工作站里面,超过12万个动态连接,但是每个连接用了2K的内存,在服务器使用非常好。在服务器上使用不想占用太多的内存。所以简化的IO模型给公司带来很多的帮助。写了Node.js应用时,什么东西都不用担心,因为在同一个应用里面,不可能同时使用资源,不同的线程。可能有好几个不同Node.js在使用同样的资源,但是不会担心在应用里面,这些Node.js不同的线程会导致资源不足,最终运行不下去。刚才讲了QL.IO在eBay的情况。
沃尔玛是最大的在线商店,在网站上什么都可以买到,也有实体超市。沃尔玛也使用了Node.js,移动战略,让客户更好的通过移动设备来游览沃尔玛的主页,希望提供一些本地的应用及浏览器的应用,在设备上用的应用程序。这给了他们很大的投资回报。使用Node.js很快定制终端用户的体验,Node.js让他们很快、很轻易地部署他们的程序。还做了一件事情很吸引人,因为Node.js是用Java脚本写的,把客户断的Java脚本放在服务器上。
雅虎,用雅虎的网站,不用加很多额外的附加东西,直接用简单的编码就可以了。他们写了一次编码,用了不支持Java脚本的浏览器浏览,如果发现不支持的话,会在后端把编码转成HDL格式就可以了。写一个逻辑语言,放在上面,如果客户端不支持可以在后台做调整。
另外,Node.js可以直接帮助客户端,也可以帮助服务器,如果不会写Java脚本,有专门写Java的编程人员,拿回来用就可以了。
有些设备浏览器版本不是最新的,可能不支持,也可以帮助客户成功使用网站。原来在前端操作的,也可以改成后端,这也是雅虎所做的工作,非常接近。
Node.js的扩展能力太强了,沃尔玛有世界各地的用户,Node.js像关卡一样,有效的应对这么多要求,而且很好扩展发起IO呼叫,这对沃尔玛绝对是大幸事,把沃尔玛的服务都放在Node.js后端进行扩展。
下面看一看Turner公司,它是世界上最大的多媒体广播公司。Turner公司也在使用Node.js,现在看到的是他们用的代码,他们用API,也用了(英文)来做数据库。很有意思的是Turner公司用Node.js,不是很关注它的扩展能力。(英文)是我的朋友,他在Turner工作,使用Node.js打破陈规,进行颠覆式的思维方式。我和Turner公司交流之后,他们想颠覆传统方式,希望重头再来,用新的方式写应用。一个人站在毯子上,把毯子抽出来,跌倒重新开始。为什么?Node.js可以更好的帮助你解决问题。写出的应用程序能够更好的扩展,而且得到更好的支援。
很多的开发程序员写代码写的太多了,而且都是为了写代码而写代码。到底关注了什么呢?其实我们关注的并不是网络上的(英文),希望用简单的方式写编码,打破固定思维。
它们公司已经不是传统公司写应用,而是创业公司一样,行动非常快,编码很快写出来了,不是尽可能的耗时间,他们的部署也更加简单,因为Node.js有很好的Node.js包管理器。部署Node.js的应用,很大的应用部署在上面,非常简单。不需要很多的安装包什么的,很简单就可以放上去了。会发现他们的开发人员现在关注的是怎么样能够把工作做好就行,而不是像以前一样画蛇添足。
它们开始使用相关的模型之后,也更多的参与到关于Node.js的开源社区,帮助公司的人进一步巩固新的思维,用更敏捷的方式来建造这些模型。更快的写应用程序,更快的获得反馈,这也是开源社区给它的一大帮助。Node.js获得了很大公司,在Turner公司取得的成功是另外的成功。
Linkedin、微软、eBay、沃尔玛、Turner,他们都在分享在Node.js里面用的东西,大家可以去(英文)等都可以分享到具体的应用。微软公司不仅仅让他们使用,而且通过分享让Node.js更加流行有更好的势头。可能你会说你是小公司,没有那么多资金做这些工作,可以让沃尔玛分享一些给你,自己拿回去试试。
${PageNumber}走进Node.js世界,怎么写Node.js应用
首先,Node.js吸引人的地方,不需要一个开发人员的环境,一个Java脚本就可以,用文本编辑器就可以了。我在这里写infoq shenzhen,建立子目录,生成一个文件叫(英文),会编辑一下文件,加一些内容。很简单的文本编辑器,(英文)好处在于可以(英文)高量处理和完成处理。可以写一个Java的应用,在不同服务器里使用,满足HTTP的请求,如果不能满足HTTP的请求可以用(英文)。下面花一段时间,写一个非常小的编码。
首先,进入Node.js提供的HTTP的功能,要求功能,给HTTP,有了HTTP对象之后,可以生成一个web服务器,这是世界化的IO模型,会阻断。IO在倾听要求时,中间没有任何阻断了,既然发出了要求,会给我一个反馈。反馈需要两个参数,一个是要求,一个是反应,这两个参数都有的话,会给你一个反馈。
我在(英文)的时候,写出(英文),会写出“您好,InfoQ深圳”,接下来要做HTTP的服务器,要倾听、监听某一个端口。80端口,是对外的端口。我用listen的命令写出干庭的方法和端口。服务器已经开始监听了,接下来写(英文),在Java当中不需要作为服务器监听。如果只做浏览器的话,可能是对我来说,可能多个(英文),跟操作系统进行集成、呼叫、发出指令。浏览器在沙盘当中,希望进入整个系统,不仅仅是沙盒,需要API的软件,做非常丰富的操作,真正充分的发挥我这台机器的功能。写入“3000端口上运行的服务器”。
这就是一个很简单的外服务器了这时就可以运行我们的(英文)。这是单一的文件,放在一个文件夹里,这里是(英文),要运行(英文)。上面有一个服务器运行在端口3000。打开浏览器看一下接入服务器。有多少人能够三四行代码就写一个服务器出来呢?如果不用Node.js的话,有谁能够几行代码做一个服务器呢?我们有一个很好的模型,可以写网页、服务器,用很小的代码。其他方法也很简单,但是扩展性不是很好。我可以用几句代码可以充分做出服务器功能的。
我是讲得很简单、很基本的Node.js,Node.js还有很多数据包的管理工具,现在看一下其他的数据包的工具。
npm,我们讲了Node.js(英文)是一个Node.js的管理器,可以给我们储存一个(英文),可以储存当地的(英文),也可以储存命令行的工具。刚才写了很简单的一个服务器,但是我自己还是要管理所有的功能。一般来说,并不好玩,如果用全方位的功能,可以用(英文),不需要担心要去处理所有的请求,有一些模板引擎。Node.js也可以提供同样的功能,还可以使用express的模块,可以帮你很快的做出一些Web的应用。
首先,安装express,到了npm的注册表,这就是Node Packaged的管理器,有1.3万个Packaged,其中有一个是Azure的模块,我们团队正在研究的。(英文)模块互相连接的,通过一个(英文)的文件,安装了express,是一个脚手架的工具,很快搭建应用。express就是用Node.js来编写的,所以脚手架工具就是Node.js的了,我呼叫express,就可以运行了。运行时出现了错误,为什么呢?我并没有这个模块,为什么没有这个模块,刚才安装了express为什么没有模块呢?安装模块到Node.js有两个方法,要么有命令行的工具,在本地(英文)给我们做新的模块文件夹,Java(英文)有一些模块可以用Node.js,有些做不到的。Java(英文)的(英文)可以进行扩展。所以,有一些原生的Windows模块,大部分是Java的模块。
下面看一下脚手架工具的作用,给我生成的(英文)的文件,说明现在运行在哪几个模块上,可以帮助你说明现在运用于哪几个模块,也取决于jade,可以帮我做出文件的渲染,给我了一个(英文)的文件,但是我现在还没有模块,没有安装必要的模块。所以只需要做(英文)的安装。当我做了(英文)的安装之后,自动会帮我看一下到(英文)的文件。到(英文)的文件当中把所有依赖的模块都提炼出来了。
所以我觉得Node.js跟其他相比做得很好的一点,其他的做法可以延引这些模块,但是都是本地的模块。这里可以取出很多不同的模块,也拉入了jade,其他的模块有自己的Node.js的模块文件夹,可以帮助你让不同的模块放入不同的文件夹结构当中。这样的话内容的丰富,比如说A和B的模块他们都可能有不同的版本,一个是放入本地文件的,但是可以同时使用不同的模块。现在做了之后,应用不行了。比如说现在做一个(英文),正在监听3000端口。
欢迎到Express,这跟我之前很相似,express带来什么功能呢?express本身有一个路由引擎,可以帮助我看到不管你在什么地方来做的请求,可以把路由到Java的功能,有非常高的路由,可以设定一些模板,在不同的ULO当中,比如说(英文)也可以在当中进入路由。另外中间件可以帮我们做(英文)。比如说我们有一些favicon或者(英文)的贴纸,可以从主体当中提取出来放入Java的功能。另外有模板的功能,可以把它转变成为(英文)。比如说这里有一个(英文)的对象,呼叫渲染(英文),改成深圳架构师峰会。再运行一次,只需要写(英文),就可以做出非常好的功能。
有些非常多不同的模块供大家使用,我称之为Node.js工具包,其中一个是1.3万个不同模块供你使用,还有很多不同的产品,其中一个文件的编辑器,文件编辑器是全功能的,而且大家可以做(英文)文本的编辑器。在工具包当中还有什么样的工具呢?加起来可能没有1.3万个模块,是其中一小部分,是比较重要的工具。有213个web的框架,为什么有200多个不同的框架,因为有数以百万计的程序员,如果要的没有,自己编写一个web的框架,编写之后发布出来。这样可以看到有些模块在工具包当中。而且Node.js有测试框架。
在(英文)有75个项目,都是放在(英文)里面的。有些是企业级的,可以拿出来做企业的应用。现在是一个BDB方式的测试。(英文)中间件在不同的请求间使用的。现在看到的正文主体就是用(英文)。如果在安全、登陆方面做更复杂、更高级就可以用这个。
模板引擎,是一个不同类型的(英文),可以选择有时候用(英文),也可以用(英文),既然是模板可以灵活的选择,能给你做(英文),在浏览器上实时的web沟通。看模块很有意思的,要做一个Node.js的应用要做数据库对话的话,必须在Node.js进行驱动,(英文)。最近微软也刚刚建立了一个Node.js的(英文)驱动。如果想在环境里面使用Node.js的话,可以用它。还有(英文)负责高速缓存的。
我们有一个发展非常完善的开发环境,叫做(英文),是一个开发基地,本身完全用Node.js写出来的,在浏览器里面,编写Node.js的应用,可以对它进行调试。主要用浏览器就可以进行编写和发布。大家可以回去自己看一下。
刚才花了一点时间看了Node.js的演进过程,有些大公司把Node.js以非常认真的态度应用。另外,我们在Node.js的工具箱里面展示工具,建立自己的Node.js。