Tag: 可伸缩性

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系统投资一个平台,但他已经要求详细的文档说明如何在当前的硬件有可用的。

垂直和水平地缩放Socket.io – 什么是“正确的”方式?

我想纵向和横向扩展我的Node.js套接字应用程序,我还没有find一个复杂的解决scheme。 我的应用程序有两个用例: 将消息从一个用户广播到所有其他用户 将消息从一个用户推送到一部分用户 一方面,我已经读过,我需要Redis和socket.io-redis 另一方面,我观看了这个video ,看到这个回答说Redis不可靠,并且不能保证发布的消息到达 ,所以你只能用它来进行聚类/垂直缩放 使用ServiceBus的 Microsoft Azure解决scheme是没有问题的,因为我不想使用Azure。 这个人不是Redis,而是推荐使用RabbitMQ进行水平缩放。 对于垂直缩放,还有一个用于节点进程的IPC,即socket.io- clusterhub ,但它似乎只能在Socket.io <= v0.9.0 然后有这个人 ,他已经实现了自己的方法通过HTTP请求传递消息到其他节点,这是有道理的。 但为什么HTTP请求,如果你也可以build立服务器之间的直接套接字连接,同时推送消息到所有的服务器,克服从一个服务器到另一个延迟? 作为一个结论,我想也许我可以在每个服务器上使用Redis ,只是为了在多个进程中集中我的应用程序时交换消息,以及RabbitMQ作为S2S通信解决scheme。 但是有一个Redis per Server和另外一个RabbitMQ似乎有些过火了。 是否有任何已知的更短/更好的解决scheme来双向可靠地扩展Socket.io? 编辑:我已经尝试使用单个Redis服务器多个Node.js服务器,其中每个服务器通过所有核心上的粘滞会话使用群集。 虽然群集在自己的作品像redis的魅力,使用多个服务器似乎有问题。 消息不会到达其他节点 。

什么是我可以扩展我的nodejs应用程序的最佳方式?

基础 现在我的一些朋友正在尝试开发一个用nodejs制作的浏览器游戏。 这是一个多人自上而下的射手,大部分的客户端和服务器端的代码是在JavaScript中。 我们有一个很好的总体方向,我们希望进入,我们正在开发游戏很有趣。 我们做这个游戏的目标之一就是尽可能的努力去作弊。 这样做,我们有所有的游戏逻辑处理服务器端。 客户端只通过web套接字将他们的input发送到服务器,服务器用游戏中正在发生的事情更新客户端(也是web套接字)。 这是我们问题的开始。 所有的服务器端math都变得相当沉重,我们发现我们需要以某种方式扩展来处理超过10个玩家(我们希望能够承载更多)。 起初我们认为我们可以根据需要垂直扩展,但由于nodejs是单线程的,因此只能利用一个内核。 这意味着获得更强大的服务器将不会帮助解决这个问题。 我们唯一的解决scheme是水平扩展。 为什么我们在这里问 我们还没有find如何扩展nodejs游戏的好例子。 我们的用例是非常特别的,虽然我们已经尽我们所能做到了这一点,但我们真的可以从外部的意见和build议中受益 细节 我们已经在如何解决这个问题上投入了大量的思想。 我们已经研究了一个多星期了。 以下是我们迄今所做的一切: 四种types的服务器 我们正在将任务分成4个不同的“服务器types”。 每个人都将完成一个特定的任务。 代理服务器 代理服务器将坐在整个堆栈的前端,并成为唯一可以从互联网上直接访问的服务器(可能会有更多这样的服务器)。 它会有haproxy,它会将所有连接路由到Web服务器。 我们selecthaproxy是因为它具有丰富的function集,可靠性和几乎无与伦比的速度。 Web服务器 Web服务器将收到Web请求,并提供所有的Web页面。 他们还将处理大堂的创build/pipe理和游戏创build/pipe理。 要做到这一点,他们会告诉游戏服务器他们有什么游说,大厅里有什么用户,以及他们将要玩的游戏的信息。 然后,networking服务器将更新关于用户input的游戏服务器,并且游戏服务器将更新游戏中正在发生的事件的networking服务器(谁将更新客户端)。 Web服务器将使用TCP套接字与游戏服务器进行任何types的pipe理,并且在进行关于游戏更新的通信时使用UDP套接字。 这将全部使用nodejs完成。 游戏服务器 游戏服务器将处理所有的游戏math和关于游戏的可变更新。 游戏服务器还与数据库服务器进行通信,以logging关于游戏中玩家的很酷的统计数据。 这将使用nodejs完成。 数据库服务器 数据库服务器将托pipe数据库。 这个部分实际上是最简单的,因为我们发现rethinkdb ,有史以来最酷的分贝。 这很容易扩展,奇怪的是,成为扩展应用程序的最简单的部分。 其他一些细节 如果您在整个调查过程中遇到困难,请仔细阅读,这是我们如何进行扩展的半精确图表。 如果你只是好奇,或者认为看看我们的游戏可能是有帮助的,那么目前它在这里是以非缩放状态托pipe的。 有些事情我们不想要 我们不想使用nodejs的集群模块。 这是不稳定的( 在这里说),它不扩展到其他服务器,只有其他处理器。 我们希望能够跨越水平缩放。 我们的问题总结 我们希望我们朝着正确的方向前进,我们已经做好了功课,但是我们并不确定。 我们当然可以就如何以正确的方式做到这一点提出一些build议。 谢谢 我意识到这是一个相当长的问题,做一个深思熟虑的答案并不容易,但我真的很感激。 […]

为什么Node.js可扩展?

node.js可伸缩,那是什么意思? node.js服务器的哪一部分是可伸缩的。 我读到这是一个单线程技术,不适合需要大量CPU资源的应用程序。 这些事实不符合可扩展性,所以这是什么意思?