通过远程数据库或rabimtMQ发送的db数据

时间:2019-01-30 06:59:13

标签: node.js mongodb rabbitmq

我在节点js中创建了两个应用程序

i:解析器(服务器1)

ii:带有rest api(服务器2)的功能性应用

每个应用程序都在不同的服务器上运行

数据库(MongoDB)连接在服务器2上

解析器的主要目的是获取硬件设备数据并实现协议并将数据发送到数据库

现在我有两个选择可以将数据从服务器1发送到服务器2 db

1:RemoteDb

2:RabitMQ将数据发送到服务器2,然后将数据保存在localDB中

哪个更好或其他任何解决方案

2 个答案:

答案 0 :(得分:1)

一如既往,这取决于您的要求。
如果您只想存储数据,意味着大部分将操作插入数据库,并且对保存之前从server2处理数据没有要求,则可以选择选项1。

如果您希望将数据库移到与服务器2分离的服务,将来将不会有问题,因为到目前为止,它已经与解析器分离。
另外,最好遵循Single responsibility principle并将服务逻辑分开。
在您的情况下,最好处理解析器模块中的所有解析/保存逻辑。

请注意,如果您想处理大量数据,出于分析目的或其他目的,将脚本与数据库放置在同一服务器上会更快,因为这将消除网络延迟

但是,如果您的API中有其他逻辑。
例如,您想通过websocket通知用户有关更新的信息。
用队列实现逻辑会更容易。
因为解析器只会将消息发送到队列中而忽略它们。
然后,server2上的API将侦听消息并通知用户有关更新的信息。

因此,解决方案是使用远程数据库,如果您有其他要求,请使用队列或Redis或gRPC或任何其他方式来传递服务。



附加链接:

答案 1 :(得分:1)

远程DB连接不是具有多个节点的好方法,请始终使用Redis或Raabbit MQ等通讯协议。让我们举个例子

您已将解析器应用程序部署在3个不同的服务器节点上,并且多个物联网设备正在发送需要解析的连续数据并将其传递到数据库。所以

  1. 使用远程数据库连接将无法快速处理数据及其响应,并且有可能在出现瓶颈时断开连接。
  2. 使用redis-cluster方法可以快速访问它。
  3. 使用Rabbit MQ,消息很难被确认,因此仅将其应用于不会丢失消息的地方。