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



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

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

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

我正在考虑为不同类型的数据处理编写单独的node.js应用程序。

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

因此,我希望另外4个单独的应用程序和队列用于实施特殊的实时数据处理。

  • 队列:apache kafka
  • 数据库:Cassandra

我要以正确的方式去还是有更好的方法?

nodejs是单线模型,在您的情况下,主要是处理需要CPU周期的消息。因此,如果消息到达率很高,则编写单独的Node.js应用程序更好。

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

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

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

您将数据放在队列(2.)验证之前(3.)什么是验证)?

否则,这是一个不错的方案。如果您还没有,我会建议您阅读Kafka流及其概念的一些介绍,这就是Kafka在本地进行流处理的方式(该实现仅在Java中,但似乎有一个非正式的Nodejs。端口即可这里)

不用说Kafka流,您也可以直接从传感器发送到Kafka,而不是拥有服务器(这允许您不必担心复制,发行,如果您的服务器崩溃,会发生什么...)nodejs中的Kakfa生产商和消费者(https://github.com/blizzard/node-rdkafka和https://github.com/sohu-co/kafka-node是两个好客户)和几乎所有语言。所有传感器都可以将数据发送到同一主题,或者如果数据根本没有相关的话,则可以将数据发送到不同的主题。

依靠同一Kafka队列的多次处理应用程序的好处是,每种处理都是独立的:您不会通过修改对方来打破一个治疗方法,您可以分开进化它们,等等

您也可以使用Kafka Connect从已验证的数据主题中读取并直接写入Cassandra-您只需要做一些conf,无需Java

也许我误解了您的步骤1-3,但是只能做1和2。一旦数据成功地将数据成功投入Kafka,您可以使用Kafka Connect将副本发送到Cassandra和Cassandra和您的数据库。也许这就是您所说的#3,但如果不是这样,则无需直接从nodejs应用程序写入数据库,因为kafka可以做到这一点。

使用对单个主题订阅的不同消费者组。因此,您需要一个倾听请求的生产商,并将数据放入KAFKA主题中,以及在不同消费者组中的消费者,从而可以做不同的事情。

相关内容

最新更新