【问题标题】:Using NATS Streaming Server as the primary data store for IoT position data?使用 NATS 流服务器作为物联网位置数据的主要数据存储?
【发布时间】:2017-11-28 11:54:02
【问题描述】:

我有一个 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 存储接口也实现了自己的批处理。我不确定我对文件存储作为事实来源的信任程度。

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

【问题讨论】:

    标签: database postgresql iot event-sourcing nats.io


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2015-01-25
    • 2014-03-26
    • 2019-09-03
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多