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

标签 node.js cassandra architecture apache-kafka

我是软件开发新手。目前我正在做一个项目,从安装在不同位置的传感器收集实时数据。每个传感器每分钟都会向服务器发送数据。将来我预计每分钟有 100k 个传感器向服务器发送数据。目前我正在做以下事情。

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

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

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

  1. TCP 监听器(同上)
  2. 将接收到的数据放入队列(同上)
  3. 验证数据并推送到数据库。 (同上)。如果该传感器需要某种数据处理,我计划将其放入另一个队列
  4. 用于处理这个新队列的单独应用程序

所以我期待另外 4 个独立的应用程序和队列来实现特殊的实时数据处理。

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

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

最佳答案

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

如果你的消息有多种类型,每个流程逻辑只需要处理自己感兴趣的消息类型,那么为不同的消息类型创建不同的主题,每个流程只订阅自己感兴趣的主题。它会更快、更优雅。

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

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

关于node.js - Node.js 中的一个大应用程序与多个小应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46011930/

相关文章:

javascript - 当我添加新的中间件来处理express.js中的路径时,404未找到

javascript - 如何让window.location.href执行POST请求

node.js - typescript 。不在特定机器上编译

javascript - 在 header 中传递访问 token 并在JavaScript中进行重定向

java - Cassandra 写入后读取与 LOCAL_QUORUM 不一致

mysql - 在 Spring/J2EE 应用程序中分离只读和读写

bash - 如何检查docker Cassandra实例是否准备好进行连接

scala - 如何使用 Spark DataFrames 和 Cassandra 设置命名策略

c# - 将 xamarin 表单与 IServiceProvider 一起使用

architecture - Apache Open NLP 与 NLTK