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

6mw9ycah  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(527)

我是软件开发新手。目前,我正在做一个项目,收集实时数据从传感器安装在不同的位置。每个传感器每分钟都会向服务器发送数据。在未来,我期望每分钟有10万个传感器向服务器发送数据。目前我正在做以下工作。
在node.js上创建的服务器中的tcp侦听器
将接收到的数据放入队列
验证数据并将其推送到数据库
现在我需要实现很多其他业务逻辑,比如当传感器数据超过预设值时发送sms或电子邮件。检测是否有不好的事情发生,比如不同类型的实时处理。
我正在考虑为不同类型的数据处理编写单独的node.js应用程序,如下所示。
tcp列表器(同上)
将接收到的数据放入队列(同上)
验证数据并推送到数据库(同上)。如果这个传感器需要某种数据处理,我计划把它放到另一个队列中
用于处理此新队列的单独应用程序
所以我期待着另外4个独立的应用程序和队列来实现特殊的实时数据处理。
队列:Apache·Kafka
数据库:cassandra
我走的是正确的路还是有更好的方法?

z9zf31ra

z9zf31ra1#

nodejs是单线程模型,在您的情况下主要工作是处理需要cpu周期的消息。因此,如果消息到达率较高,编写单独的node.js应用程序会更好。
如果消息有很多类型,每个进程逻辑只需要处理自己感兴趣的消息类型,那么为不同的消息类型创建不同的主题,每个进程只订阅自己感兴趣的主题。它会更快更优雅。
但如果流程应用程序需要处理所有消息,则可以使用不同的使用者组来订阅一个主题,而不需要将相同的消息放入其他队列。
不管怎样,我认为一个线程做一件事或一个应用程序做一件事是一个好的设计。

qacovj5a

qacovj5a2#

在验证数据(3.)之前,您正在将数据放入队列(2.)—您不想先验证数据,然后在处理数据之前将其推入队列(取决于验证的内容)?
否则,这是一个好的场景。如果您还没有,我建议您阅读一些kafka streams及其概念的介绍,这是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

f4t66c6m

f4t66c6m3#

使用订阅单个主题的不同消费者组。因此,您需要一个生产者来侦听您的请求并将数据放入kafka主题中,而消费者在不同的消费者组中执行不同的操作。

oug3syen

oug3syen4#

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

相关问题