繁体   English   中英

Node.js中一个大型应用程序与多个小型应用程序

[英]One Big Application vs Multiple Small Applications in Node.js

我是软件开发的新手。 目前,我正在做一个项目,该项目从安装在不同位置的传感器收集实时数据。 每个传感器将每分钟将数据发送到服务器。 将来,我希望每分钟有10万个传感器将数据发送到服务器。 目前,我正在执行以下操作。

  1. 在Node.js上创建的服务器中的TCP侦听器
  2. 将接收到的数据放入队列
  3. 验证数据并将其推送到数据库

现在,我需要实现许多其他业务逻辑,例如当传感器数据超过预设值时发送SMS或电子邮件。 检测是否发生了不良情况,例如不同类型的实时处理。

我正在考虑为不同类型的数据处理编写单独的Node.js应用程序,如下所示。

  1. TCP Listner(与上面相同)
  2. 将接收到的数据放入队列(与上面相同)
  3. 验证数据并推送到数据库。 (与上述相同)。 如果此传感器需要某种数据处理,我打算将其放入另一个队列
  4. 用于处理此新队列的单独应用程序

因此,我期望另外4个独立的应用程序和QUEUE可以实现特殊的实时数据处理。

  • 队列:Apache Kafka
  • 数据库:Cassandra

我是采取正确的方式还是有更好的方法?

Nodejs是单线程模型,在您的情况下,大多数工作是处理需要cpu周期的消息。 因此,如果消息到达率很高,则编写单独的Node.js应用程序会更好。

并且,如果您的消息具有多种类型,并且每个流程逻辑仅需要处理自己的感兴趣的消息类型,则可以为不同的消息类型创建不同的主题,并且每个进程仅订阅其感兴趣的主题。 它将更快,更优雅。

但是,如果您的流程应用程序需要处理所有消息,则可以使用不同的使用者组来订阅一个主题,而无需将同一条消息放入其他队列。

无论如何,我认为一个线程执行一件事情或一个应用程序执行一件事情是一个好的设计。

您是在验证数据(3.)之前将数据放入队列(2.)-您是否不想先验证数据,然后在处理它们之前将它们推入队列(取决于验证的内容)?

否则,这是一个好的方案。 如果您还没有的话,我建议您阅读一些有关kafka流及其概念的介绍,这是kafka在本地进行流处理的方式(目前仅在Java中实现,但似乎存在非正式的nodejs港口进入这里

不用说kafka流,您也可以直接从传感器发送到kafka,而不用拥有服务器(这使您不必担心复制,分发以及服务器崩溃时会发生的事情...) nodejs( https://github.com/Blizzard/node-rdkafkahttps://github.com/SOHU-Co/kafka-node是两个很好的客户端)的消费者。 如果数据根本不相关,则所有传感器都可以将数据发送到同一主题或不同主题。

关于使用多个应用程序进行处理(依赖于同一个kafka队列)的好处是,每种处理方式都是独立的:您不会通过修改另一种方式来破坏一种方式,可以将它们分开进行开发,等等。

您还可以使用kafka connect读取经过验证的数据主题,然后直接写入cassandra-您只需要做一些conf,这里就不需要Java

也许我会误解您的步骤1-3,但仅执行1和2就足够了。一旦数据成功提交到Kafka中,您就可以使用Kafka Connect将副本发送到Cassandra和您的数据库。 也许这就是您所说的#3的意思,但是如果不是,那么您就不需要从nodejs应用程序直接向数据库进行单独写入,因为Kafka可以做到这一点。

使用订阅了单个主题的不同消费者群体。因此,您需要一个生产者来监听您的请求并将数据放入kafka主题中,并将消费者置于不同消费者群体中,这会做不同的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM