五个最佳案例带你解读Node.js的先后之道

Node.js 是什么?
Node.js采用C++语言编写而成,浏览器内核V8作为执行引擎;Node不是JS应用、而是一个Javascript的运行环境。Node保留了前端浏览器js的接口,没有改写语言自己的任何特性,依旧基于做用域和原型链。前端

Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不只带来了巨大的性能提高,还减小了多线程程序设计的复杂性,进而提升了开发效率。java

Node.js的特色
一、一个Javascript运行环境
二、依赖于Chrome V8引擎进行代码解释
三、事件驱动
四、非阻塞I/O
五、轻量、可伸缩,适于实时数据交互应用
六、单进程,单线程node

Node.js能作什么?
一、具备复杂逻辑的网站
二、基于社交网络的大规模 Web 应用;
三、Web Socket 服务器(页游,web IM);
四、TCP/UDP 套接字应用程序;
五、命令行工具;
六、交互式终端程序;
七、带有图形用户界面的本地应用程序;
八、单元测试工具;
九、客户端 JavaScript 编译器web

Node.js架构
图片描述redis

事件循环
图片描述数据库

NodeJs执行模型: 单线程Event Loop
当应用请求发生时,首先进入V8引擎,而后进入到事件队列,能够理解为他们在不断地在循环,看是否有任务,产生任务就去执行。上图是单线程模型。express

NPM
后端在开发其余语言时,都有一些模块的概念或者第三方提供了很实用的小模块。一样,Node.js当时出来的时候也有这样一个仓库。这个仓库就是专门用来管理中国开发者的一个贡献的模块,并且发展很是的快。一样,前端有一些脚手件,在服务器这边运行的有debug,express,express-session,thrift,依托这个插件作thrift相关的事情,images其余的一些你想的到的插件,都是能够从它找到。后端

架构体系
图片描述设计模式

上图是个推部分WEB平台的架构体系,个推有一套云组进资源,经过Nginx做为一个分发,Node能够有多个节点,经过session进入。每个Node都有模式,相信你们在部署的时候确定不可能部署一个节点,部署一个节点,不然这个节点挂了就是挂了。
Thrift使用
一、定义接口
图片描述浏览器

二、编译,生成对应的包,并上传到相应的库中
三、在Node中使用,以下:
图片描述

注意:这里有个坑
thrift 中有个基本类型叫作 double (64位浮点数)。当定义成这个类型时,数据从 java 过来到 Node 会变成全是0。

解决方案
定义成 string 类型,以后特事特办,如必要则在 Node处再转成浮点数,或者直接由页面端处理。

IP负载(IP Load Balance)

负载均衡
分摊到多个操做单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工做任务。
原生中其并无负载均衡的机制,但咱们能够采用动态代理的设计模式,基于thrift client,利用JS的原型链来实现。
均衡的方式有不少种,咱们使用轮询机制来实现访问多个Java节点。

session管理
Node自己并没有session机制,咱们可使用express-session包来实现,同时经过redis来存储session。

链接池
传统读取数据库方式:
图片描述

链接池须要作什么?
一、链接预热 (启动时自动打开n个链接以供使用)
二、使用 例如 轮转法 均匀分发 链接请求
三、当池中的链接即将耗尽得时候动态产生新的链接
四、当池中的链接一段时间没有被调用的时候,自动释放链接
五、自动丢弃 已经坏掉的 链接
六、系统关闭的时自动释放全部链接
基于此,咱们也能够借助几个插件包(如generic-pool(node-pool)、node-thrift-pool,固然,若是你直接Node链接的DB,基本上那个包里面也会支持链接池)在Node使用链接池。

使用示例
图片描述

利用Node能够作的事情

一、作一些灰色地带的事情
利用Node能够作一些灰色地带的事情,由于它拥有前端的优势,能够异步,发起异步请求。给开发者带来很大的好处。不过,你须要管理好你的类型。若是说类型本身若是没有管理好就是会出现一些问题。同时它也能够作后端的一些事情。好比说链接池等等。

二、模块更加分明

三、可前可后便于分工
从浏览器过来的数据,经过Node把这一层数据转化成java须要的一种数据结构,就可使得分工更加明晰。

四、共用表单输入验证
若是你在写系统的时候,出于安全考虑,不管浏览器这边作了多少验证,你都要作输入验证。传统模式下是须要java同窗写一份,前端同窗写一份。由于Node跟java都是部署在服务器集群或者一个区域,你能够相信这两边之间一个数据。来自浏览器的验证,就能够共用表单输入验证,达到节省成本的目的。

以上内容来自个推web服务首席架构师姜季廷在3月12日SegmentFault D-Day 北京:后端的演讲整理而成。

相关文章
相关标签/搜索