Node.js实战(第2季)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-09 21:59:52

点击下载

作者:吴中骅,雷宗民,赵坤,刘亚中

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Node.js实战(第2季)

Node.js实战(第2季)试读:

前言

自本书第1季《Node.js实战(双色)》出版以来,JavaScript界又发生了许多重大事件:React.js和AngularJS 2.0相继出现;ES6于2015年年中正式定稿;io.js从Node.js社区中分裂出来,后又与其合并。截至本书出版时,npm上有接近18万的模块,是去年同期的3倍,周下载量接近5.6亿次,是2014年同期的10倍。越来越多的创业公司和大公司都不同程度地使用了Node.js,Node.js已经成为一门成熟、稳定且具有独特魅力的技术。

延续《Node.js实战(双色)》的写作思路,本书不会从头讲解Node.js是什么,而是面向有一定Node.js基础的读者,建议读者把本书当作入门与进阶之间的过渡书籍来阅读。本书通过7个实例来讲解Node.js在不同场景下的应用,通过阅读本书,读者可以快速熟悉并使用Node.js进行开发。本书由4位作者共同编写,其中吴中骅完成了第1、3章的创作,雷宗民完成了第2、4章的创作,赵坤完成了第5章的创作,刘亚中完成了第6、7章的创作。

第1章主要介绍了如何使用Docker快速发布一个Nginx+Express+Redis项目,然后使用Jenkins进行简单的持续集成发布工作,其中介绍了Docker的基础概念、用法和Jenkins的安装配置方法。

第2章介绍了当前比较流行的OAuth2认证。OAuth2认证是当API服务器对外提供服务时,验证API使用者权限的有效的认证方式。本章主要介绍了使用Node.js搭建一个基本的API服务器所涉及的组件、方法和技术细节。

第3章主要介绍了如何在Node.js中使用消息队列软件RabbitMQ来解决Web服务器或应用服务器间的通信问题。对于服务器间的跨语言通信,以前一般采用XMLRPC方式,而现在比较流行采用HTTP的RESTful方式,使用RabbitMQ能够很灵活地处理这些事情。

第4章以一个静态博客系统构建工具作为实例,介绍如何使用Node.js的commander模块来编写一个命令行工具。

第5章介绍了ES6中生成器、yield,以及Node.js下一代Web开发框架Koa及其中间件的用法,最后通过搭建一个简单的论坛系统,让读者从实践中学习如何基于Koa快速开发Web应用。

第6章分享了作者在一家时尚杂志相关的互联网创业团队工作的部分经历:为该团队搭建一套较基础的Node.js测试服务,测试范围涵盖服务器、浏览器、Mag+、Adobe InDesign等平台。希望读者通过这个分享能够找到一种更为全面的方式去保证项目代码的质量。

第7章分享了作者与51Degrees团队远程工作的细节,可以让读者大致了解如何将一个已有的C/C++代码库拓展到Node.js平台上进行使用。

感谢电子工业出版社博文视点张国霞编辑的热心帮助和指导;感谢神猪、河蟹、AKI、何翊宇(dead_horse)、Kenneth Kan、Baptiste Gaillard、Jorn Zaefferer和Fish对本书的校验;再次感谢何翊宇为本书慷慨作序。

如果您对本书有任何评论或建议,可加入本书官方QQ群(156627943)进行讨论,或者到读者反馈网站http://nodejs.ucdok.com进行反馈,真诚欢迎您的意见与反馈。第1章通过Docker快速发布Node.js应用本章将主要介绍如何利用Docker快速发布一个Nginx+Express+Redis项目,然后使用Jenkins进行简单的持续集成发布工作,其中将介绍Docker的基础概念、用法和Jenkins的安装配置方法。Node.js配合Docker和Jenkins可以更加方便地管理我们的应用。在学习本章之前,读者需要对Linux基本命令行操作、Nginx简单配置、Express框架、Redis有所了解。1.1什么是Docker

Docker在2013年首次进入业界的视线,其受到广泛关注则是在2014年的下半年。Docker 1.0自2014年6月公布后的短短几个月内,人气一路飙升。红帽公司在新的RHEL 7版本中增添了支持Docker的功能,IBM公开拥抱Docker和容器,亚马逊推出了EC2容器服务,就连公认的竞争对手VMware也宣布支持Docker。

2014年8月,Linux.com和The New Stack在于美国芝加哥举办的CloudOpen大会上公布了一项由550名从业者参与的调查结果。在最受欢迎的开源云项目评选中,OpenStack位列第一,Docker位列第二。

