Tag: concurrency

MongoDB群集中的并发问题

我到了一个需要扩展应用程序的地步,不幸的是,当我编写应用程序时,我从来没有想过集群。 现在我遇到了一些问题,我不确定为了避免这样的问题会做些什么。 我将展示两个相当简单的代码示例: 例1: 如果我在8个实例上运行这个函数,它可能会重复select相同的configuration文件(因为它们是有序的)。 更新那些很长时间没有更新的configuration文件是有道理的,但是有没有某种“locking”可以防止其他实例在完全相同的文件上工作? // Select 100 least updated profiles and update them PlayerProfile.find().sort({ updated_at: 1 }).limit(100).then((playerProfiles) => { // Code which would update these 100 selected profiles }) 例2: 我在我的MongoDB中有1000个账号的集合,每个实例应该有100个账号。 没有实例被允许使用完全相同的帐户凭证。 如何确保运行多个实例时的情况? Account.find({}, 'player_id token').limit(this.clientQuantity).then((accounts) => { logger.info(`Using ${accounts.length} accounts from the database`) for (let i = 0; i < accounts.length; i++) […]

设置一个句柄帮助器,以快速返回每个请求的特定值

我有一个基于快递的应用程序,服务器端提供的句柄模板的HTML和一捆骨干资源。 理论上,客户端,应用程序就像服务器端发生的事情。 这在开发中是很好的,但是当节点服务器同时处理很多请求的时候,我们正在使用的帮助器的机制被定义/重新定义了中断 – 我们设置了帮助器(在这种情况下,login/不是login,但可能是任何东西),然后服务其余的请求asynchronous发生 – 我们不知道,也不能控制这将需要多长时间。 我已经发现这是因为服务器上的Handlebar实际上是一个全局的 – 所以每次请求进来时,被调用的帮助程序都是从那里请求的一个共享对象。 问题是,如何能够设置每个asynchronous请求帮助器返回特定的值,并没有被并发请求污染…? 这里有一个testing用例的要点 – 希望能够说明问题: https://gist.github.com/dazld/023df6e1da7a92387720 (如果不明白我要做什么,只是在评论中,我会写更清楚的东西)。 谢谢!

在没有集群的情况下,Node.js在ab中好得多,我错过了什么?

更新1 :@BagosGiArtesting与一个相当类似的configuration显示集群总是应该performance更好。 也就是说,我的configuration有一些问题,我要求你帮我找出可能的结果。 更新2 :我想深入讨论这个问题。 我已经在一个LiveCD *(Xubuntu 13.04),相同的节点版本上testing过。 首先,在Linux下,性能比Windows好: -n 100000 -c 1000给我6409.85没有群集的请求/秒,7215.74请求/秒的群集。 Windows构build肯定有很多问题。 不过我想调查为什么这种情况只发生在我身上,因为一些具有类似configuration的人performance更好(集群performance也很好)。 *应该注意的是,LiveCD使用RAM文件系统,而在Windows中我使用的是快速SSD。 这怎么可能? cluster模块应该不会更好吗? 规格:Windows 7 x64,双核P8700 2.53Ghz,4GB内存,Node.js 0.10.5,ab 2.3。 testing命令行是ab -n 10000 -c 1000 http://127.0.0.1:8080/ 。 var http = require('http'); http.createServer(function (req, res) { res.end('Hello World'); }).listen(8080); 基准testing结果〜2840.75次/秒 : This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam […]

在哪里调用DynamoDB的实例? 每次请求一次或一次?

我有麻烦在哪里创build我的应用程序多个用户与应用程序交互的dynamodb实例。 我应该在程序加载并创build客户端时创build它,还是应该将其放入到我的路由中,以便对数据库进行调用,因此对login路由的每个请求都将创build一个实例? var express = require('express'); var app = express(); var AWS = require('aws-sdk'); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); //Is this the right place. Outside of where the database call is being made var dynamodbDoc = new AWS.DynamoDB.DocumentClient(); app.post('/login', function (req, res) { //OR should I create a new instance of AWS.DynamoDB.DocumentClient() here every […]

javascript – 事件驱动和并发问题?

问候, 我一直在学习javascript,nodejs。 而我不明白如何在JavaScript中避免并发问题。 可以说我正在处理一个对象 var bigObject = new BigObject(); 我有一个setTimer(function(){ workOnBigOjbect…} ) ,也将在bigOjbect工作。 如果我将磁盘IO写入bigObject ,并使用一个定时器对象来处理bigObject ,并定期从bigObject读取代码,那么如何避免并发问题呢? 在常规语言中,我会使用互斥或​​线程安全的队列/命令模式。 我也没有看到有关JavaScript的竞争条件的讨论。 我错过了什么吗?

我怎样才能限制Q promise的并发性?

我如何编写一个限制Q promise并发性的方法? 例如,我有一个方法spawnProcess 。 它返回一个Q的承诺。 我不想每次都产生超过5个进程,但是对于调用代码是透明的。 我需要实现的是带签名的函数 function limitConcurrency(promiseFactory, limit) 我可以打电话给我 spawnProcess = limitConcurrency(spawnProcess, 5); // use spawnProcess as usual 我已经开始编写我的版本了,但是我想知道是否有人可以简单的实现我可以检查的版本。