设计Nodejs WebApp

时间:2016-03-17 17:03:10

标签: node.js web-applications socket.io http-caching

我目前正在构建一个webapp来显示远程机械的实时仪表板。我正在尝试使用Nodejs来实现该系统,我希望能够对我如何实现它的想法进行批评。

该应用程序将有两个主要目标:

1。)实时显示机器的状态,每分钟左右更新一次

2。)每15分钟将机器状态保存到数据库。

为了访问数据,我需要向第三方供应商发出API请求以从其数据库中提取数据。我需要为每台机器提出大约6个请求,并且到年底我将不得不一次支持大约20台机器。综合考虑,我需要每分钟发出大约120个请求,以保持机器的最新信息。

使用该网络应用程序的用户只能在登录时查看这些计算机的子集。但是,有些机器将在不同用户之间共享,因此我不是为同时查看同一台机器的用户复制API调用,而是建立一个每分钟刷新一次的所有机器数据的缓存,然后只向每个用户发送与他们相关的数据部分。此外,这对于数据记录目的很方便,因为当我想保存数据时,我只需要保存整个缓存。

我所关注的一个问题是能够及时完成数据获取API请求,以便重新显示数据。我知道我可以使用异步库在并行调用中收集数据,但是我担心在生成第二次更新之前请求不会及时完成,导致请求建立。一个选择是我可以让每个api请求独立于其他请求将其数据发送到前端,但我希望能够批量更新所有内容。

我在构建系统时遇到的另一个问题是socket.io是否是满足我需求的有用资源。我知道这个库可以帮助你生成实时应用程序,这是我需要做的,但从我读过的内容来看,socket.io似乎是为所有用户共享所有更新,而不是仅向每个用户发送部分更新。我可以在我的应用程序的前端添加一些代码来定期请求更新,而不是使用socket.io来发送服务器驱动的更新。使用此解决方案意味着我还可以让每个客户端只需要他们需要的数据。但是,我仍然很好奇图书馆是否可以提供任何可能对开发这个项目有用的东西。

我最后一个问题与扩展应用程序有关。在今年年底之后,我需要监控越来越多的机器,并且每增加一台机器,我需要抓取和存储的数据量也会增加。如果有人有任何关于如何尽早开始设计系统以便扩展的建议,我想听听它。

我感谢任何反馈。感谢。

2 个答案:

答案 0 :(得分:0)

无法解决提出的所有观点,但我会:

1 - 使用socket.io

允许数据从客户端“发送”到服务器,反之亦然。服务器可以向所有客户端或一个特定客户端广播数据。

我会研究socket.io如何扩展。

注意NGINX适用于socket.io

2 - 如果可以接受,我建议使用Dockerised解决方案。 Docker允许您容纳您的解决方案。例如,您的Docker容器将容纳您的Web服务器和要提供的文件。这使得关注点完全分离。您也可以轻松地将解决方案推送到docker(想想推送和拉动VM)。

从容器中的任何位置提取解决方案使部署变得如此简单。

请注意,Docker在扩展方面非常出色。您可以创建基本图像 - 例如一个无状态的Web服务器 - 然后从该图像中调出3个独立的Docker容器。在他们面前加载负载均衡器,只需添加更多容器即可。

答案 1 :(得分:0)

来自@ danday74的好答案......

现在重启,我会:

  • 使用像Meteor或Feathers.Js这样的实时,支持休息,可扩展的基础。

  • 使用JWT进行身份验证,因为它可以轻松移植,测试和扩展。

  • 使用易于部署的易于扩展的平台提供商,如DigitalOcean,Azure,Heroku等。在DigitalOcean上 Dokku 特别有效!