前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >译文:5个增强Node.js应用程序增强功能

译文:5个增强Node.js应用程序增强功能

作者头像
程序员法医
发布2022-12-20 21:16:22
1.8K0
发布2022-12-20 21:16:22
举报
文章被收录于专栏:vue全家桶vue全家桶

前端猎手

转载自Duing(ID:duyi-duing)

原文链接:https://dev.to/chegerose/5-enhancements-that-will-boost-your-nodejs-app-3pj5

作者:Rose Chege

如有翻译不准,请多指正。

在你的应用程序工作流程中,需要许多方面来确保编写的代码以最佳效率执行。思考一下,假如你已经构建了一个Node.js应用程序。在生产部署时,你会意识到你的应用程序越来越慢。

在这一点上,你可能首先想到的问题是,你能做些什么来加快速度并更快地运行你的Node.js应用程序?在本文中,我们将讨论大规模扩展和加快Node.js应用程序所需的技巧和工具。

概述

Node.js是JavaScript的开源跨平台运行时环境。它用于运行服务器端应用程序。Node.js用于构建需要数据密集型模型的所有级别的应用程序。

Node.js在服务器端Web开发领域占主导地位。它是最受欢迎的Web框架和技术之一。这项StackOverflow调查透明地介绍了Node.js如何与其他服务器端技术竞争,如Django、Laravel、Rubyon rails和Flask。

Node.js广受欢迎程度背后是有一定道理的,包括:

•Node.js非常容易理解。Node.js是用JavaScript bare bones构建的,这是常用的编程语言。由于JavaScript的流行,使用Node.js启动和运行变得相对容易。

•Node.js拥有一个巨大的生态系统,节点包管理器(NPM)。NPM是一个Node.js注册表,允许使用和访问覆盖整个Node.js Web开发管道的开源库。这些库允许你安装可以随时使用的代码。这节省了大量开发时间,同时仍然提供轻便、可扩展和高速的应用程序。

•Node.js非常轻巧快捷,允许开发人员创建高性能应用程序。它基于高性能V8引擎来编译和执行JavaScript代码。

作为开发人员,你可能希望完全利用Node.js能力来构建高度可扩展的应用程序。尽管如此,你也需要不同的工具来确保Node.js应用程序运行得更快。让我们讨论一下开发人员可用于优化和提升Node.js提供的已经快速架构的技巧和工具。

如何提升Node.js应用程序?

1.使用消息代理

消息代理是在应用程序的两个或多个应用程序/子集之间提供稳定、可靠的通信的软件。基本上,消息代理运行一种架构技术,允许你在确保异步通信的同时拆分应用程序。

在这种情况下,消息是从一个应用程序处理到另一个应用程序的信息。代理充当应用程序之间传输实际数据有效载荷的媒介。消息代理使用队列系统进行保留。它使用收到的订单管理队列,并将其交付给实际方。

以下是消息代理工作原理的一般架构:

现在我们已经知道什么是消息代理。它如何增强应用程序的可扩展性?为了回答这个问题,让我们了解消息代理提供的更高层次的优势:

•简化解耦-消息代理消除了应用程序之间的依赖关系。消息代理充当客户端和服务器之间的中间人。将数据发送给代理是服务器的工作。服务器不必与其消息收件人直接联系。当客户端需要数据时,它随时从代理获取消息。使用发现方法来识别服务器实例的位置并不重要。消息代理负责处理这些情况。

•提高架构可靠性-无论客户端是否处于活动状态,服务器都可以发送消息,反之亦然。唯一必须运行的组件是消息代理。当服务器发送消息时,其工作就完成了。现在,代理的工作是将消息传递给适当的收件人。

•异步处理-假设你正在运行REST架构运行Node.js完整API。服务器和客户端紧密结合在一起,以发出请求和响应以及交换数据。两者直接使用基于HTTP协议的指定端点进行通信。这里发生的事情是,如果客户端发送请求,它希望服务器立即做出响应。REST通信是同步设计的。它适用于必须返回响应的预定义请求。如果响应失败,可能会发生不良用户体验,例如超时错误。另一方面,消息代理是异步的。没有人需要等待。在此类架构中永远不会发生超时错误。

这如何使Node.js应用程序受益?

