URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID13
Нить номер: 985
[ Назад ]

Исходное сообщение
"Передача данных с удаленных систем без потери данных?"

Отправлено alexkv , 01-Авг-19 17:15 
Дано:
-Есть условно несколько удаленных Raspberry Pi (Orange и т.д.), к каждой подключены несколько датчиков. Сами Raspberry Pi подключены к интернету различными способами - где по 3G, где по Wi-Fi где по Ethernet. Канал передачи может прерываться на определенное время.
-Есть сервер с БД. Подключен постоянно к интернету.

Надо:
передавать данные с датчиков на сервер без потерь.

Т.е. скрипт на малине собирает данные с датчиков постоянно. При работающем канале передачи данных эти данные в реальном времени шлются на сервер и там попадают в БД. Если канал перестал работать (пропал 3G например), то данные накапливаются на малинке. При восстановлении канала надо передать накопленные и продолжить слать в реальном времени.

Подскажите пожалуйста концептуально как такое построить.
Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше программировать своих велосипедов.
Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое лучше сделать.


Содержание

Сообщения в этом обсуждении
"Передача данных с удаленных систем без потери данных?"
Отправлено Аноним , 02-Авг-19 08:49 
> Подскажите пожалуйста концептуально как такое построить.

Концептуально - просто, достаточно простенького скрипта.

ПОКА <работаем>

    ПОКА <есть_связь>
        ПЕРЕСЫЛАЕМ <данные> НА СЕРВЕР <сервер>

    ПОКА <нет_связи>
        ПИШЕМ <данные> В ФАЙЛ <аварийный_лог>

    ЕСТЬ ФАЙЛ <аварийный_лог>?
        ДА:
            ПЕРЕСЫЛАЕМ <аварийный_лог> НА СЕРВЕР <сервер>
            СТЕРЕТЬ ФАЙЛ <аварийный_лог>



"Передача данных с удаленных систем без потери данных?"
Отправлено Аноним , 02-Авг-19 11:12 
Кроссавчег!

"Передача данных с удаленных систем без потери данных?"
Отправлено Andrey Mitrofanov_N0 , 02-Авг-19 11:15 
> Кроссавчег!

Кстати, да.  Славно навалил на ТС-а.
Но минус тебе все равно поставил. Ибо.


"Передача данных с удаленных систем без потери данных?"
Отправлено Аноним , 02-Авг-19 11:29 
>> Кроссавчег!
> Кстати, да.  Славно навалил на ТС-а.
> Но минус тебе все равно поставил. Ибо.

Вот те на!
Не шалю, никого не трогаю, починяю примус и вообще,
я совершенно не понимаю причин такого резкого обращения со мной.
И ещё считаю своим долгом предупредить, что аноним - древний и неприкосновенный аккаунт.



"Передача данных с удаленных систем без потери данных?"
Отправлено Andrey Mitrofanov_N0 , 02-Авг-19 11:36 
> Не шалю, никого не трогаю,
> я совершенно не понимаю
>древний и неприкосновенный
> аккаунт.

Да, норм.  Мы тут все никого не _трогаем_.  Кучи-то не трогаем, наваливаем.


"Передача данных с удаленных систем без потери данных?"
Отправлено ыы , 05-Авг-19 11:04 
>[оверквотинг удален]
>     ПОКА <нет_связи>
>         ПИШЕМ <данные> В ФАЙЛ
> <аварийный_лог>
>     ЕСТЬ ФАЙЛ <аварийный_лог>?
>         ДА:
>            
> ПЕРЕСЫЛАЕМ <аварийный_лог> НА СЕРВЕР <сервер>
>            
> СТЕРЕТЬ ФАЙЛ <аварийный_лог>
>

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


"Передача данных с удаленных систем без потери данных?"
Отправлено Аноним , 05-Авг-19 14:22 
> По такой логике любые внешние задержки (в сети например) будут тормозить прием
> локальных данных с датчиков.

ТС просил концептуальное решение, поэтому в первом приближении полагаем линию связи - прямой, передаваемые данные - шарообразными и неупругими...


"Передача данных с удаленных систем без потери данных?"
Отправлено ыы , 05-Авг-19 16:11 
>> По такой логике любые внешние задержки (в сети например) будут тормозить прием
>> локальных данных с датчиков.
> ТС просил концептуальное решение, поэтому в первом приближении полагаем линию связи -
> прямой, передаваемые данные - шарообразными и неупругими...

Причем линия связи передает данные мгновенно, вопреки всем реалиям и здравому смыслу...


"Передача данных с удаленных систем без потери данных?"
Отправлено fantom , 05-Авг-19 16:31 
>>> По такой логике любые внешние задержки (в сети например) будут тормозить прием
>>> локальных данных с датчиков.
>> ТС просил концептуальное решение, поэтому в первом приближении полагаем линию связи -
>> прямой, передаваемые данные - шарообразными и неупругими...
> Причем линия связи передает данные мгновенно, вопреки всем реалиям и здравому смыслу...

И в неограниченном объеме :)


"Передача данных с удаленных систем без потери данных?"
Отправлено Andrey Mitrofanov_N0 , 06-Авг-19 08:16 
>>> прямой, передаваемые данные - шарообразными и неупругими...
>> Причем линия связи передает данные мгновенно, вопреки всем реалиям и здравому смыслу...
> И в неограниченном объеме :)

Вооот!  Берём Реализацию выше за основу и подкладываем её же ей же в качестве первого приближения реализации линии связи.  Увеличиваем вложенность до тех пор, пока задача не сойдётся.

Профит.


"Передача данных с удаленных систем без потери данных?"
Отправлено Ann None , 02-Авг-19 11:30 
>[оверквотинг удален]
> Т.е. скрипт на малине собирает данные с датчиков постоянно. При работающем канале
> передачи данных эти данные в реальном времени шлются на сервер и
> там попадают в БД. Если канал перестал работать (пропал 3G например),
> то данные накапливаются на малинке. При восстановлении канала надо передать накопленные
> и продолжить слать в реальном времени.
> Подскажите пожалуйста концептуально как такое построить.
> Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше
> программировать своих велосипедов.
> Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое
> лучше сделать.

По описанию - классическая очередь сообщений. Для начала можно посмотреть на RabbitMQ.


"Передача данных с удаленных систем без потери данных?"
Отправлено alexkv , 02-Авг-19 14:00 
> По описанию - классическая очередь сообщений. Для начала можно посмотреть на RabbitMQ.

Спасибо за совет. Пошел изучать.


"Передача данных с удаленных систем без потери данных?"
Отправлено fantom , 05-Авг-19 11:53 
>[оверквотинг удален]
> Т.е. скрипт на малине собирает данные с датчиков постоянно. При работающем канале
> передачи данных эти данные в реальном времени шлются на сервер и
> там попадают в БД. Если канал перестал работать (пропал 3G например),
> то данные накапливаются на малинке. При восстановлении канала надо передать накопленные
> и продолжить слать в реальном времени.
> Подскажите пожалуйста концептуально как такое построить.
> Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше
> программировать своих велосипедов.
> Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое
> лучше сделать.

Одна тулза пишет данные в файл/базу/очередь/буфер/свой_вариант
Вторая- вынимает и пропихивает дальше по принципу транзакций, пока транзакция не закрыта данные не считаются переданными.


"Передача данных с удаленных систем без потери данных?"
Отправлено fantom , 05-Авг-19 11:56 
>[оверквотинг удален]
>> то данные накапливаются на малинке. При восстановлении канала надо передать накопленные
>> и продолжить слать в реальном времени.
>> Подскажите пожалуйста концептуально как такое построить.
>> Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше
>> программировать своих велосипедов.
>> Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое
>> лучше сделать.
> Одна тулза пишет данные в файл/базу/очередь/буфер/свой_вариант
> Вторая- вынимает и пропихивает дальше по принципу транзакций, пока транзакция не закрыта
> данные не считаются переданными.

А вообще - классическая электронная почта как раз решает поставленную задачу :)


"Передача данных с удаленных систем без потери данных?"
Отправлено alexkv , 05-Авг-19 12:11 

> А вообще - классическая электронная почта как раз решает поставленную задачу :)

Почтовые голуби тоже.
Почему я не буду их использовать????


"Передача данных с удаленных систем без потери данных?"
Отправлено alexkv , 05-Авг-19 12:12 
> Одна тулза пишет данные в файл/базу/очередь/буфер/свой_вариант
> Вторая- вынимает и пропихивает дальше по принципу транзакций, пока транзакция не закрыта
> данные не считаются переданными.

Это понятно.
Я интересовался какие именно тулзы можно использовать для решения такой задачи.


