Articles of 缩放

数据库支持的工作队列

我的情况 … 我有一组计划定期运行的工作人员 ,每个工作人员都有不同的时间间隔,并希望find一个良好的实施来pipe理他们的执行。 例如:假设我有一名工人前往商店,每周一次购买我的牛奶。 我想存储这个工作,它的configuration在一个MySQL表中。 但是,轮询表(每秒?)看看哪些作业已经准备好放入执行pipe道似乎是一个非常糟糕的主意。 我的所有工作人员都是用javascript编写的,所以我使用node.js来执行,并将beanstalkd用作stream水线。 如果新创build的作业(即在某个特定时间调度一个工作人员)正在asynchronous创build,并且需要持久地存储作业结果和configuration,我该如何避免轮询表格? 谢谢!

使用Dynos在Heroku上缩放Node.js应用程序

我想更好地理解在Heroku上扩展Node.js服务器。 我有一个应用程序,处理大量的数据,并已遇到一些内存问题。 如果Node.js服务器升级到2个dyno,这是否意味着我的应用程序能够在一个线程上处理高达1.024 GB的内存? 我的理解是,单个节点线程的内存限制为〜1.5 GB,超过了2x dyno的限制。 现在,假设我升级到性能-M dyno(2.5 GB内存),是否需要使用集群来充分利用2.5 GB内存? 此外,如果对我的Node.js应用程序提出了大量数据请求,而这些数据在处理的时间超过了分配给该群集的内存量,那么进程会使用分配给另一个群集的某些内存,它只是抛出一个错误?

在Node.js中使用MongoDB进行扩展,我应该什么时候一次查询所有的ID,并行查询每个ID?

可以说我有一个处理N个用户的脚本。 脚本可以看两种方法之一,假设资源充足,速度会更快吗? 我可以使用Promise.all或async.parallel 。 选项1 function processUsers(userIds) { monog.find({_id: { $in: userIds }, (userDocs) => { const tasks = userDocs.map((userDoc) => processUser(userDoc)) async.parallel(tasks, (err, results) => console.log('finished')) }); } 选项2 function processUsers(userIds) { const tasks = userIds.map((userId) => { mongo.findOne({_id: userId}, (err, userDoc) => { processUser(userDoc); }) }) async.parallel(tasks, (err, results) => console.log('finished')) }

使用具有规模的nodejsstream式传输cassandra数据

我有一个要求使用nodejs读取存储在cassandra中的数百万条logging。 我已经准备好了stream式nodejs服务,可以从cassandrastream中读取数据stream,并将数据推送到分析服务器(再次使用stream式服务)。 但是,我不确定如何实现nodejs层的横向扩展,其中nodejs应用程序的多个实例从cassandra没有DUPLICATION读取并将其提供给分析服务器。 任何帮助,这将有很大的帮助。 谢谢。

将Node.js应用程序扩展为数千个同时连接

我们在一个应用程序上做了一些工作,可以让人们通过互联网来打棒球。 它完全存在于亚马逊的AWS生态系统中,我们正在为一个新项目而构build。 该堆栈包括: – 专用的MongoDB和Redis服务器 – 三组不同的nodejs服务器 – 我们正在利用Amazon的API来进行服务器configuration和自动调节 我们面临的问题是,我们还没有能够模拟每个实例超过约15000个并发用户(websocket连接)。 我们应该得到更多; 我们认为是十万分之一。 服务器CPU使用率只有40%。 有关如何扩展node.js应用程序的任何想法,使它有更多的同时连接到一台服务器?

如何在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服务器,是否可以向其中一个后端服务器连接到某个代理服务器的特定套接字发送消息? 如果是这样,我该怎么做?