•改进的系统性能-消息代理使用消息队列进行异步通信。高需求流程可以隔离为独立流程。这确保了数据传输得到优化,因为在等待另一个组件时,系统组件永远不会被保留。这将有助于加快您的应用程序性能并增强用户体验。

•可扩展性-服务器和客户端都可以根据数据需求进行扩展和收缩。即使需求达到顶峰,组件也可以继续向队列添加条目,而不必担心系统崩溃。同样,可以根据传入的数据扩大客户端和分配工作负载。

2.使用gRPC构建Node.js

gRPC是一个开源的远程过程调用(RPC)框架,用于构建可扩展的快速通信微服务。它帮助你在服务之间创建高性能的通信协议。RPC框架使用客户端直接调用服务器上的函数。简而言之,RPC是一种协议,允许程序执行位于另一台计算机上的另一个程序的过程,而无需显式编码网络交互的细节。它由底层框架自动处理。

是什么让gRPC框架与众不同?

•它使用HTTP/2协议。REST等架构使用传统的HTPP1.1作为传输协议。该协议基于使用通用HTTP方法的请求响应模型,如GET、POST、PUT和DELETE。如果许多客户提交请求,他们每次都会被接受一个。HTTP/2协议支持双向通信模型以及请求响应模型。可以同时满足多个请求和响应。这在服务器和客户端之间造成了松散的耦合,允许您构建支持低延迟流的快速高效的应用程序。

•它使用协议缓冲区(protobuf)作为消息格式。使用SOAP协议交换数据时,信息交换通过XML进行。使用REST时,数据使用JSON格式交换。在gRPC中,数据通过协议缓冲区交换。与XML和JSON相比,协议缓冲区轻巧、更快、高效。它的有效载荷更少。在引擎盖下,它执行结构化数据的序列化。protobuf编译器将数据结构转换为protobuf二进制格式,用于描述客户端和服务器之间的通信格式。

•语言不可知论者-大多数现代语言和框架主要支持gRPC,如Node.js、Python、GoJava、PHP和C#。客户端和服务器可以使用不同的语言/框架构建。它比传统的API更灵活,因为客户端可以使用任何功能,不仅仅是典型的GET、POST和DELETE方法。

使用gRPC运行Node.js如何使你的应用程序受益

•更快的通信-gRPC使用HTTP/2。这最大限度地减少了延迟和网络带宽的使用,以确保更流畅的用户体验。同时,它是API驱动的,在界面设计方面为你提供灵活性。

•提高应用程序性能-REST使用同步调用。这确保了服务器在执行之前返回了响应。然而,gRPC异步查询会立即返回,响应作为独立任务处理。

•轻量级消息-与JSON消息相比,协议缓冲区被认为更小,差异高达30%

gRPC和MesageBrokers帮助你处理和管理应用程序消息。检查gRPC与MesageBroker相比如何。

3.通过集群优化Node.js

Node.js是单线程的。默认情况下,它只使用一个CPU来执行应用程序。这意味着,如果你的机器上有8个CPU,即使执行CPU密集型操作,也会生成Node.js线程,只能使用一个CPU。这阻碍了应用程序充分利用底层裸金属的全部功率,这可能导致服务器死锁情况。

为了解决这个问题,Node.js使用集群。集群是在计算机上运行的一组节点实例。在这种情况下,Node.js使用主CPU作为其主实例,并使用其他可用CPU作为工作实例。

Node.js集群允许网络化的Node.js应用程序在可用CPU数量上进行扩展。以下是节点聚类的基本示例。

这台电脑有4个处理器。默认情况下,Node.js的单线程性质将只使用一个CPU。然而,我们可以使用引擎盖下的Node.jscluster模块在可用的CPU上生成任务。Node.js可以运行子进程并共享服务器端口,同时仍然能够与父节点进程通信。根据提供的CPU数量,它可以显著提高应用程序的性能、效率和可靠性。

4.负载平衡

让我们假设你有一个网络应用程序,一个特定的在线商店。用户将使用域名访问你的商店。此域将与服务器通信,以便在用户端完成工作。然而,当你访问在线商店的流量很大时,对资源的需求将会增加。

你可能需要设置额外的服务器来分配流量。这种情况将使你拥有多个应用程序的副本。但是,如何指示用户使用来自副本服务器的资源?如果它们都连接到初始服务器,那么你将耗尽资源,留下其他实例服务器未使用。

