【问题标题】:How to implement horizontall scalability using NodeJs如何使用 Node Js 实现水平可扩展性
【发布时间】:2017-08-27 23:40:36
【问题描述】:

所以,我有一个基于此文件结构的 Web 应用程序:https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application。 我的应用程序还连接到 Mlab 上的 mongoDB。

我的应用做了什么:

  • 允许用户登录/注册;
  • 从 mlab 中检索数据;
  • 检索到的数据可以由用户评分;
  • 管理员可以删除检索到的数据;
  • 用户可以向db添加数据(数据就是训练计划);

现在我需要让我的应用水平扩展,但我有点迷失了:

•Sine 我假设没有实时活动,我不需要像 socket.io 这样的东西吗? •我是否应该添加某种 MQ(rabbitMQ、ZMQ 等):如果是这样,也许有任何关于如何添加的指针,因为大多数示例只是使用简单的文本消息。

•我很确定我需要一些负载平衡器。 Nginx,HaProxy ...我可能应该更改我的快速服务器设置以首先侦听多个端口,对吗?

或者我完全错了?

P.S.:希望这不是一个太宽泛的问题。

【问题讨论】:

  • 我不想这么说,但这个问题非常广泛。

标签: javascript node.js nginx scalability


【解决方案1】:

不同的需求需要不同的方法:)

这些可以根据您的需要而有所不同。不是每个可扩展的应用程序都必须拥有它们。如果您希望应用程序是异步的,您可以将所有请求放在一个队列中并立即返回给客户端。然后您可能需要一个推送机制来通知客户端操作结束. (Socket.io、RabbitMQ 等)

当然,您需要一个反向代理来将请求分发到负载平衡或基于工作负载的不同服务器(HAProxy 等)

当你想要扩展应用程序时,你需要注意的第一件事是有一个无状态的结构。或者让它们脱离进程。(例如会话、缓存、文件服务器)你需要的第二件事需要注意的是身份验证阶段。从 ServerA 登录的客户端在后续请求中可能会在 ServerB 上遇到“未授权”。您还应该考虑应用程序使用的资源。虽然这些资源服务于单个服务器,但它们将开始同时响应来自五到十个服务器的数百万个请求。有监控实例之类的事情。还有很多类似的事情。

这些是你真正应该考虑的事情:)

【讨论】:

  • 非常感谢。现在我只是简单地添加了 nginx 来监听本地主机,即端口 80,还添加了上游服务器,比如 81、82、83 等……看起来我添加的服务器越多,程序运行的速度就越快。使用 ab 测试运行 20k 请求和 1k 并发,运行 3 台服务器时的结果约为 35 秒,而在单个服务器上运行相同的测试结果约为 120 秒。我可以假设这是水平可扩展性工作还是其他什么?
猜你喜欢
  • 2011-09-11
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 2021-06-03
  • 2020-02-19
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多