介绍
缩放是开发的重要方面,特别是Web开发,因为当Web应用程序增长,其用户群增长以及收到的请求和流量也增加了。因此,必须确保您的Web应用程序能够处理增加的负载而不会对响应时间产生负面影响,从而影响用户体验。本文将提供开发人员可以采取的步骤和策略的介绍,以扩展Nodejs应用程序,以满足用户群增加,请求或流量的需求,以及使用其他技术,语言和框架构建的扩展应用程序。
垂直缩放
这被称为扩展,是实现缩放方法的最简单和最容易的方法之一,仅涉及增加服务器可用的资源或增加服务器的硬件。这些资源可以包括CPU,内存和存储。这很容易做到,因为大多数云提供商允许用户通过单击一个按钮垂直缩放服务器。重要的是要注意,可以在单个服务器上增加资源的限制和硬件限制。
水平缩放
这被称为扩展,并涉及增加负责托管应用程序的服务器数量。然后将用户的请求分配到多个服务器上,以确保没有单个服务器不知所措。它比垂直缩放更复杂,因为此方法涉及使用负载平衡器来分配负载。
负载均衡
此方法通常与水平缩放相关联,涉及在一组服务器之间设置负载或传入请求的服务器。有几种方法或算法负载平衡器用于分发负载。
-
round Robin:这是最简单,最常用的方法。这里的请求以周期性或旋转方式分布在各种服务器上。
-
最小连接:在此方法中,请求将路由到服务器,并具有最少的活动连接。
-
加权循环robin:在这种方法中,请求根据权重将请求路由到服务器。权重较高的服务器收到的请求比其他请求更多。当一台服务器具有比其他服务器更多的资源时,这一点尤其重要。
nginx是一种流行的Web服务器,尽管它具有许多其他应用程序,但通常用于负载平衡。
数据库缓存
数据库缓存是一种用于减少发送到数据库的查询数量,从而提高性能和可伸缩性的方法。它用于存储在临时内存中经常访问的。这减少了服务器对数据库的查询数量,即服务器查询数据库缓存。
redis和memcached是nodejs流行的缓存解决方案。
数据库查询优化
优化Web服务器对数据库的查询也是提高应用程序扩展能力的好方法。数据库查询可以通过多种方式进行优化:
-
减少每个请求的数据库查询数量。
-
数据索引:这更适合Web应用程序,在此读取查询大大超过写入查询时,即使数据库索引提高了读取查询,它也会增加写入查询所需的时间。
-
使用数据库读取复制品:此处添加了其他数据库。这些数据库包含主数据库的快照,并且读取请求分布在各种读取副本之间。主要数据库通常是唯一接收书面请求以保持一致性的数据库。
-
适当使用补丁程序并提出请求:许多开发人员认为,补丁程序和PUT请求都是相同的。但是,这不是真的。虽然PUT请求用于修改整个资源,但补丁请求用于部分修改资源,因此补丁请求的有效载荷较小。
-
降低API有效载荷:大多数API有效载荷都很小,但是,有时用户需要选择符合某些标准的所有资源,这些资源可能会导致数千至数百万的响应。在这种情况下,压缩或减少有效载荷的大小通常更有性能。
采用微服务架构
使用微服务架构涉及将应用程序分解为可以独立处理的较小且更易于管理的组件或服务。这些服务通常集中在特定功能上,例如在社交媒体平台中,可以有个人服务,用于身份验证,用户配置文件,发布,消息传递,处理用户供稿,评论等。这可以确保即使其中一项服务失败或遇到停机时间,其余服务也可以很好地工作。它还允许以不影响其他服务的方式部署单个服务,从而提高整体可扩展性。重要的是要注意,此方法还增加了整体管理应用程序的复杂性。
异步编程
nodejs使用事件驱动的非阻滞I/O模型,非常适合构建可扩展的异步应用程序。使用诸如回调,承诺和异步/等待的技术,可以使开发人员开发异步代码,而在Nodejs中进行非阻滞。
无状态身份验证
无状态身份验证,也称为基于令牌的身份验证是一种身份验证方法,该方法无法存储用户会话的详细信息。服务器为客户端生成了唯一的令牌。客户随后使用令牌来验证自身,服务器在每个请求时验证令牌。
此过程减少了服务器上的工作负载,因为服务器不需要存储会话数据,这可以导致内存增加和处理开销。
结论
有多种缩放数据库的方法,没有一种方法比另一种方法更好,并且通常需要将其中一种超过一种方法混合来正确缩放应用程序。开发人员确定最佳方法并适当地实施它们是开发人员的工作。