业界人士认为,Docker技术在2015年将不会停留于“热度”层面,而会深入地走向部署和应用,因此也将会进一步激发不同开源技术与平台之间的碰撞和整合,最终推动开源及容器技术的向前发展。在中国,将会有更多的云厂商宣布支持Docker。

那么Docker到底是什么?我们该如何定义这个开源界的新宠呢?

Docker官网对Docker的定义如下:“Docker是一个为开发者和运维管理员搭建的开放平台软件,可以在这个平台上创建、管理和运行生产应用。Docker Hub是一个云端服务,可以用它共享应用或自动化工作流。Docker能够从组件快速开发应用,并且可以轻松地创建开发环境、测试环境和生产环境。”

通俗地说,Docker是一个开源的应用容器引擎,可以让开发者打包自己的应用及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker容器完全使用沙箱机制,独立于硬件、语言、框架、打包系统,相互之间不会有任何接口,几乎没有任何性能开销,便可以很容易地在机器和数据中心中运行。最重要的是,它不依赖于任何语言、框架或系统。

比如,作为一名开发者,在自己的电脑上开发应用程序时,一切都运行正常,但如果将其部署到其他环境中就可能不能正常工作了。由于开发者使用了自己喜欢的栈、开发语言和版本,所以把它们部署到新的环境如测试环境或生产环境时,就会出现问题。这时,运维工程师和开发者需要花费大量的时间、精力和财力,通过进行大量的沟通才能达成一致。但如果使用Docker进行开发,就可以将这一切封装到一个或者几个可相互通信的容器中,而这个容器自身就可以完成所有工作。之后,开发者只需将该容器部署到其他环境中即可。

其次,相对于虚拟机,由于Docker容器不必运行操作系统,所以其体积更小。底层的Linux容器已经被包含在内核当中,这意味着镜像体积非常小、非常快。虚拟机的体积以GB为单位,需要一到两分钟的启动时间,而容器只以MB为单位,并且可以在几毫秒内启动。这可以加速开发进度,允许开发者轻松地移动容器。

此外,由于容器体积小,可以快速部署,所以有助于开发者进行超大规模的部署。相对于虚拟机,开发者可以使用更少的存储空间、内存和CPU,因为其在性能方面基本上不需要系统开销。1.2Nginx作为Node.js前端Web Server的作用

在开始Docker之旅前,我想先说明将Nginx放置在Node.js前端的作用。

对于Nginx想必大家都不会陌生,不过在这里我还是要不厌其烦地再介绍一下。

Nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev开发的轻量级网页服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。起初是供俄国大型门户网站及搜索引擎Rambler(俄语为Рамблер)使用的,并因其稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。此软件在BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris及Windows等操作系统中运行。

这里正是看重了Nginx出色的HTTP反向代理能力,才把它放置在Node.js前端,用来处理我们的各种需求。可能有读者不理解“反向代理”这个名词,笔者在这里稍作解释。

有反向代理就肯定有正向代理,对于正向代理我们接触得比较多,比如我们想访问一些国外的网站,可是由于某些原因无法正常打开该网站或者打开缓慢,这时我们通过香港的HTTP代理就可以正常访问一些国外网站了,在此,香港的这个HTTP代理就是正向代理。反向代理的情况正好相反,比如我们有一个对外的API服务api.nodeInAction.com,初期我们启动一台服务器、一个Node.js进程就可以完成负载,但是随着后期访问量的加大,一个进程、一台服务器已经不能满足我们的需要了,这时Nginx就可以发挥自己反向代理的能力。我们可以在Nginx后端添加多个服务器或启动多个进程来分担访问压力。在这里,Nginx的作用就是反向代理。

理解了Nginx的反向代理原理后,现在说说为什么要把它放在Node.js的应用之前。其实,这样做大致有如下好处。

1.静态文件性能

Node.js的静态文件处理性能受制于它的单线程异步I/O模型,注定了静态文件性能不会很好(所以在某些情况下,单线程异步I/O并不是性能的代名词)。在一台普通的4CPU服务器上,使用Nginx处理静态文件的性能基本上是纯Node.js的2倍以上,所以我们应该避免在生产环境下直接使用Node.js来处理静态文件。关于Node.js处理静态文件的更多内容,在《Node.js实战(双色)》中有详细的对比和介绍,欢迎读者阅读。

2.反向代理规则

有时会存在反向代理服务器配置多样化的情况,有时我们希望配置较好的机器能够分担更多的压力,有时又因为session的关系,我们需要将同一来源IP的客户端全转发到同一个进程上,对于诸如此类的规则,使用Nginx的配置文件就可以简单实现。

