未加星标

如何扩展Node.js支持大量用户

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

如何根据用户量逐步扩展Web应用的性能?过早扩展造成的痛苦反而超过其受益,本指南提供如何从简单开始,随着用户量增长进行扩展的方式。

1.本地一个 并发 用户

不需要扩展

2.单个服务器,2-9个 并发 用户

NodeJS是一个 事件驱动 和非阻塞I / O模型。这意味着它不会堵塞某个单一的请求,而是同时处理所有的请求,从数据库或服务的响应数据则放在一个回调函数/promise函数中。Node应用程序在等待数据库或文件系统来响应的大部分时间内,它可以同时处理多个请求。

你的应用目前是单片整体monolith,不需要复杂化,当然每次修改需要重启应用。建议使用亚马逊AWS t2.micro/t2.nano或同等类型:1 CPU/ 1 GB RAM。

3.垂直扩展,10-99并发用户

请求处理可能会开始需要更长的时间,响应开始变得越来越慢。你需要一个更大的盒子!这就是所谓的垂直缩放。纵向扩展意味着需要更多的资源,更高/更快的CPU,内存,硬盘,HDD I/O

如果使用亚马逊,建议升级 t2.medium,2CPU/4 GB RAM.

具有多个处理器内核的额外好处是。我们可以使用Nginx作为负载平衡运行两个Nodejs实例。多个实例意味着你可以实现零停机时间进行应用的部署/更新。您可以升级一个服务器,而另一个则继续正常服务。

4.横向扩展,100-999并发用户

这时瓶颈是I/O,数据库花很长时间响应,需要升级m4.xlarge 或(4 CPU / 16 GB RAM). 4个CPU意味着你有多个数据库或应用的实例,这称为横向扩展。

4个CPU是在一台服务器还是4个单CPU服务器呢?这时前者垂直扩展已经不再经济,还有其他问题:将所有的鸡蛋都放在一个篮子里。如果服务器当机,你就完蛋了!另一方面,水平缩放带给你冗余和故障转移。

这时最好采用横向扩展,瓶颈大部分在数据库:

1.将数据库迁移到不同的服务器上,独立地进行缩放。

2.如果数据库达到访问极限,使用备份,注意使用数据库 缓存

由于Node是非常有效率的,它会花费大部分的时间等待数据库返回数据。因此,主要的限制将取决于网络限制。修改/etc/security/limits.d 和 /etc/sysctl.conf,请求队列最大数量取决于net.core.somaxconn,其默认值是128, 改变到1024,这样就能应付100-999范围的 并发 用户。

5.多服务器,1000以上 并发 用户

基于之前架构提升如下:

a.增加负载平衡,增加应用单元

b.在不同地区使用多可用区

c.将静态文件划分到不同服务器,增加CDN。

6.微服务,10万以上 并发 用户

到目前为止,我们一直在利用垂直和水平缩放,我们已经将Web应用从数据库服务器实例中分离出来,并部署到多个区域。然而,我们一直是基于单个一套代码为基础处理所有的工作。我们x现在可以把它分解成更小的碎片,并根据需要独立扩展它们。从单片整体架构到微服务架构。

是时候把我们整体的Web应用程序分解成多个较小的独立组件(微服务/ SOA )。我们不必一下子就把一切都打破了。我们可以让原来的单片整体系统继续做它的工作,我们开始编写小的客户端应用程序替代来一些原来主要应用执行的任务。

7.自动化运维,百万以上 并发 用户

尽可能自动化。基础设施越来越肥。我们需要数据库副本和分片,水平缩放、多地区、多AZ,自动缩放。

高可用都地区:基于流量源扩展可用区域。

自动扩展:如果你总是根据峰值容量分配服务器数量是很多浪费。用户流量有峰值(如黑色星期五)和山谷(例如,早上4点)。就是说,最好是建立一个自动缩放选项,允许网络根据流量自动调整。有多个策略自动缩放如基于CPU利用率、延迟或基于网络流量进行不同扩展。

度量:你也需要度量,监测和集中记录。测量可以测量的一切。服务器节点失败可能开始是随机的,你不能登录/ SSH到每一个服务器去寻找和确定的原因。集中日志使用ELK栈技术 (Elasticsearch, Logstash, 和 Kibana). 监视使用DataDog。

定制:数据库可能仍然是扩展中一个头痛的问题。如果熟悉了你的业务用例情况,可以使用 NoSQL 解决方案。

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: 服务器CPUNode.js微服务数据硬盘CDNSOASQLNginx
分页:12
转载请注明
本文标题:如何扩展Node.js支持大量用户
本站链接:http://www.codesec.net/view/480362.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(34)