Articles of 可伸缩性

水平缩放在服务器之间共享input的应用程序

我正在构build一个应用程序,通过websocket接受input,这个input必须共享回其他可能连接到其他前端服务器的客户端。 为了简单想象一个多用户多房间聊天应用程序。 让input路由到正确的连接不是一个问题,它是服务器之间的消息传递,并能够扩展并保持消息的延迟。 现在我有一个每个前端连接到的代理程序,然后他们订阅一个队列来查看连接可能需要知道的任何事情。 这样做是为了切断接收来自前端永远不会使用的代理的消息。 不过,我仍然可以获得大约75%到85%的消息从经纪商发回到每个前端。 在旅行中,我正在做消息validation,parsing和任何其他业务逻辑的工作。 在旅途中我循环了本地数组的订阅,并将消息发送到每个订阅的连接。 例如:如果我在11个前端服务器上收到10条消息(总共110条消息 – 10条消息在本地处理,而不是由代理发回)* 0.75乐观预订级别= 75条消息被发送回每个服务器处理。 所以我们有10个本地+75个broker = 85个消息被每个服务器处理一段时间。 现在,我不会有100个每秒100个的前端服务器,也许是两个,但是通过代理程序发回给每个前端服务器的消息似乎会爆炸我通过其他前端服务器收到的更多消息。 代理进程是一个与RabbitMQ和PostgreSQL交谈的小型node.js应用程序。 前端服务器也是node.js应用程序。 我能做什么,或者应该采取不同的措施,以在大批量生产期间保持低延迟? 更新回复用户评论:虽然我期望在队列之间的连接会导致他们的前端服务器订阅,我不认为它是100%的每个服务器的重叠。 最糟糕的情况是,每个前端服务器都必须订阅代理上的每个队列,从而从代理获得100%的消息。 乐观地说,只有大约75%的消息确实需要被发回到任何特定的前端服务器。 itaifrenkel的第二次更新:两个用户发送的消息可能以不同的顺序返回。 只有在延迟非常低的情况下才可以接受,而且只有在发送的消息非常接近时才会发生。 如果它发生的消息秒分开,那么我会说我们有一个延迟和规模的问题。 有一种情况我们需要显示一个历史logging,但是由于我觉得这个问题超出了问题的范围,所以我把这个logging留下了。

多用户应用程序同时具有〜200,000个连接

嗨Stackoverflow社区! 我负责一个将收集至less20万观众的事件的后端。 他们都可以参与一个非常简单的Q / A游戏,无论是使用移动应用程序或SPA网站。 没有这么多同时使用的用户的经验,我想知道哪种数据库,语言和服务器我应该用我的后端。 我在Node.js,MongoDB和socket.io方面有以前的经验,总是用小的项目,并且正在使用它们,但是我周围的一些人告诉我这些技术不能处理如此多的用户,并且可能会丢失一些数据包,甚至崩溃。 如果有更多的经验在这个领域有经验的人可以给我关于这个问题的build议,那将是非常棒的! 非常感谢所有! grebett

MongoDB新闻源模式devise

目前,我正在为Microsoft Azure移动服务上的Instagram类应用程序开发node.js移动后端。 我决定使用MongoDB并开始编码。 但是当我读到MongoDB模式devise的时候,我总是会结束的; “我做对了吗”。 这就是为什么我在这里。 潜入技术问题; 现在我有一个这样的简化的用户模型 ; { _id : "userId1" , username : "username", following : ["userId2","userId3" …], } 而像这样的简化的媒体模式 ; { _id : "mediaId" , mediaUrl : "mediaUrl", author : { _id : "userId1", userName : "username" } } 因此,当我尝试基于用户获取新闻源时 ,我所要做的就是检索following数组以获取以下用户标识,并通过索引media.author._id在媒体集合中使用$in操作符执行查询 问题是; 1.在考虑百万规模时,这种方法对我来说会是一个问题吗? 2.这种情况下最好的方法是什么? (还会有另外一个基于坐标的聚合查询,如计数等) 现在,我的后续build筑就像 保留用户文档中引用的以下用户标识。 还要保持关系在一个名为如下的集合中。 (followeeId,followerId)这种方法最适合这种情况吗? 第三个问题是可选的:P 向你们致以问候和感谢。 […]

典型Web应用程序中的Node.js可伸缩性

由于Node.js初学者来自Enterprise IT,我无法理解node.js用法的一个方面。 我正在两个部分构思我的问题。 问题1)严格来说,从可伸缩性的angular度来看,I / O沉重的Web应用程序如何使用node.js进行扩展,除非我们缩减它所消耗的后端I / O资源? 数据库服务器只能提供“X”个并发用户。 即使基于节点的HTTP服务器能够处理更多的传入请求,整体吞吐量也将由数据库可处理的并发连接数决定。 同样适用于其他企业资源,例如从文件服务器进行内容检索或调用传统API等。据我所知,我们不太担心可以弹性扩展且不在我们的直接权限范围内的云资源。 问题2)如果对上述问题的回答是“ 节点不是一刀切的解决scheme ”,像PayPal,Walmart,LinkedIn等公司如何能够通过节点获得规模? 他们也将整合到他们现有的系统环境中,而不是完全基于networking的应用程序(或者他们?)。

