Articles of 并发

在运行相同服务的多个容器上插入重复的数据

我有一个处理相同数据的服务副本的问题。 我的代码从套接字获取数据,然后将该数据插入到数据库。 问题是,如果我有2个相同的服务容器(我有更多的2),他们都插入相同的,我得到我的数据库重复的数据。 有没有办法告诉他们中的一个做插入? 我使用docker和kubernetes,但我还是新的 function dataStream(data) { // get the data from the socket const payload = formatPayload(lines); addToDb(payload); // I want this to happen only from 1 service broadcast(payload) }

使用集群的Node.js性能

我一直在试图弄清楚这一点。 我在节点上写了一个非常简单的http服务器来衡量使用集群的效果。 这是我的代码: var cluster = require('cluster'); var http = require('http'); var numCPUs = 0; //require('os').cpus().length; if(process.argv.length >= 3) { numCPUs = process.argv[2]; } if (cluster.isMaster && numCPUs > 0) { console.log("launching " + numCPUs + " procs"); // Fork workers. for (var i = 0; i < numCPUs; i++) { console.log("launching proc #" + […]

express / node.js中的请求之间的同步问题

我在node.js中想到了一个奇怪的同步问题,我没有find一个优雅的解决scheme: 我设置了一个express / node.js Web应用程序,用于从一行数据库表中检索统计数据。 如果表格为空,则填充长计算任务 如果表中的logging大于15分钟,则通过长计算任务进行更新 否则,用显示DB中的logging的网页进行响应。 问题是,当多个用户同时发出请求时,如果logging是旧的,那么每个请求将执行一次长计算任务,而不是一次。 有什么优雅的方式,只有一个请求触发计算任务,所有其他人等待更新的数据库logging?

nodejs Async:concurency worker在队列中再次推送相同的任务

我想知道在完成使用nodejs的asynchronous模块之后,无限期地再次在队列中推送新任务的最佳方式是什么? var q = async.queue(function (task, callback) { console.log('hello ' + task.name); doSomeFunction(task.name, function(cb){ callback(); }); }, 2); q.drain = function() { console.log('all items have been processed'); } // add some items to the queue for (var i in list) { q.push({name: i}, function (err) { console.log('finished task'); //***HERE I would like to push indefinitely […]

testing同一个函数的并发调用

我有一个function: var inRendering = false; function render() { if (inRendering) { requestAnimationFrame(render); } else { inRendering = true; requestAnimationFrame(function () { longAction(); inRendering = false; }); } } 我必须进行unit testing。 testing并发调用render 。 请帮帮我? 这样的并发呼叫在JavaScript中可能吗? 谢谢。 PS我写了一个testing,显然不工作(见评论): https : //gist.github.com/kuraga/b0aa3d66fc0620f03b11

如何提高负载下的ArangoDB性能(多个并发查询)?

我们使用ArangoDB和PostgreSQL来存储几乎相同的数据。 PostgreSQL用于执行关系数据库可以很好地执行的一般types的查询。 selectArangoDB来执行graphics遍历等查询,find最短path等。 目前,我们有一个在PostgreSQL中有160000条logging的表,在ArangoDB中有一个与文档数量相同的集合。 我们正在使用的API将被多个用户同时使用,所以我首先要检查的是ArangoDB和PostgreSQL在负载下如何执行。 我创build了一个简单的负载testing,作为一个工作负载执行一个简单的select查询与filter既ArangoDB和PostgreSQL。 查询使用按date过滤字段select前N个logging/文档。 当我运行负载testing时,对PostgreSQL的所有查询都在0.5秒内执行,我将用户数量从10增加到100,并且完全不影响执行时间。 对于ArangoDB来说,同样的查询需要花费大约2秒钟的时间,然而,响应时间与并发用户的数量成正比。 有30个并发用户,等待60秒后,所有查询都会超时。 我试图debuggingarangojs连接器,发现这一点: var maxTasks = typeof agent.maxSockets === 'number' ? agent.maxSockets * 2 : Infinity; 和这个: Connection.agentDefaults = { maxSockets: 3, keepAlive: true, keepAliveMsecs: 1000 }; 这意味着默认的arangojs行为是同时向ArangoDB发送不超过6个并发查询,这导致所有其余查询在Node.js端排队。 我试图增加数量,但它没有帮助,现在看起来像所有的查询排队在ArandoDB一侧。 现在,如果我运行加载并尝试使用ArangoDB Web Interface执行一些查询,则查询将提交不可预测的时间量(取决于当前用户的数量),然后返回结果并显示它已被执行在大约4秒内这是不正确的。 对我来说,看起来像ArangoDB一次只能执行一个查询,而所有其他查询排队… 我错过了什么吗? 有没有什么设置来调整ArangoDB并提高它在负载下的性能? 更新: 我们使用ArangoDB 3.0,并将其作为Docker容器(来自官方图片)与1.5 GB的RAM一起运行。 样本文件(我们有大约16000个): { "type": "start", "from_date": "2016-07-28T10:22:16.000Z", "to_date": "9999-06-19T18:40:00.000Z", […]

node.js上的heroku爱好dynamic,限制

我无法理解Heroku Hobby dyno使用节点的性能限制,这种types只包含1个web worker。 我的heroku服务器用于响应发布请求并启动服务器到服务器的通信。 我们将称之为“过程”。 Node.js是JavaScript,只有一个事件循环,这是否意味着,如果我的Heroku服务器还没有完成与进程,它将无法启动另一个? 客户端,用户发送一个发布请求,启动“进程”。 如果进程不完整,第二个用户是否可以发送另一个请求并期望发生什么事情? 我的服务器将挂起,直到第一个过程完成? 在我的初步testing中,似乎几乎同时发送请求的两个用户没有问题,所以我不确定我会受到什么限制

NodeJS – 处理超过100个并发连接的内存

我正在开发物联网应用程序,客户端每2秒向服务器发送生物潜在信息。 客户端每2秒发送一个包含400行数据的CSV文件。 我的服务器上运行了一个Socket.IO websocket服务器,它从每个客户端捕获这些信息。 一旦捕获到这些信息,服务器必须每隔2秒将这400条logging存入一个mysql数据库。 虽然只要客户端数量很小,这种方式就可以很好地工作,但随着客户端数量的增长,服务器开始抛出“进程内存exception”。 以下是收到的例外: <— Last few GCs —> 98522 ms: Mark-sweep 1397.1 (1457.9) -> 1397.1 (1457.9) MB, 1522.7 / 0 ms [allocation failure] [GC in old space requested]. 100059 ms: Mark-sweep 1397.1 (1457.9) -> 1397.0 (1457.9) MB, 1536.9 / 0 ms [allocation failure] [GC in old space requested]. 101579 ms: Mark-sweep […]

什么是通过HTTP POST处理大量数据的有效方法?

我正在编写一个应用程序,将用于绘制和分析海量的日志数据。 基本上,我们的应用程序(网站,Tomcat,控制台等)将有自定义的log4j appender发送日志条目到我们的远程服务器。 现在我想通过普通的HTTP POST来接受这些日志条目。 在这一点上,Web服务将logging到数据库中。 我在Node.js和Akka之间的栅栏上。 主要是因为我有Java和JavaScript的经验。 但是我对Akka的演员模式是新的,我读过Node并不是真正的并行,除非你运行多个节点服务器? 我的逻辑是这样的: 1)应用程序POST日志条目到服务器 2)服务器采取HTTP请求,并创build一个Amazon SQS条目(或Azure服务总线…没有决定) 3)工作人员清理队列并将条目存储在数据库中。 我认为这将允许真正快速的input,但调用SQS操作将是一个长期的IO过程。 我的另一个想法是接受POST请求,将其存储在memcached或Redis中,然后让工作人员从caching中拉出,发送到SQS,然后清除队列中的数据库插入。 这将具有HTTP请求尽可能快地传递数据的优点,并让其他工作人员处理logging。 这听起来像Akka的工作,因为我可以不分配每个请求的演员,然后让它产生其他演员来处理它进/出caching? 在testing阶段,我一次可以轻松看到20-500个请求。 取决于我们在testing中打开多less个应用程序。 但是一旦完全运行,我们可以看到来自所有应用程序的每秒数千个请求。 所以我的问题是如何最好地处理我将得到的海量数据。 我关心线程locking,http阻塞等

asynchronous非阻塞事件驱动方法是“asynchronous编程”的唯一方法吗?

我对这里的术语有些困惑。 让一个程序由一些概念上不同的任务组成: 在asynchronous编程模型中,任务是相互交错的,但在一个单一的控制线程中。 即使在多处理器系统上,单线程asynchronous系统也会始终以交错执行。 没有实际的并行性。 事件驱动方法是做“asynchronous编程”的唯一方法吗?