推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Node.js 应用性能提升的 5 个技巧

   2023-08-08 网络整理佚名870
核心提示:提供web服务器和应用服务器的功能,被认为是各种以微服务为基础的开发和交付的关键工具。如果你有一个大流量网站,提高应用程序性能的第一步是在你的服务器前放一个反向代理服务器。针对,一个应用程序容器平台,有一篇非常有用的关于利用NGINX增压应用程序性能的文章。缓存NGINX服务器上的静态文件可以显著减轻应用程序服务器的负载,让它能够达到更佳性能。应用高性能的真正关键运行多个应用程序服务器和平衡负载。

Node.js 是世界领先的工具,用于使用世界上最流行的编程语言创建服务器应用程序。 提供Web服务器和应用程序服务器的功能被认为是各种基于微服务的开发和交付的关键工具。 文章来自菜鸟学院——

可以替换或增强 Java 和 .NET 以进行后端应用程序开发。 文章来自菜鸟学院——

是单线程并使用非阻塞 I/O,使其能够扩展并支持数万个并行操作。 它与 NGINX 共享这些架构特征,在解决 C10K 问题(支持超过 10,000 个并发连接)的同时,NGINX 还可以解决并行操作问题。 它以其高性能和高开发效率而闻名于世。 文章来自菜鸟学院——

那么哪里可能出错呢? 文章来自菜鸟学院——

存在薄弱环节和漏洞,可能导致基于 Node 的系统性能不佳甚至崩溃。 尤其是当基于Web的应用遇到流量快速增长时,问题会更加频繁地出现。 文章来自菜鸟学院——

此外,它是一个强大的工具,用于创建和运行生成核心可变 Web 内容的逻辑。 但它在提供静态内容(例如图像和文件)以及平衡多个服务器之间的负载方面并不那么强大。 文章来自菜鸟学院——

为了最有效地使用它,您需要缓存静态内容,代理和负载平衡多个应用程序服务器,并管理客户端和帮助程序(例如运行服务器)之间的端口争用。 NGINX 可以用来解决这些问题,使其成为性能优化的绝佳工具。 文章来自菜鸟学院——

使用这些技巧来提高应用程序性能:来自菜鸟学院的文章 - 实施反向代理服务器缓存静态文件多服务器负载平衡代理连接实施 SSL/TLS 和 HTTP/2

注意:应用程序性能的快速修复方法是修改配置以充分利用现代多核服务器。 您还可以阅读另一篇有关如何生成单独的子进程的文章。 文章来自菜鸟学院——

1.实现反向代理服务器文章来自菜鸟学院-

当我们在周围时,当我们看到应用程序服务器直接暴露于传入流量(用于高性能网站的核心)时,我们总是有点担心。 这也包括许多基于网站的网站。 文章来自菜鸟学院——

专为可扩展性而设计,它比大多数应用服务器更容易扩展,并且其Web服务器端可以处理大量的访问流量。 但网络服务并不是存在的理由——它们不是为此目的而构建的。 文章来自菜鸟学院——

如果您有一个高流量的网站,提高应用程序性能的第一步是在您的服务器前面放置一个反向代理服务器。 这可以保护服务器免于直接暴露于外部流量,还使您可以灵活地使用多个应用程序服务器、负载平衡服务器和缓存内容。 文章来自菜鸟学院——

将 NGINX 作为反向代理服务器置于现有服务器设置之前是 NGINX 的核心用例,并且已被全球数千万个网站实施。 文章来自菜鸟学院——

使用 NGINX 作为反向代理服务器还有一些具体的优点,包括:

注意:这些教程描述了如何在14.04或环境中使用NGINX作为反向代理服务器,并且可以提供NGINX放置之前的整体情况的概述。 文章来自菜鸟学院——

2.缓存静态文件文章来自菜鸟学院-

随着基于 Web 的网站使用量的增长,服务器的压力开始增加。 此时,您必须做两件事: 使添加应用程序服务器和负载平衡变得容易。

这实际上很容易做到。 从一开始就将 NGINX 实现为反向代理服务器,如第一个技巧中所述。 这样可以轻松实现缓存、负载均衡(如果你有多台服务器)等。文章来自菜鸟学院-

对于应用程序容器平台,有一篇关于使用 NGINX 增强应用程序性能的非常有用的文章。 由于我们自己完成所有工作,因此我们的网站平均每秒只能处理接近 900 个请求。 使用 NGINX 作为反向代理服务器来提供静态内容,站点每秒可以处理超过 1,600 个请求,性能提高了近 2 倍。 文章来自菜鸟学院——

改进的性能使您有时间采取额外的步骤来适应流量的增加,例如检查(或改进)站点设计、优化代码以及部署更多应用程序服务器。 文章来自菜鸟学院——

以下配置代码适用于运行的网站:文章来自菜鸟学院-

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 
 }
}

