Node.js五大应用性能技巧小结(必须收藏)


Posted in Javascript onAugust 09, 2017

本文介绍了Node.js五大应用性能技巧,分享给大家,具体如下:

一、实现一个反向代理服务器

相比大多数应用服务器,Node.js 可以很轻松的处理大量的网络流量,但这并不是 Node.js 的设计初衷。

如果你有一个高流量的站点,提高性能的第一步是在你的 Node.js 前面放一个反向代理服务器。这可以保护你的 Node.js 服务器免于直接暴露在网络中,而且可以允许你灵活的使用多个应用服务器做负载均衡和静态文件缓存。

Node.js五大应用性能技巧小结(必须收藏)

使用 NGINX 在一个已经存在的服务器前做反向代理,作为 NGINX 的一个核心应用,已经被用于全世界成千上万的站点中。

下面是使用 NGINX 作为反向代理服务器的优点:

简化了权限处理和端口分配

更高效的处理静态资源

更好的处理 Node.js 崩溃情况

缓解 DoS 攻击的影响

注:这篇文章解释如何在 Ubuntu 14.04 或者 CentOS 环境中使用 NGINX 做反向代理服务器,而且使用 NGINX 在 Node.js 前做反向代理服务器是有效的。

二、缓存静态文件

随着流量的增长,以 Node 为基础的服务器开始显现压力。这时,你可能想做两件事:

使用更多的 Node.js 服务器。

在多个服务器间做负载均衡

这其实很简单,NGINX 一开始就是作为反向代理服务器来实现的,这使其很容易做缓存和负载均衡等。

Modulus 的网站有一篇有用的文章,介绍了使用 NGINX 做 Node.js 反向代理服务器的性能提升。只使用 Node.js 时,作者的网站每秒能处理 900 个请求。 使用 NGINX 作为反向代理服务器来处理静态文件后,该网站每秒可处理超过 1600 个请求,接近两倍的性能提升。

下面是该网站做上述性能提升的配置代码:

nginx

server {

listen 80;

server_name static-test-47242.onmodulus.net;

root /mnt/app;

index index.html index.htm;

location /static/ {

try_files $uri $uri/ =404;

}

location /api/ {

proxy_pass http://node-test-45750.onmodulus.net;

}

}

三、实现 Node.js 负载均衡

最终目标— Node.js 运行多个应用服务器,并在这些服务器之间均衡负载。

Node.js 实现负载均衡是比较困难的,因为 Node.js 允许浏览器端 JavaScript 和 服务器端 Node.js 通过 json 做数据交互,这就意味着同一个客户端可以反复的访问一个特定的应用服务器,而且多个应用服务器之间共享 session也是比较困难的。

NGINX 实现无状态负载均衡的方式:

Round Robin. 新的请求去列表中的下一个服务器

Least Connections. 新的请求去连接数最少的服务器

IP Hash. 根据客户端 IP 的 hash 值指定服务器

只有 IP Hash 这一种能够可靠的把客户端请求代理到同一台服务器的方式才能使 Node.js 应用服务器受益。

四、代理 WebSocket 连接

所有版本的 HTTP 都是为客户端主动请求服务器来设计的,而 WebSocket 可以实现服务器主动向客户端的消息推送。

WebSocket 协议使客户端和服务器端的稳定交互更加简单,同时也提供更小的交互延迟。当你需要一个全双工的通讯,即客户端和服务器都可以在需要时主动发起消息请求,那么使用 WebSocket 就对了。

WebSocket 协议有健全的 JavaScript 接口,因此也原生适合用 Node.js 作为应用服务器。当连接数上升,使用 NGINX 在客户端和 Node.js 服务器端做代理来缓存静态文件和负载均衡就变得非常有意义。

五、实现 SSL/TLS 和 HTTP/2

越来越多的网站使用 SSL/TLS 来保证信息交互的安全性,你也可以考虑是否要把它加入到你的网站中,但如果你决定要做,那么 NGINX 有两种方式来支持它:

你可以使用 NGINX 做 SSL/TLS 反向代理,Node.js 服务器使用解密后的请求然后返回未加密的内容给 NGINX。

使用 HTTP/2 可以抵消 SSL/TLS 带来的性能开销,NGINX 支持 HTTP/2, 所以你可以同时使用 HTTP/2 和 SSL 代理请求,而你的 Node.js 服务器不需要做任何更改。

在实现阶段你需要更新 Node.js 配置文件中的 URL, 在你的 NGINX 配置文件中使用 SPDY 或者 HTTP/2 优化连接。添加 HTTP/2 支持意味着支持 HTTP/2 的浏览器可以使用新的协议和你的应用交互,而老的浏览器继续使用 HTTP/1.x。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
Vue.js watch监视属性知识点总结
Nov 11 Javascript
JavaScript监听触摸事件代码实例
Dec 30 Javascript
JS实现简单移动端鼠标拖拽
Jul 23 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 #Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 #Javascript
vue.js框架实现表单排序和分页效果
Aug 09 #Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 #Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 #jQuery
vue 打包后的文件部署到express服务器上的方法
Aug 09 #Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 #Javascript
You might like
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php学习之流程控制实现代码
2011/06/09 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python安装twisted的问题解析
2018/08/21 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
MYSQL支持事务吗
2013/08/09 面试题
班组长安全生产职责
2013/12/16 职场文书
工会换届选举方案
2014/05/21 职场文书
重阳节标语大全
2014/10/07 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
中班上学期个人总结
2015/02/12 职场文书
大学副班长竞选稿
2015/11/21 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers