Articles of 负载平衡

在nodejs REST API中实现负载平衡器的最佳方式是什么?

我正在使用nodejs创build一个REST API,并且希望为这个API实现一个负载平衡器。 我怎么能做到这一点?

如何将属性关联到Redis Store中的socket.io对象?

我正在用Nodejs和Socket.io来处理一个复杂的游戏,我需要将socket.io对象存储在内存中,还要为套接字对象指定属性(比如名称,来自套接字的某个动作的计数器等) 在下面的代码中,我已经展示了我想要实现的一个例子。 我将所有套接字存储在一个数组中,并且还有另一个存储套接字名称属性的数组。 在任何时候,如果我得到名称的请求,我可以从内存中的数组中select名称。 但是现在我有太多的用户,我需要在多个服务器之间对我的应用程序进行负载平衡。 所以我不能将对象和属性存储在内存中。 我需要将它们存储在数据库中。 我打算使用Redis。 这个链接告诉我们如何使用Redis Store套接字 – https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO 但是,如何将我的其他属性(比如名称等)与Redis Store中的套接字对象相关联? 如果有一些新的方法来实现这一点,请让我知道。 var socket_array = new Array(); var socket_name_array = new Array(); var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket_array.push(socket); var i = socket_array.indexOf(socket); var name = generate_random_name(); socket_name_array[i]= name; socket.on('get_name', function (data) { var i = socket_array.indexOf(socket); var name= socket_name_array[i] […]

谷歌云健康检查失败

我已经尝试了一切,我可以find谷歌,但仍然无法使其工作。 我configuration了端口8080的健康状况检查,我已经创build了nodejs服务器来服务200 OK并立即closures连接(不保持活动状态)。 手动testing到实例的IP地址似乎工作。 我使用ngrep来检查端口8080上的传入连接,我也从节点打印到控制台,什么都看不到,没有stream量到端口8080.另外在防火墙上,我有一个规则,以允许端口8080 0.0.0.0/0我试过端口80在开始和切换到端口8080只是为了试图使其工作。 我发现“谷歌地址pipe理器”服务失败,并启动它,也试图重新启动实例。 我也尝试使用以下命令向本地路由添加130.211.0.0/32:sudo / sbin / ip route添加到本地130.211.0.0/32 dev eth0 proto 66我尝试了networking负载平衡计算器和http负载平衡计算器,结果相同。 你能帮我么? 我一直在尝试过去72小时,不能使它工作。 以下是运行状况检查定义的复制粘贴:default-health-check由…使用 lb-please-work-backend-servicepath / 港口 8080间隔 5秒超时25秒不健​​康阈值连续20次失败健康阈值 连续1次成功 **更新:我现在从头开始创build一个新的服务器,nodejs在端口80上侦听并返回200 OK。 我也创build了一个新的LB和健康检查,一切仍然没有

GCE Http负载平衡器没有达到实例 – 不健康

我按照这里的说明来设置负载平衡器: https://cloud.google.com/nodejs/getting-started/run-on-compute-engine#multiple_instances 我的实例工作正常,他们可以通过inst.ance.ip.addr:8080访问,并发送一个200根 负载平衡器显示: 错误:服务器错误 服务器遇到临时错误,无法完成您的请求。 请在30秒后重试。 此外健康检查总是返回不健康: $ gcloud compute backend-services get-health api-service 说明: 后端: https : //www.googleapis.com/compute/v1/projects/#####/zones/us-central1-f/instanceGroups/api-server status:healthStatus: – healthState:UNHEALTHY实例: https:/ /www.googleapis.com/compute/v1/projects/#####/zones/us-central1-f/instances/api-server-jg2e port:8080 – healthState:UNHEALTHY实例: https://www.googleapis .com / compute / v1 / projects / ##### / zones / us-central1 -f / instances / api-server-taxd port:8080 kind:compute#backendServiceGroupHealth 我重复了20次安装过程,从创build模板到防火墙规则。 这样做完全没有错误。 我在Google云端控制台的用户界面中进行了validation。 我要疯了。

使用http-proxy进行负载均衡

我正在检查http-proxy模块 ,基本上我知道它在具有相同端口的两个不同主机之间切换。 所以这里的问题是在使用同一台主机的时候可能在两个不同的端口之间切换(例如,两台主机都是IP地址)?

负载平衡与节点和Heroku

我有一个Web应用程序接受来自ios应用程序的API请求。 我的networking应用程序使用Heroku免费的dyno托pipe在Heroku上,每个请求可以处理512 MB的数据。 由于节点是单线程应用程序,一旦我们开始从ios端到Web服务器获得更高级别的stream量,这将是一个问题。 我也不是世界上最富有的人,所以我想知道是否会聪明地创build另一个免费的Heroku应用程序,并使用循环赛方法来平衡从iOS应用程序接收到的负载? 我只需要指出正确的方向。 垂直缩放在经济上不是一个真正的select。

Node.js集群vs多个Docker容器

据我所知,Docker容器使用多个线程,Node.js应用程序只使用一个线程。 通过运行类似于处理Node.js集群的pm2 ,我可以利用Docker容器可用的所有内核。 这是否意味着我可以通过对Node.js进程进行集群来更好地利用每个Docker实例? 如果是这样,这是不是比每个容器简单运行一个单线程的Node.js实例更受欢迎? 一个担心的是,如果这有可能造成Docker容器扩大或缩小其运行的CPU数量的副作用。

我可以通过authentication与HAProxy和socket.io进行粘性会话吗?

我有几个socket.io实例与HAProxy下运行身份validation,我需要强制authentication请求和套接字连接去同一个实例。 我已经根据这个答案build立了HAProxy 到一个SO问题,并进行了一些修改,如下所示: global maxconn 4096 # Total Max Connections. This is dependent on ulimit nbproc 2 defaults mode http frontend all 0.0.0.0:80 timeout client 86400000 default_backend www_backend acl is_websocket hdr(Upgrade) -i WebSocket acl is_websocket hdr_beg(Host) -i ws use_backend socket_backend if is_websocket backend www_backend balance url_param sessionId option forwardfor # This sets X-Forwarded-For timeout server […]

基于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? 有没有可能的并发症?

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连接请求将会分配给不同的进程/服务器,并且没有一个中央资源跟踪所有连接的客户端?