例如,在 Nginx 位置块中,您可能不希望缓存某些内容。 例如,您通常不想缓存博客平台的管理界面。 以下为禁用【或免除】Ghost管理界面缓存的配置代码:文章来自菜鸟学院-

location ~ ^/(?:ghost|signout) { 
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Host $http_host;
 proxy_pass http://ghost_upstream;
 add_header Cache-Control "no-cache, private, no-store,
 must-revalidate, max-stale=0, post-check=0, pre-check=0";
 }

在NGINX服务器上缓存静态文件可以显着减轻应用服务器的负载,使其获得更好的性能。 文章来自菜鸟学院——

这次给大家推荐一款免费的学习裙,里面总结了移动应用网站开发、css、html、、vue节点以及面试资源。 文章来自菜鸟学院——

欢迎对网页开发技术感兴趣的同学加入纽扣裙:无论你是小白还是大牛,我都欢迎你。 还有大牛整理的一套高效学习路线和教程免费分享给大家,视频每天更新素材。 文章来自菜鸟学院——

3.实现负载均衡菜鸟学院文章-

高应用程序性能的真正关键是运行多个应用程序服务器并平衡负载。 文章来自菜鸟学院——

负载平衡可能特别棘手,因为允许在 Web 浏览器上运行的代码和在应用程序服务器上运行的代码进行高层交互,同时使用 JSON 对象作为数据交换的媒介。 这意味着给定的客户端会话将保留在特定的应用程序服务器上,而会话持久性本质上很难通过多个应用程序服务器来实现。 文章来自菜鸟学院——

Web 和 Web 的主要优点之一是它高度无边界,其中包括通过任意服务器访问请求的文件来满足客户端请求。 颠覆无状态性,并且在有状态环境中效果最佳 - 在有状态环境中,同一服务器始终响应来自任何给定客户端的请求。 文章来自菜鸟学院——

NGINX Plus 可以最好地满足这种需求,而不是开源 NGINX 软件。 NGINX 的两个版本非常相似,但一个主要区别是它们对负载平衡算法的支持。 文章来自菜鸟学院——

NGINX支持无状态负载均衡方式:文章来自菜鸟学院-

IP 哈希只是这些方法中的一种,通过可靠地将指定的客户端请求发送到同一服务器来使应用程序受益。 然而,IP Hash很容易导致一台服务器接收到不成比例的请求,而牺牲其他服务器的利益,就像本博客中介绍的负载均衡技术一样。 此方法支持的有状态性是以跨服务器资源的请求分布可能不理想为代价的。 文章来自菜鸟学院——

与 NGINX 不同,NGINX Plus 支持会话持久性。 使用会话持久性时,同一服务器还可以可靠地接收来自给定客户端的所有请求。 NGINX Plus 的优势——客户端和服务器之间的有状态通信,以及 NGINX Plus 的优势——高级负载均衡能力,都得到了最大化。 文章来自菜鸟学院——

因此,您可以使用 NGINX 或 NGINX Plus 来支持跨多个服务器的负载平衡。 只有 NGINX 才能让您最大限度地提高负载平衡性能和友好的状态性。 NGINX 内置的应用程序健康检查和监控功能也很有用。 文章来自菜鸟学院——

NGINX Plus 还支持会话持久性,从而允许应用程序服务器在收到停止服务请求后优雅地完成当前会话。 文章来自菜鸟学院——

4.菜鸟学院代理连接文章-

HTTP,在所有版本中,都是为“拉”通信而设计的——客户端从服务器请求文件。 是一个允许“推”和“推/拉”通信的工具,即服务器可以主动发送客户端未请求的文件。 文章来自菜鸟学院——

协议可以更轻松地支持客户端和服务器之间更强大的交互,同时减少传输的数据量并最大限度地减少延迟。 当需要时,可以实现全双工传输连接,这意味着客户端和服务器都可以根据需要发起和接收请求。 文章来自菜鸟学院——

该协议具有强大的接口,因此非常适合作为应用服务器——而且,对于交易量较低的Web应用程序,它也可以用作Web服务器。 当交易量增大时,需要使用NGINX或NGINX Plus在客户端和Web服务器之间、多个应用服务器之间插入NGINX。 文章来自菜鸟学院——

经常与 , 一起使用,是应用程序中流行的 API。 这可能会导致端口 80(对于 HTTP)或端口 443(对于 HTTPS)变得相当拥塞,解决方案是代理服务器。 你可以使用NGINX作为代理服务器,如前所述,还可以获得其他功能,例如静态文件缓存、负载均衡等。文章来自菜鸟学院-

下面是作为 .js 节点应用程序文件侦听端口 5000 的代码。 它充当代理服务器(而不是 Web 服务器)并将请求路由到正确的端口:来自菜鸟学院的文章 -

