我有一个 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 存储接口也实现了自己的批处理。我不确定我对文件存储作为事实来源的信任程度。
那么,这是一种可行的方法吗?