Articles of 可伸缩性

Node.js的可扩展性是否因高负载下的垃圾收集而受到影响?

尽pipeNode.js是一个相当热门的话题,但我碰巧发现,由于其垃圾收集模型(http://amix.dk/blog/post/19577),Node.js可能不适合实时应用程序。 。 而且,一些基准testing显示,与RingoJS(http://hns.github.com/2010/09/29/benchmark2.html)相比,Node.js响应速度较慢。 目前,Node.js被绑定到V8 JavaScript引擎,它使用世代停止的GC。 那么,当传入的请求很大时Node.js会被破坏吗? 如果有真实的生产数据,那会更好。 谢谢

node.js + socket.io + redis体系结构 – 水平serverscaling套接字连接?

我第一次使用node.js并希望得到一个build议: 我在我的服务器上安装了以下程序: node.js v0.11.3-pre expressionv3.3.4 socket.io v0.9.14 connect-redis v1.4.5 Redis服务器v = 2.6.14 redis-cli 2.6.14 首先,我创build了一个快速应用程序: express testApplication 在创build的“package.json”中,我定义了所有必要的依赖关系。 从一开始,我就在一个名为“cluster.js”的文件中定义了一个用于垂直缩放(多进程)的集群: var cluster = require('cluster'); if( cluster.isMaster ) { var noOfWorkers = process.env.NODE_WORKERS || require('os').cpus().length; console.log("Workers found: " + noOfWorkers); for (var i = 0; i < noOfWorkers; i += 1) { cluster.fork(); } } else { […]

我应该在MongoDB或本地文件系统(由Node.js)中存储图像

我为我的项目使用Node.js。 我应该将图像存储在本地文件系统中,还是应该将其存储在MongoDB中? 哪种方式更具可扩展性?

node.js与asp.netasynchronous页面

仍然试图将node.js忽略… 如果我为每个I / O操作应用asp.netasynchronous模式,并configurationmaxWorkerThreads = 1,它是否(在概念上)类似于node.js? I / O操作(在任何一个框架中)是在自己的线程中进行,还是有一些操作系统function来获取通知/灯光线程? 这个 SO线程说node.js仍然在内部使用线程,所以它不是从asp.net那么大的区别。 有些答案是肯定的,但它是一个更好的编程模型等问题涉及哪些线程,轻量级I / O像我在#2问的?

基于Cookie的WebSockets的负载平衡?

我的情况是,我们目前正在编写一个在线应用程序,它使用WebSocket侦听器在服务器端使用Node.js。 我们有两个不同的部分:一个服务页面,使用node.js和express + ejs,另一个是完全不同的应用程序,其中只包括用于websocket的socket.io库。 所以在这里我们来看看这个websockets部分的可伸缩性问题。 我们发现的一个解决scheme是使用redis和服务器之间共享套接字信息,但是由于架构,它将需要共享其他信息的负载,这将在服务器上造成巨大的开销。 在介绍之后,我的问题是 – 是否可以使用基于cookie的websocket负载平衡? 因此,可以说每个从用户与cookie服务器= server1连接将始终转发到server1和每个连接与cookie服务器= server2将fw到server2和连接没有这样的cookie将fw到最不繁忙的服务器。 更新:正如一个“答案”所说 – 是的,我知道这存在。 只是不记得那个名字是粘滞的会议。 但问题是 – 这是否适用于websockets? 有没有可能的并发症?

一台机器上的node.js服务器实例的水平伸缩

在node.js上运行一个web服务器是一件简单的事情(如其优秀的例子和文档所见),但我想知道如何充分利用专用服务器的CPU资源? 由于node.js是单线程,因此利用多个处理器的唯一方法是通过多个进程。 当然,只有一个进程可以绑定到一个端口,所以似乎必须有一个主/辅助模式,其中主分派孩子,绑定到传入端口,并委托传入连接(和实际处理工作)给孩子。 (也许是通过饥饿的消费模式?) 这是扩展运行node.js的Web服务器的最佳方式吗? 如果是这样,有没有图书馆来简化主/从模式? 如果不是,build议哪种模式或部署设置最好地使用专用机器的全部资源? (这是一个更好的ServerFault问题?)

Nodejs的callback机制 – 哪个线程处理callback?

我是nodeJS的新手,想知道Node的单实例模型。 在一个简单的nodeJs应用程序中,当某些阻塞操作与callbackasynchronous处理时,运行nodeJs的主线程是否也处理callback? 如果请求是从数据库中获取一些数据,并且有100个并发用户,并且每个db操作需要几秒钟,当最后触发(对于每个连接)callback时,接受这些请求的主线程用于执行callback以及? 如果是这样,nodeJs如何扩展,它如何快速响应?

如何扩展Node.js WebSocket Redis服务器?

我正在为Acani写一个聊天服务器,而且我还有一些关于使用负载均衡器可伸缩性来扩展 node.js和websockets的问题。 究竟是什么意思来负载均衡Node.js? 这是否意味着将有n个独立版本的服务器应用程序运行,每个版本都在一个单独的服务器上运行 为了允许一个客户端向所有其他客户端广播消息,我存储了一组在服务器上打开的所有webSocketConnections 。 但是,如果我有我的服务器应用程序运行n个独立版本,每个在一个单独的服务器上,那么我将有n套不同的webSocketConnections ? 如果1和2的答案是肯定的,那么如何存储通用的webSocketConnections (跨所有服务器)? 我想我可以做的一个方法是使用Redis Pub / Sub,并且每个webSocketConnection订阅Redis上的一个频道。 但是,那Redis服务器不会成为瓶颈吗? 那么我将如何扩展Redis? 这对Redis的规模意味着什么? 这是否意味着我有不同的服务器上运行Redis独立版本? 这甚至可能吗? 我听说Redis没有扩展。 为什么有人会这么说呢。 那是什么意思? 如果这是真的,有没有更好的解决scheme发布/分发和/或存储所有广播的消息列表? 注意:如果你的答案是Acani永远不会规模化,那么即使地球上70亿人(和成长中的每一个人)都要每秒钟向地球上的每个人传播一个信息,那么请给出一个有效的解释。

NodeJS水平缩放

我一直是ruby / php web应用程序开发人员,我已经习惯了服务器实例水平扩展的想法来处理更多的请求。 水平缩放 – 表示位于负载均衡器后面的应用程序的单独实例,它们不共享任何内容,也不知道对方。 我的主要问题是,因为Node.js和它的重点evented-io允许运行一个node.js服务器来处理“数以千计的”同时请求的单个框 – 负载平衡/水平缩放用于扩展nodejs应用程序? 缩放一个节点应用限于垂直缩放(抛出更多的RAM /处理能力的问题)? 我的第二个问题与node.js水平缩放和websocket有关。 我已经看到了很多使用websocket的Node.js“聊天”教程。 (最喜欢的: http : //martinsikora.com/nodejs-and-websocket-simple-chat-tutorial ) 由于websockets在浏览器和服务器之间有效地保持了开放的通信线路,所以PHP / Ruby世界中典型的水平缩放体系结构会导致类似链接中解释的聊天应用程序断开 – 因为新的websocket连接请求将会分配给不同的进程/服务器,并且没有一个中央资源跟踪所有连接的客户端?

在多个核心/服务器上扩展Node.JS

好,所以我有一个想法,我想仔细阅读,但在此之前,我需要充分了解一些事情。 首先,我认为即将开始使用这个系统的方式是有3个服务器,如下所述: 第一台服务器将是我的networking前端 ,这是服务器将监听连接和响应客户端,这台服务器将拥有8核心和16GB RAM。 第二台服务器将是数据库服务器 ,真的很自我解释,连接到主机并设置/获取数据。 第三台服务器将成为我的存储服务器,这将是存储可下载文件的地方。 我的第一个问题是: 在我的前端服务器上,我有8个内核,扩展节点的最佳方式是什么,以便负载分布在内核之间? 我的第二个问题是: 有没有一种系统可以放入我的应用程序框架中,这样我就可以与其他内核进行通信并传递消息来保存I / O。 最后一个问题: 有没有什么系统可以用来帮助将内容从我的存储服务器移动到前端服务器上的请求,尽可能less的开销,速度是一个问题,因为我们将有500多个客户端同时下载和上传倍。 我终于说服了我的老板,node.js是非常快的,它是最新的编程技术,我们应该为我们的Intranet系统投资一个平台,但他已经要求详细的文档说明如何在当前的硬件有可用的。