var io = require('').listen(5000);
('connection', function (socket) {
 ('set nickname', function (name) {
 ('nickname', name, function () {
 ('ready');
 });
 });
 ('msg', function () {
 ('nickname', function (err, name) {
 ('Chat message by ', name);
 });
 });
});
var socket = io(); // 这是你的初始化代码。

有关完整的介绍,包括 NGINX 配置,请参阅此博客文章。 请参阅此博客文章,了解此类类型的更深入的 Web 应用程序潜在架构和基础设施问题。 文章来自菜鸟学院——

5.实现SSL/TLS和HTTP/2文章来自菜鸟学院-

越来越多的网站使用 SSL/TLS 来保护网站上的所有用户交互。 您可以决定是否以及何时进行此操作,但如果您选择这样做,NGINX 有两种方式支持此转换:来自菜鸟学院的文章 - 如果您设置了 NGINX,您可以终止 NGINX 中客户端的 SSL/TLS 连接作为反向代理。 服务器使用 Nginx 反向代理服务器来回发送和接收未加密的请求和内容。 早期迹象表明,使用 HTTP/2(新 HTTP 协议的新版本)可以在很大程度上或完全抵消使用 SSL/TLS 带来的性能损失。 NGINX 支持 HTTP/2,您可以终止 HTTP/2 和 SSL,而无需对应用程序服务器进行任何更改。

在执行这些实施步骤时,您还需要更新配置文件中的 URL,在 NGINX 配置中建立并完成安全连接,并在必要时使用 SPDY 或 HTTP/2。 添加 HTTP/2 支持意味着浏览器版本使用支持 HTTP/2 的新协议与应用程序通信:旧版浏览器使用 HTTP/。 文章来自菜鸟学院——

下面的配置代码适用于使用 SPDY 的 Ghost 博客。 它包括一些高级功能,例如 OCSP。 使用 NGINX 进行 SSL 终止,包括 OCSP 选项,请参阅此处。 有关同一主题的概述,请参阅此处。 文章来自菜鸟学院——

您需要做的细微更改是配置应用程序从 SPDY 升级到 HTTP/2,无论是现在还是当 SPDY 支持在 2016 年初消失时。文章来自菜鸟学院 -

server {
 server_name domain.com;
 listen 443 ssl spdy;
 spdy_headers_comp 6;
 spdy_keepalive_timeout 300;
 keepalive_timeout 300;
 ssl_certificate_key /etc/nginx/ssl/domain.key;
 ssl_certificate /etc/nginx/ssl/domain.crt;
 ssl_session_cache shared:SSL:10m; 
 ssl_session_timeout 24h; 
 ssl_buffer_size 1400; 
 ssl_stapling on;
 ssl_stapling_verify on;
 ssl_trusted_certificate /etc/nginx/ssl/trust.crt;
 resolver 8.8.8.8 8.8.4.4 valid=300s;
 add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
 add_header X-Cache $upstream_cache_status;
 location / {
 proxy_cache STATIC;
 proxy_cache_valid 200 30m;
 proxy_cache_valid 404 1m;
 proxy_pass http://ghost_upstream;
 proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
 proxy_ignore_headers Set-cookie;
 proxy_hide_header Set-cookie;
 proxy_hide_header X-powered-by;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto https;
 proxy_set_header Host $http_host;
 expires 10m;
 }
 location /content/images {
 alias /path/to/ghost/content/images;
 access_log off;
 expires max;
 }
 location /assets {
 alias /path/to/ghost/themes/uno-master/assets;
 access_log off;
 expires max;
 }
 location /public {
 alias /path/to/ghost/built/public;
 access_log off;
 expires max;
 }
 location /ghost/scripts {
 alias /path/to/ghost/core/built/scripts;
 access_log off;
 expires max;
 }
 location ~ ^/(?:ghost|signout) { 
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Host $http_host;
 proxy_pass http://ghost_upstream;
 add_header Cache-Control "no-cache, private, no-store,
 must-revalidate, max-stale=0, post-check=0, pre-check=0";
 proxy_set_header X-Forwarded-Proto https;
 }
}

菜鸟学院总结文章——

本文介绍了可以在应用程序中实现的一些最重要的性能改进。 它还专注于将 NGINX 添加到应用程序中——通过使用 NGINX 作为反向代理服务器、缓存静态文件、负载平衡、代理连接以及终止 SSL/TLS 和 HTTP/2 协议。 文章来自菜鸟学院——

NGINX 和 NGINX 的组合被广泛认为是一种创建新的基于微服务的应用程序或使用 Java 或 .NET 为现有的基于 SOA 的应用程序添加灵活性和性能的方法。 本文可以帮助您优化您的应用程序,使与 NGINX 的合作关系为您服务。 文章来自菜鸟学院——

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON