首页 文章

简单Node.js App的突然缩放

提问于
浏览
0

我的网站是用Node.js编写的,没有数据库或外部依赖,但确实有很多大型媒体文件(图像和一些视频)总共大约2GB . 该网站的结构来自几个简单的JSON文件 .

我的问题是剧烈和突然的缩放 . 任何小型VPS实例通常都可以轻松处理到我网站的流量,但偶尔流量可以在短时间内达到正常水平的数百倍 . 我的问题是如何快速扩展,无需停机和自动扩展 . 我知道自动缩放存在问题,但是可能缺少数据库会否定一些问题 .

我应该关注哪种缩放问题和选项?

(对于上下文,我目前正在使用数字海洋VPS,但我无法找到一种简洁的方法来扩展它而不会停机 . 我不会与我的提供商结合 . )

2 回答

  • 3

    可伸缩性很重要,但在需要时进行扩展也很重要 . 我们都没有Facebook或Twitter的扩展需求:)这可能只是资源管理的一个例子 .

    Test the problem

    如果没有数据库并使用NodeJS,节点的一些优势就是它的并发连接数 . 对于简单的io加载,看起来你已经选择了一个很好的框架选择 . 而且,由于您的问题集是被轰炸的特定资源,因此请在您的服务器上运行一些负载测试 . 流行和免费工具包括:

    还有付费服务,如NeoLoadLoadImpact(在小级别免费),forecastweb,E-Load等 .

    With those results, Determine the Cause

    是服务文件的大小吗?它是并发请求的数量吗?在减速期间(ram,端口,文件系统,其他一些IO,CPU,带宽等),正在使用或最大限度地使用哪些资源?

    看一下this question,它定义了服务器负载的一些概念 . 要实施解决方案,您需要确定减速的原因 . 是这样的:1)有些队列填满了吗? 2)TCP连接和端口问题? 3)资源配置太慢?这将有助于塑造您的解决方案 .

    Plan for scaling.

    项目所需的缩放类型可能只是另一个所需的部分 . 如果你知道这种情况下的根本原因,它会增加你的选择 .

    问题是带宽吗?也许将您的Web服务器用作多个 Cloud 文件服务实例的路由器可以有效地增加用户看到的带宽 . 即使只是将文件存储在更大的 Cloud 上,也可以保证您可能需要的带宽 .

    是CPU,RAM等问题?您可能需要同一Web应用程序的多个实例(或VFS的增加分配) . 这是亚马逊弹性 Cloud 计算(EC2)的“弹性”部分,以及其他类似的模型 . 当您看到交通开始尖峰时,创建一个“黄金图像”并复制,使用内置监控工具,在匆忙完成时将其关闭 . 可以是程序设计或简单手动 .

    问题是并发请求吗?瓶颈不应该是NodeJS,最多可达1000个并发请求 . 也许只需检查您的实现,以确保单节点线程没有减速 . 也许node clustering或某些worker threads会为你的目的缓解瓶颈 .

    Last Note :对于提供静态文件,我听说nginx甚至Apache Tomcat比NodeJS更合适 . 根据您的Web应用程序的复杂性,您可以相当轻松地切换或进行基准测试 .

  • 0

    如果有人在几年后阅读这个相当具体的问题,我已经获得了一些观点 . 正如Clay所说,最终的答案是根据负载手动或以编程方式启动更多服务器 .

    然而,在我的情况下,这将是巨大的矫枉过正 - 我没有运行Twitter . 问题是架构中的一个相对简单的错误 . 我的应用程序正在从每个页面请求的磁盘读取JSON数据文件,并且磁盘I / O已经饱和 . 我改为在启动时将数据文件加载到内存中,并在使用fs.watch()更改时重新加载它们 .

    我的适度VPS现在可以轻松处理之前崩溃的各种流量 . 我从来没有见过会让我想要扩大规模的流量 .

相关问题