2017-04-03 35 views
-1

所以,我的Web应用程序的结构基于这种文件结构:https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application。 我的应用程序也与Mlab上的mongoDB有连接。如何使用NodeJs实现横向扩展性

什么我的应用程序的功能:

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

现在我需要让我的应用程序横向扩展,但我在这里有点失落:

•正弦我假设我有没有实时的活动我shoudn't需要像socket.io? •我应该添加某种类型的MQ(rabbitMQ,ZMQ等):如果是这样,或许有关于如何操作的指针,因为大多数示例只是使用简单的文本消息。

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

或者我完全错了吗?

P.S .:希望这不是太广泛的问题。

+0

我讨厌这么说,但问题是令人难以置信的广泛。 –

回答

1

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

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

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

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

这些是你应该真正想到的东西:)

+0

非常感谢。现在,我只是添加了nginx来监听本地主机,即端口80,并且还添加了上游服务器,如81,82,83等等。似乎我添加的服务器越多,运行速度越快。在ab测试运行20k个请求和1k并发的情况下,运行3个服务器的结果是~35s,因为在单个服务器上运行相同的测试结果为〜120s。我可以假设这是水平可伸缩性工作或这是别的吗? – orux