"Передача данных с удаленных систем без потери данных?"
Отправлено fantom , 05-Авг-19 12:24 
>> Одна тулза пишет данные в файл/базу/очередь/буфер/свой_вариант
>> Вторая- вынимает и пропихивает дальше по принципу транзакций, пока транзакция не закрыта
>> данные не считаются переданными.
> Это понятно.
> Я интересовался какие именно тулзы можно использовать для решения такой задачи.

Хоть POST запросы посылайте в цикле пока нужный код ответа от сервера не получите.
Хоть SNMP set.
Хоть INSERT в базу пока база Ok не ответит.
Хоть в subversion тупо по крону коммитить.
Тут что вам ближе тем и пользуйтесь.


"Передача данных с удаленных систем без потери данных?"
Отправлено Павел Отредиез , 16-Авг-19 17:29 
>[оверквотинг удален]
> Т.е. скрипт на малине собирает данные с датчиков постоянно. При работающем канале
> передачи данных эти данные в реальном времени шлются на сервер и
> там попадают в БД. Если канал перестал работать (пропал 3G например),
> то данные накапливаются на малинке. При восстановлении канала надо передать накопленные
> и продолжить слать в реальном времени.
> Подскажите пожалуйста концептуально как такое построить.
> Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше
> программировать своих велосипедов.
> Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое
> лучше сделать.

Тебе хорошо подойдет smtp протокол для этого. Клиенты пусть имеют локальные smtp сервера, которые копят очередь и отсылают на центральный сервер. На центральном сервере транспортом пайп можно письма парсить и вносить в БД.


"Передача данных с удаленных систем без потери данных?"
Отправлено Павел Отредиез , 16-Авг-19 17:41 
>[оверквотинг удален]
>> то данные накапливаются на малинке. При восстановлении канала надо передать накопленные
>> и продолжить слать в реальном времени.
>> Подскажите пожалуйста концептуально как такое построить.
>> Хотелось бы максимально использовать системные возможности Linux и свободного ПО, поменьше
>> программировать своих велосипедов.
>> Чет я потерялся, не понимаю с использованием чего (технологии, протоколы, ПО) такое
>> лучше сделать.
> Тебе хорошо подойдет smtp протокол для этого. Клиенты пусть имеют локальные smtp
> сервера, которые копят очередь и отсылают на центральный сервер. На центральном
> сервере транспортом пайп можно письма парсить и вносить в БД.

Делается элементарно. Допустим у тебя raspbian с exim. Все шлют на input@10.0.0.1 согласно политике повторов и по cron прогоном очереди. На сервере в ложишь /home/input/.forward с содержимым "| input.sh ". Каждое входящее письмо попадает в экземпляр input.sh на stdin. Все конфигурации exim дефолтные ничего не нужно придумывать. При наличии связи экзим доставляет немедленно, при отсутствии копит очередь.


"Передача данных с удаленных систем без потери данных?"
Отправлено Павел Отредиез , 16-Авг-19 17:47 
>[оверквотинг удален]
>>> лучше сделать.
>> Тебе хорошо подойдет smtp протокол для этого. Клиенты пусть имеют локальные smtp
>> сервера, которые копят очередь и отсылают на центральный сервер. На центральном
>> сервере транспортом пайп можно письма парсить и вносить в БД.
> Делается элементарно. Допустим у тебя raspbian с exim. Все шлют на input@10.0.0.1
> согласно политике повторов и по cron прогоном очереди. На сервере в
> ложишь /home/input/.forward с содержимым "| input.sh ". Каждое входящее письмо попадает
> в экземпляр input.sh на stdin. Все конфигурации exim дефолтные ничего не
> нужно придумывать. При наличии связи экзим доставляет немедленно, при отсутствии копит
> очередь.

Отправка письма echo "Мой текст" | mail input@10.0.0.1


"Передача данных с удаленных систем без потери данных?"
Отправлено Аноним , 21-Сен-20 17:01 
БД с репликацией локально, ту же MySQL можно взять.
Модель данных можно придумать такую, чтобы это был кольцевой буфер и не нужно было специально удалять старые данные, чтобы они перезаписывались при нормальной работе.  

replace into data_table ( KEY, TS, VALUE) values ( количество секунд от начала суток, время, значение)

На том конце выбираете по TS и что-то делаете.


"Передача данных с удаленных систем без потери данных?"
Отправлено Брат Анон , 19-Ноя-20 09:25 
> БД с репликацией локально, ту же MySQL можно взять.
> Модель данных можно придумать такую, чтобы это был кольцевой буфер и не
> нужно было специально удалять старые данные, чтобы они перезаписывались при нормальной
> работе.

БД? На ПЛК? Удачи.