Articles of 缩放

如何在Heroku上扩展节点应用程序?

在Heroku上扩展节点应用程序的最佳做法是什么? 工人什么时候增加工具? Heroku网站说 Crank your web dynos to increase HTTP performance. Crank your worker dynos to empty the queue faster. 我不太清楚这对我的节点应用程序意味着什么。

OpenShift HAProxy缩放不起作用

我一直在尝试使用ny NodeJS Express 4应用程序(本质上是一个REST API)来获得OpenShift的HAProxy扩展,但是我没有太多的运气。 我正在使用loader.io的压力testing工具,每分钟只有100个用户(从0开始),因为我确信至lessNodeJS / Express应该能够处理这个问题。 现在被允许,这在60秒内确实产生了大约10-20k个请求,但是仍然如此。 在请求开始冲击服务器之后会发生什么呢?我可以看到CPU上升,内存保持稳定,HAProxy的日志文件让我知道它将要扩展。 它从来没有。 HAProxy在可扩展之前崩溃,然后丢失与OpenShift主机的SSH连接。 不过一段时间后会回来。 有一次,我确实看到它已经达到默认的128个连接限制,然后试图启动另一个设备,但是由于请求不断出现,我猜测它无法处理? 起初我以为是因为使用了一个小的齿轮,因为我正在运行'顶部',看到CPU负载穿过屋顶,最终我断开了连接。 我删除了应用程序,并切换到small.highcpu齿轮(每小时花费钱)。 当它应该扩大时,仍然崩溃(less于100个并发用户)。 small.highcpu设备做了一些不同的事情,因为它重新启动后,它增加了一个新的齿轮,但它不缩小(即使所有的stream量已经停止),所以我不得不手动缩小 如果我离开第二个齿轮,并在1分钟内尝试再次用100个用户进行压力testing,HAProxy仍然下降(内存使用情况和CPU似乎没问题),之后不久我就失去了SSH连接。 而且,这一次它不是自动出现的。 我也在我的NodeJS应用程序中收到以下错误: { [Error: socket hang up] code: 'ECONNRESET' } { [Error: socket hang up] code: 'ECONNRESET', sslError: undefined } 如果我之后手动重启HAProxy(因为还没有popup来,我不得不这样做),我可以看到本地设备已经closures了,而第二个设备启动了,这意味着我的NodeJS应用程序在第一档崩溃,在二线上线。 这真的是有意的行为吗? 在处理NodeJS和HAProxy时,我应该做些什么吗? 如果我不能处理100个用户/分钟,我确实无法certificate为这样的服务付费,因为我确信我最终将远远超过100个用户。 更新 :这是一个loader.iographics/报表,HAProxy放弃时显示: http : //ldr.io/1tV2iwj 更新2 :我试着使用Blitz而不是loader.io,只是为了确定HAProxy何时发疯。 闪电战结束了12K点击,26K错误和4K超时。 此外,HAProxy下降,似乎永远不会回来。 这一次,我决定等待,几分钟后,本地DID又回来了。 但是,它没有提出任何额外的齿轮。 这也是HAProxy在Blitztesting发生的时候告诉我的(在它崩溃之前,我断开了连接): […]

运行多个Node.js脚本是否自动在核心之间分配

我想要在多核机器上进行扩展。 使用cluster库是一种select,但是我想知道是否可以通过更简单的方法来实现:通过简单地运行多个服务器。 所以我想知道的是:Node.js是否自动将服务器分布在多个核心上。 所以如果我有5个核心和5个服务器,每个服务器上运行每个核心。 如果是这样,这是一个在多核机器上扩展的可行方法吗?

哪个nosql数据库适合?

我期待build立一种社交networking。 现在这不是Facebook的规模,但我觉得它可以有一个大的跟随。 我想要构build具有可扩展性的系统。 它也需要能够处理大量的数据和关系。 我希望有人可以给我一些方向的数据库使用。 我看过很多文章,但通常都是一年多,数据库变化很快,所以我不知道人们说的东西是否仍然是真的。 我真的很喜欢riak数据库,因为它很容易扩展,我喜欢所有节点都可以读写的事实。 我的担心之一是数据将会有的关系。 但是,我相信riak中的联系可以解决这个问题。 但是在使用链接会降低性能。 我只是希望有人能给我一些经验和数据库目前的方向。

用redis水平缩放socket.io

我目前正在创build一个水平可伸缩的socket.io服务器,如下所示: LoadBalancer (nginx) Proxy1 Proxy2 Proxy3 Proxy{N} BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N} 我的问题是,使用socket-io redis模块,如果它们都连接到同一个redis服务器,是否可以向其中一个后端服务器连接到某个代理服务器的特定套接字发送消息? 如果是这样,我该怎么做?

在Node.js中,为什么我更喜欢键值存储在应用程序variables?

我正在Node.JS中开发一个支持Socket.IO的实时应用程序,在任何时候都会有几百个用户同时使用这个应用程序,我需要存储关于每个连接客户端的一些基本细节(并且删除这些细节客户端断开连接)。 我已经读过,使用键值存储(如Redis)是存储此类数据的首选。 为什么将数据存储在一个常规的应用内variables(对象,例如var connectedClientsData = {} )与将数据存储在Redis之类的键值存储中相比是不好的? 是否只支持扩展(例如,多个基于NodeJS的应用程序服务器可以连接到一个中央键值存储),还是存在一些更严重的缺陷?

在Heroku上使用cluster和socket.io-redis缩放node.js socket.io@1.*.*

有没有人知道一个很好的解决scheme来扩展一个基于node.js – socket.io的应用程序在多个核心? 我目前正在testingsocket.io文档中提供的解决scheme,以在多个节点上使用socket.io,但没有取得具体的成功。 我在github上创build了一个操作系统: https : //github.com/liviuignat/socket.io-clusters ,它是从socket.io站点修改的聊天应用程序的一个拷贝。 它使用express , cluster , socket.io@1.1.0和socket.io-redis 。 目前还有一个在分支feature/sticky使用sticky-session的实现,似乎更好。 最后,这个应用程序需要发布到Heroku ,并扩展到多个dynos。 最初我尝试做这样的事情 – 只为群集节点启动服务器,但我总是得到错误: 失败:连接closures之前收到握手响应 if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { var server […]