如何检查DynamoDB状态,同时chaning WriteUnits吞吐量并等待它完成?

如何等待DynamoDB的活动状态? 我只想升级DynamoDB,而没有其他进程正在缩放/更新表。 因此,我想知道如何查看是否有其他进程正在扩展DynamoDB表? 根据dynamodb.waitFor函数的文档我只能检查tableExists和tableNotExists状态: var params = { TableName: 'STRING_VALUE' /* required */ }; dynamodb.waitFor('tableExists', params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); 然而,这似乎只有“tableExists”和“tableNotExists”状态,但似乎不允许检查“活动”和“更新”状态? 背景:在一个多工作环境中,每个工作人员都会尝试在达到写入限制的情况下开始高档工作。 在从表中读取当前的预置吞吐量并开始新的缩放操作之前,如何使等待任何缩放/更新完成是必要的。

服务器端应用程序的可伸缩性,最好的方法

我正在编写一个服务器端应用程序来pipe理来自以下方面的请求: 游戏客户端 网站(HTTP请求) API 到目前为止,我只使用一个(NodeJS)应用程序来处理每种types的请求,问题是,随着用户群的不断增长,这种方法将会产生一个瓶颈。 我想就如何开发服务器端的architetture,以便它可以扩展的一些build议。 我知道的唯一的解决scheme是使用多个服务器运行相同的应用程序将共享相同的内存(Redis服务器)。 nodeJS有可能将这些types的请求的pipe理分割成多个服务器吗? 也许一个或多个服务器为每种types的请求? 目前我正在使用: 的NodeJS Redis的 MySQL的 performance Socket.io 在此先感谢,你能推荐一些关于这个问题的书吗?

缩放Socket.IO并向所有归属客户端广播

我在用着 用“connect-redis”会话存储表示 而我通过configuration“授权”与Socket.IO绑定 所以我不必实际使用 socket.get 要么 socket.set 存储和检索客户的归属variables。 但是我不确定,如果我把消息广播给特定的一群人,连接到不同的服务器上,就可以成功地获得消息。 所以这是真正的缩放! 但它似乎并没有真正的缩放,但只使用Redis作为单独的存储值。 另外我试图使用 RedisStore 这是由Socket.IO给出的 不起作用。 这是说 DEBUG: TypeError: Converting circular structure to JSON at Redis.stringify [as pack] (native) at Redis.publish (/var/www/node_modules/socket.io/lib/stores/redis.js:106:31) at Manager.handleClient (/var/www/node_modules/socket.io/lib/manager.js:646:18) at Manager.handleHTTPRequest (/var/www/node_modules/socket.io/lib/manager.js:595:8) at Manager.handleRequest (/var/www/node_modules/socket.io/lib/manager.js:557:12) at HTTPServer.<anonymous> (/var/www/node_modules/socket.io/lib/manager.js:112:10) at HTTPServer.emit (events.js:70:17) at HTTPParser.onIncoming (http.js:1507:12) at HTTPParser.onHeadersComplete (http.js:102:31) at Socket.ondata (http.js:1403:22) […]

比较和比较Node.js和Servlets 3.1非阻塞IO

Node.js使用Javascript的非阻塞性质。 另一方面,Servlets 3.1在Java EE 7中引入了非阻塞IO。 请解释这两者之间的技术上的相似点和差异,就非阻塞和可扩展性而言。

如何devise一个可扩展的RPC呼叫监听器?

我必须听rpc电话,把它们堆在某个地方,处理它们,然后回答。 事情是,他们没有尽快运行。 响应是每个接收到的rpc呼叫的ACK。 问题是,我想要devise一个方法,我可以让许多监​​听服务器在同一个调用堆栈中写入数据,并在它们到来时将它们堆叠起来。 我的目标是听尽可能多的电话。 我应该如何做到这一点? 我的主要技术是Perl和node.js,但会使用任何开源软件来完成这项任务。

使用node.js的100-200k并发用户的Web表单

我需要创build一个Web表单来收集用户数据(调查),预计最高可达100-200k个并发用户,也许更多。 我对RDBMS的Java和PHP解决scheme更具有持久性的经验,在这些平台上,我需要大量的虚拟机和严重的硬件负载分配来处理这种stream量。 由于这可能不符合成本效益,所以我在调用node.js的概念,可能还有消息队列或NoSQL数据存储。 有没有人遇到这个问题,并尝试过类似的解决scheme