此时,你需要的是平衡访问所有服务器的流量。做什么是负载平衡,以均匀分配流量。这为你的应用程序提供了最佳性能,并确保没有节点超载。

负载平衡是在给定资源集中分配应用程序任务的过程,以确保整体资源的有效可用性。通过这种方式,你的所有客户端请求都会均匀且平等地分布到管理应用程序的后端节点。

必须为你的Node.js配置负载均衡器,以便根据资源需求扩展部署。在Node.js中部署负载平衡的常用工具之一是NGINX。Nginx是一个开源工具,允许你为客户端流量配置HTTP和HTTPS服务器。

通过扰乱流量,负载均衡器可以防止应用程序故障,并提高性能和可用性。使用负载均衡器构建Node.js分布式系统对你的应用程序有什么好处?

•水平可扩展性-分发您的应用程序实例使其能够管理更广泛的传入请求。

•减少服务器停机时间

•更加具有灵活性

•减少冗余

•提高效率

5.缓存

缓存是临时存储可能重复访问的数据。这种做法使用内存缓冲区来临时保存应用程序查找。

缓存通过确保不是从服务器检索到任何重复性任务,而是从内存缓冲区检索,从而简化了服务交付。这样,如果请求是由客户端提出的,它将首先检查保存在缓存中的任何查找,而不会击中服务器。

当运行从同一请求提供频繁请求资源的服务器时,它会增加客户端的数据延迟。从缓存层提供此类计算允许您以最小的延迟交付数据和响应请求。

首次发送请求和对服务器的调用称为缓存丢失。在将数据返回给用户之前,输出将保存在缓存中。

如果在缓存内存中找到请求的数据,则称为缓存命中。结果将从缓存存储返回,复杂的数据查询不需要再次处理。

重要的是要始终检查缓存命中率,并相应地完善缓存策略。缓存层不是无限的。因此,需要有效的缓存管理。例如:

•在一段时间后使缓存无效。

•移除缓存以确保缓存命中率保持高。

•低于某些使用阈值的缓存无效。

分布式系统需要完成许多API调用才能匹配单个响应有效负载。使用缓存运行此类调用大大降低了数据聚合的成本。运行这样的Node.js任务缓存可以:

•大大缩短数据查询响应时间。

•提高应用程序的可扩展性。

•减少了服务器负载,大大提高了服务器性能。

•缓存可以提高数据库性能。缓存请求不必命中服务器,这意味着数据请求查询不必访问您的数据库层。

Node.js缓存工具包括:

•Redis缓存。Redis使用内存数据库来存储整个数据集,从而降低了查找的额外成本。

•使用缓存反向代理,例如Vanish。Vanish是一个HTTP加速器工具,允许你保存服务器端请求和响应,以减少Node.js服务器的加载时间。

•使用Node.js应用程序服务器HTTP缓存中间件。它允许你添加与Node.jsHTTP连接的缓存中间件,以减少API延迟。

•使用Nginx进行内容缓存。Nginx缓存应用程序服务器的静态和动态内容,以简化客户端交付并减少服务器负载。

为Node.js应用程序供电的其他做法

你可以使用许多实践,并确保Node.js扩展你的申请。其他实践和工具包括:

•练习异步执行。

•记录和监控你的应用程序性能。

•编写轻巧紧凑的代码,并确保你消除代码行和未使用的库组件。

•练习内存优化

•使用SSL/TLS和HTTP/2运行Node.js。

•加强数据处理技术,例如,GraphQL与REST设计。

•利用Web套接字来改善服务器通信。

•使用Node.jsDeflate和Gzip压缩中间件来压缩服务器请求和响应。

结论

构建应用程序是与用户连接的第一步。你的应用程序需要日常维护,以保持这些用户的稳定体验。本指南帮助你了解一些可用于提升Node.js应用程序的常见策略和增强工具。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端猎手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 如何提升Node.js应用程序?
    • 1.使用消息代理
      • 2.使用gRPC构建Node.js
        • 3.通过集群优化Node.js
          • 4.负载平衡
            • 5.缓存
            • 为Node.js应用程序供电的其他做法
            • 结论
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档