Использование потокового сервера NATS в качестве основного хранилища данных для данных о местоположении IoT?
У меня есть брокер Mosquitto, который получает информацию о местоположении с удаленных устройств.
Мне нужно хранить эти данные где-то для обработки другими микро-сервисами.
В настоящее время существует процесс Node.js, который подписывается на брокер и записывает данные в базу данных Postgres в пакетном режиме.
Devices -> Mosquitto -> DB writer -> (source-of-truth) Postgres
(source-of-truth) -> Service A
-> Service B
Но проблема, которую я вижу, состоит в том, что теперь любой другой сервис, который должен обрабатывать эти данные о местоположении, должен запрашивать базу данных Postgres.
Ограничение: это для локальных развертываний, поэтому в идеале мы хотим поддерживать как можно меньше. Одна виртуальная машина с базой данных и, возможно, ссылка на базу данных, поддерживаемую клиентом.
Альтернативой базе данных в качестве источника правды для данных датчиков является кафка-подобный подход к журналу событий / источнику событий. Тогда у брокера был бы один подписчик, и все микросервисы могли бы читать с него и выбирать, где они остановились, если они выйдут из строя.
Потому что это локально, я хочу что-то более легкое, чем Kafka, и нашел NATS Streaming Server.
Теперь журнал событий NATS можно сохранить, сконфигурировав его с хранилищем данных. В настоящее время он поддерживает простое хранилище файлов и хранилище SQL.
Теперь, если я использовал хранилище SQL, кажется, что пустая трата времени на сохранение необработанных сообщений в базу данных, чтение из базы данных, а затем на их сохранение, плюс плохая производительность. В интерфейсе хранилища SQL также реализована собственная пакетная обработка. Я не уверен, насколько я доверяю хранилищу файлов как источнику правды.
Итак, это жизнеспособный подход?
1 ответ
Вы можете получать сообщения "партиями" в NATS Streaming, создавая подписку с помощью MaxInflight и ManualAckMode. Сервер не будет отправлять больше сообщений MaxInflight без получения соответствующих сообщений от клиентов.
Если вам нужно выполнить преобразование перед сохранением, я понимаю ваш процесс. Однако, если вы просто не доверяете FileStore или SQLStore с сервера потоковой передачи NATS, зачем вам в первую очередь использовать потоковую передачу NATS? То есть магазины были реализованы теми же людьми (включая меня), которые написали сервер потоковой передачи NATS;-)