LINUX.ORG.RU

Сервер команд

 


0

1

Добрый вечер. Встала у меня задача управлять звездолетом, вот например хочу я ему дать команду, перезапусти двигатель. Земля то вращается и следовательно в моей модели звездолету проще обращаться на землю за новыми командами. Вот обратился звездолет к земле и получил команду с id:228 и кодом 14, что означает перезапуск двигателя, запустился цикл перезапуска на звездолете, но криворукий программист во всем виноват (как всегда) и все грохнулось и начал сам бортовой компьютер перезагружаться и вот опять звездолет ждет удобного момента что бы получить команды с земли. А что делать? Может быть после получения команды сохранять ее в энергонезависимую память и вести собственный список команд полученных. А ведь те команды что уже исполнил надо квитировать, что бы они канал связи не забивали. Причем звездолетов у меня несколько и каждый опрашивает сервер на наличие новых команд и отсылает телеметрию. Соответственно вопрос, к какому классу задач относится разработка подобной системы? Где про все эти очереди команд, квитирование, приоритеты почитать? С чего подступиться, как подойти к задаче.



Последнее исправление: patriarh_kuril (всего исправлений: 1)

Ответ на: комментарий от anonymous

Телеметрию он может отсылать по команде, а может в случае нештатных ситуаций и почаще. Еще советский конструктор Черток завещал, что телеметрия это святое.

patriarh_kuril
() автор топика

Надеюсь, это не в продакшн, так сказать, пойдет? Или вы там опять глонасс запускаете?

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

вы там опять глонасс запускаете?

Бери выше. Сириус-Грунт.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Я думаю тут задача немного шире, посылать сообщение после принятия команды к исполнению. Если нам например надо 5 команд переслать, что бы знать, что 1,2,3 уже приняты, а во время 4 и 5 произошел сбой.

patriarh_kuril
() автор топика

С чего подступиться, как подойти к задаче.

Посмотри на мессенджеры, в частности - уведомление о доставке и о прочтении адресатом сообщения. Всё уже придумано до тебя.

vvn_black ★★★★★
()
Ответ на: комментарий от Zhbert

Ну если руки дойдут то может и в продакшен после того как напишем верификацию ПО, построим конечные автоматы. Просто проблема стоит очень остро и надо ее бы решить.

patriarh_kuril
() автор топика
Ответ на: комментарий от patriarh_kuril

Если нам например надо 5 команд переслать, что бы знать, что 1,2,3 уже приняты

Подтверждения вроде как должны решать эту проблему. Правда, они сами могут потеряться. Или нет?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Да я не думаю, что есть что-то сложное, уже решал подобные задачи, просто вот на асинхронные системы хорошо ложится теория автоматов, а с этой штуковиной наверняка там есть уже что-то кондовое, проверенное годами врод xml-rpc подхода или там еще очереди сообщений, не очень в этих хипстерских темах разбираюсь

patriarh_kuril
() автор топика

с некоторых пор пишу (ще не готово) демона который на основании ответов вызываемых внешних скриптов или бинарей вызывает другие внешние скрипты или бинари. оно?

deep-purple ★★★★★
()
Ответ на: комментарий от Nervous

Да, все что может потеряться, может потеряться в любой момент и подтверждения могут потеряться и квитанции потеряться и оператору пульта управления надо блокировать возможность послать два перезапуска подряд.

patriarh_kuril
() автор топика
Ответ на: комментарий от patriarh_kuril

врод xml-rpc подхода или там еще очереди сообщений

Ну ты мешаешь тёплое и мягкое.

Рассмотри логику брокера сообщений:

  • есть сервер, и есть клиенты - спутники, звездолёты и ЦУП;
  • клиенты, которые спутники и звездолёты постоянно шлют телеметрию, причём им не важно дошла она до адресата или нет;
  • клиент ЦУП подписан на на конкретный спутник или на все и соответственно получает телеметрию, что он ней дальше делает уже не важно;
  • ЦУП анализируя телеметрию шлёт команды спутникам;
  • в свою очередь спутники подписаны на ЦУП и каждый получает свою команду и в сообщении телеметрии отражает результат её выполнения.

upd. Всё общение идёт через сервер, а не на прямую «ЦУП-спутник». Т.е. «стандартный» pub/sub.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 2)
Ответ на: комментарий от patriarh_kuril

на самом деле цэ система мониторинга, поищи срели существующих, можт подойдет

deep-purple ★★★★★
()

Соответственно вопрос, к какому классу задач относится разработка подобной системы?

Алгоритмы консенсуса в распределённых системах.

С чего подступиться, как подойти к задаче.

Начать читать отсюда: https://en.wikipedia.org/wiki/Consensus_algorithm

i-rinat ★★★★★
()

Вообще, можно подсмотреть принципы платежных систем - у них сбой возможен на абсолютно любом этапе, всё рассчитано так, чтобы эти сбои не приводили к двойным списаниям либо ложным зачислениям и так далее, противостоят попыткам взломать

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от vvn_black

Я так понял, если использую протокол AMQP с брокерами-подписчиками и прочим мне надо еще этот компонент на сервер управления накатывать?

patriarh_kuril
() автор топика
Ответ на: комментарий от Begemoth

Формально, наверное, хватит, да. Но если что-то подобное делать, нужно ведь ещё передавать подтверждения получения, статус выполнения, ту же телеметрию с привязкой к текущим командам. Не получится ли там в итоге консенсус-велосипед?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ну вот я сейчас поисследую немного, просто на хабре нашел статью, https://habr.com/ru/post/149694/ Даже не знаю, это сейчас используется? Потом буду смотреть про консенсунс. Я так понимаю, есть уже написанные сервера протокола AMQP и их надо на машину накатывать, что бы можно было с ними работать?

patriarh_kuril
() автор топика
Ответ на: комментарий от patriarh_kuril

Я так понимаю, есть уже написанные сервера протокола AMQP и их надо на машину накатывать, что бы можно было с ними работать?

Там есть на эту тему комментарий: https://habr.com/ru/post/149694/#comment_20197412

про консенсунс

Как выше уже говорил @Begemoth, консенсус это оверкил в данной ситуации.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

подтверждения получения

получатель этого подтверждения должен быть идемпотентным и всё

статус выполнения, ту же телеметрию

это вообще может доставляться at-most-once. Другой вопрос, что API должен проектироваться для предоставления атомарных операций, а не в виде «запросили статус - проверили - послали команду».

Не получится ли там в итоге консенсус-велосипед

Так что нет не получится. С другой стороны можно брать уже готовое ПО, которое этот самый распределённый консенсус реализует, Consul, например.

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.