大略地概述,运用的组成内容可能包括:
Web 界面显示逻辑;后端业务逻辑;缓存;数据库;行列步队。实在还可以加入日志剖析、数据剖析等,只是上面几个最广为人知而已。
就常见的互联网产品而言,它的瓶颈并非在后端业务的逻辑上,而是在 I/O 上,即返回给用户看的数据的读入与输出。相对付运用程序而言,读入指的是从数据库里获取数据,而输出指的是将这些数据经由一定的处理输出到用户的浏览器,那么这便是 I/O 密集型。

而 CPU 密集型是指做频繁打算任务的运用,Node.js 在这方面确实是短板。
3. 运用做事的过程如图所示,用户通过浏览器发送要求,由网卡吸收TCP 连接,关照内核,内核再去调用相对应的做事端程序。
Request 要求过程
Response 返回过程
如下图,Web 运用要返回数据,首先要获取数据,通过内核调用磁盘的驱动程序,把数据读入缓存,这样就可以在 Web 运用程序中获取数据并进行数据处理,终极调用内核,将数据通过网卡发送给客户端。
4. 运用的瓶颈
常日 I/O 密集型的瓶颈会在磁盘的读写上,以是在购买云做事器的时候可以购买 SSD 的磁盘来提升性能,一样平常数据库软件的数据都是存储在文件上面的。首先考虑添加内存型缓存来办理这个瓶颈,缓存常常访问的数据,看能否办理当前场景的问题,比如利用 Redis。其次才考虑搭建或扩充数据库集群来提高并发。
而 CPU 密集型的运用瓶颈则在 CPU 上,只能增加 CPU 处理核心来办理瓶颈。
5. 分布式运用大型的普通运用与分布式运用实在是不同的观点。读者可以把分布式运用大略地理解为一个团队,每一个成员都是一个节点,一个大的项目要让成员互助完成,那么成员与成员之间就存在一些沟通本钱,乃至有的成员与成员之间勾心斗角,说话两面三刀、推脱任务,也有可能成员生病在家休养,无法事情,等等。在面对这些问题的时候,Node.js 的上风并不能很好地显现出来(并非不可以做,只是没有完善的根本举动步伐)。
分布式的真正定义是,在多台不同的做事器中支配不同的做事模块,以进程为基本单位,派发到做事器上,通过远程调用(RPC)通信并协同事情,终极对外供应做事。
比较较 Node.js目前的分布式根本举动步伐,Go 措辞的根本举动步伐则完善多了,特殊是在 Docker 这个项目上,充分证明了 Go 措辞的上风,这也是为什么 Node.js 社区“大牛”TJ Holowaychuk 转向 Go 措辞,由于他要开拓分布式运用。
实在没必要过分地关心分布式的问题,毕竟 JavaScript 最初只是一个运行在浏览器真个脚本措辞而已,JavaScript 不是万能的,为什么一定要把它用在操作系统级别的开拓上呢?探求一个更得当的措辞不是更好吗?就像此刻我们选择 JavaScript 构建 Web 运用一样。
6. 多进程的 Node.js理解了以上的一些知识点,现在读者该当知道,Node.js 跟大型运用关系不大。大多数学习 Node.js 的开拓者是前端开拓者,以是对后真个根本知识并不理解,在网络上征采一些资料的时候创造 Node.js 只能利用单核,而又听说 TJ Holowaychuk 转向 Go 的阵营,以是有的开拓者就产生了Node.js不适宜开拓大型运用的疑问。
Node.js 只能利用单核的问题已经被办理了,后面利用的 Egg.js 框架中的 Egg-Cluster 模块就利用多进程非常好地办理了这个问题。
本文选自《Node.js实战:利用Egg.js+Vue.js+Docker构建渐进式、可持续集成与交付运用》,作者yugo,电子工业出版社9月出版。理解详情请点击扩展链接。