1

我有一个 Mosquitto 代理,它从远程设备接收定位信息。

我需要将这些数据存储在某个地方以供其他微服务处理。

目前有一个Node.js进程订阅broker,批量写入Postgres数据库。

Devices -> Mosquitto -> DB writer -> (source-of-truth) Postgres

(source-of-truth) -> Service A
                  -> Service B

但我看到的问题是,现在需要处理此位置数据的任何其他服务都需要查询 Postgres 数据库。

约束:这适用于本地部署,因此理想情况下我们希望尽可能少地维护。一个带有数据库的虚拟机,可能还有一个指向客户维护的数据库的链接。

作为传感器数据真实来源的数据库的替代方案是类似于 Kafka 的事件日志/事件源方法。然后将有一个代理订阅者,所有微服务都可以从中读取,并在出现故障时从中断的地方继续。

因为它是内部部署的,所以我想要比 Kafka 更轻量级的东西,并且找到了 NATS Streaming Server。

现在,可以通过配置数据存储来持久化 NATS 事件日志。它目前支持简单文件存储和 SQL 存储。

现在,如果我使用 SQL 存储,将原始消息存储到数据库、从数据库读取然后再次存储它们似乎是浪费时间,而且对性能不利。SQL 存储接口也实现了自己的批处理。我不确定我对文件存储作为事实来源的信任程度。

那么,这是一种可行的方法吗?

4

1 回答 1

3

通过使用 MaxInflight 和 ManualAckMode 创建订阅,您可以在 NATS Streaming 中“批量”使用消息。如果没有收到来自客户端的相应消息确认,服务器将不会发送超过 MaxInflight 消息。

如果您需要在存储之前进行转换,我了解您的过程。但是,如果您只是不信任来自 NATS Streaming 服务器的 FileStore 或 SQLStore,那么您为什么首先要使用 NATS Streaming?也就是说,这些商店是由编写 NATS 流服务器的同一个人(包括我)实施的;-)

于 2017-11-28T17:41:07.210 回答