3.扩展性

Nginx可以加入许多扩展来帮助我们处理业务,最典型的就是加入Lua语言的扩展。胶水语言Lua赋予了Nginx复杂逻辑判断的能力,并且保持了一贯的高效性。例如我们有一个API服务,对访问会进行MD5签名或对同一客户端来源有访问频率限制,这部分代码是后端业务处理前必须通过的验证,具有卡口的作用。利用Lua扩展,我们就可以高效、简单地完成这个卡口。

4.稳定性和转发性能

对Nginx的稳定性大家有目共睹,Nginx在同样的负载下,相比Node.js占用的CPU和内存资源更少。同时,高效地转发性能、便捷地转发配置也是我们选择它作为反向代理的原因之一,比如我们可以根据不同的URL请求路径转发到不同的后端机器上,也可以设定超时时间等,方便管理。

5.安全性

Nginx已经被各大互联网公司广泛应用,经过一些配置可以有效抵挡类似slowloris等的DoS攻击,而Node.js在这方面做得还不够,关于Node.js开发安全方面的更多内容,可以参考《Node.js实战(双色)》一书,其中的第8章专门讨论了如何更安全地开发Node.js的Web应用。

6.运维管理

如果我们目前只有一台Web服务器,同时有多个站点需要占用80端口,这时我们只需让Node.js服务监听本地的特殊端口如3000,通过Nginx的反向代理配置,就可以将多个站点域名指向一台机器了。当然,如果公司配置了专门的运维部门来管理服务器,相信他们对Nginx的熟悉程度一定远远大于Node.js,他们自己就可以轻松地修改一些配置,而不用来麻烦我们了。

所以,一个好习惯就是,在生产环境中,永远把Nginx放置在Node.js的前端,对性能、安全性和将来的扩展都有益处。1.3安装Docker和下载Images镜像

在介绍完Nginx之后,我们继续Docker之旅,在Docker官网有详细的各个系统安装流程,这里介绍CentOS下的安装流程,其他系统的安装地址为https://docs.docker.com/。

对于使用CentOS 7的用户,直接运行如下命令,就可以安装最新版本的Docker。

使用CentOS 6.5的用户需要先获取epel源并导入。

接着通过yum安装Docker。

启动Docker服务,并且把Docker服务注册为开机启动。

我们可以输入如下命令,检查Docker进程是否已经启动。

如果发现Docker进程未成功启动,就需要进入/var/log/目录下查看Docker日志文件的信息了,应用CentOS 6.5的用户可能会发现系统报出如下错误。

执行如下命令可以修复,然后重新启动Docker服务。

现在,Docker服务已经安装并启动了,我们需要下载Image镜像,镜像就是我们应用运行的环境,比如我们可以自己安装好Node.js和npm,然后发布到Docker Hub上供自己或者别人下载,我们也可以下载安装一些官方镜像,把它作为自己镜像的基础。下面我们先下载CentOS镜像。

等待片刻,等下载完毕后执行命令查看镜像是否安装成功。

我们可以去Docker官网搜索一些我们需要的镜像,根据下载次数、推荐次数来排序搜索结果,访问地址为https://registry.hub.docker.com/。例如,在Docker官网搜索Node.js关键字,在结果列表中我们可以看到被人赞星星的次数和下载次数,如图1-1所示,二者的分数越高,就越说明这个镜像值得信赖。图1-1 Docker hub下载页面1.4Docker常用命令

在深入学习Docker之前,先罗列一些Docker常用命令,一时半会看不懂也没关系,在深入学习的过程中很容易掌握这些常用命令。关于详细命令的相关说明,可通过输入如下命令获取帮助。

1.获取镜像

命令示例:

2.启动Container盒子

一个启动Container盒子的简单示例:

启动Container盒子是非常重要的命令,我们会在下一节详细介绍Container盒子及启动命令。

3.查看镜像列表,列出本地的所有images

命令示例:

4.查看容器列表,可看到我们创建过的所有Container

查看所有运行中或者停止运行的盒子的命令示例:

5.删除镜像,从本地删除一个已经下载的镜像

命令示例:

6.移除一个或多个容器实例

移除所有未运行的容器的命令示例:

7.停止一个正在运行的容器

命令示例:

8.重启一个正在运行的容器

命令示例:

9.启动一个已经停止的容器

命令示例:

基本上常用的命令就是这些,读者第一次阅读只需对它们有大体了解,随着对Docker的不断使用,我们很容易熟练运用上面的这些命令。在1.5节我们将详细介绍Docker的精髓,即Container。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载