Отправка данных в бэкэнд Django из RaspberryPi Sensor (частота, массовое обновление, надежность) - PullRequest
0 голосов
/ 11 ноября 2018

Я сейчас работаю над проектом Raspberry Pi / Django, немного более сложным, чем я привык. (Я либо делаю местные проекты Raspberry Pi, либо простые сайты Django; никогда не объединяю их!)

Идея состоит в том, чтобы два Raspberry Pi собирали информацию с помощью локального скрипта Python, каждый из которых получал бы ввод из одного канала HDMI (я понял всю эту часть - я ДУМАЮ), используя обработку изображений. Теперь я хочу, чтобы эти два Raspberry Pi (которые не общаются друг с другом) подключались к внутреннему серверу, который будет объединять, хранить (и обрабатывать) информацию, собранную моими двумя Pis

Я ожидаю, что каждый Pi будет работать по одному кадру в секунду, сравнивая его с кадром на секунду раньше (только несколько разных вещей, которые он ищет), изолировать любое новое событие и отправить его на сервер. Поэтому я ожидаю не более дюжины двоичных точек с метками времени в секунду.

Теперь, что умный способ сделать это здесь?

  • Разве я вступаю в контакт с бэкэндом каждую секунду? Каждые 10 секунд?
  • Как сделать эти массовые запросы HttpRequest? Через POST-запрос? Через простой текстовый файл, который я отправляю для обработки в Django? (я нашел некоторую информацию о «массовых обновлениях» для django, но я не уверен, что это полностью покрывает)
  • Как мне сделать это надежным? Как мне убедиться, что все данные успешно переданы перед удалением журнала локально? (если один вызов по какой-либо причине не выполняется или задерживается, как мне убедиться, что следующий вызов компенсирует потерю информации?

В основном, я прошу совета по созданию проекта на основе IOT, в котором датчик собирает объемную информацию и хочет отправить ее на внутренний сервер для обработки, и как должен быть разработан этот процесс архивирования.

PS: я ожидаю, что часть обработки изображений (с одним кадром в секунду) будет достаточно быстрой на моем Pi Zero (поскольку это ОЧЕНЬ просто); отставание на этом уровне не должно быть проблемой.

PPS: я использую бэкэнд django (даже если это кажется немного излишним) / потому что я уже достаточно хорошо знаю рамки b / потому что я рассчитываю построить показатели производительности в реальном времени из собранных комбинированных точек данных, используя django, и отображать их (почти) в режиме реального времени на веб-странице.

Большое спасибо!

1 Ответ

0 голосов
/ 11 ноября 2018

Это отчасти зависит от того, насколько вы должны быть устойчивы.Если вы действительно не можете позволить себе потерять одно обновление, я бы подумал об использовании очереди сообщений, такой как RabbitMQ - клиенты добавляли бы вещи прямо в очередь, а сервер по очереди извлекал их, без необходимости вовлекатьHTTP-запросы вообще.

В противном случае было бы намного проще просто POST-данные каждого кадра в некотором сериализованном формате (например, JSON), а Django просто десериализовал бы и выполнял бы итерацию по списку, сохраняя каждую запись в БД.Это должно быть достаточно быстрым для скорости, которую вы описываете - я ожидаю, что сохранение записи из дюжины дБ займет значительно меньше полсекунды - но это все еще оставляет проблему того, что делать, если что-то зависнетпо какой-то причине.Поможет установить сверхкороткое время ожидания на сервере, равно как и сохранение данных, которые будут опубликованы, до тех пор, пока вы не получите подтверждение того, что они были сохранены, и создание уникальных идентификаторов на клиенте, чтобы гарантировать, что запрос идемпотентен.

...