The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Передача данных с удаленных систем без потери данных?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Оптимизация и Промышленные системы (Увеличение наджности)
Изначальное сообщение [ Отслеживать ]

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

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

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

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


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

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

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

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

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

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


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Передача данных с удаленных систем без потери данных?"  –1 +/
Сообщение от Аноним (-), 02-Авг-19, 11:12 
Кроссавчег!
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

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

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

Профит.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Передача данных с удаленных систем без потери данных?"  +/
Сообщение от alexkv (ok), 05-Авг-19, 12:11 

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

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Передача данных с удаленных систем без потери данных?"  +/
Сообщение от Павел Отредиезemail (?), 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

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру