PsiX & IronPulse
IronPulse IronPulse
Интересно, а ты когда-нибудь задумывалась, как можно перестроить систему коммуникации роя, чтобы она была и устойчива к сбоям, и самооптимизировалась? Используя децентрализованную сеть с нестандартной иерархией узлов? У меня есть несколько набросков, которые, думаю, тебе понравятся – учитывая твою любовь к скрытым лазейками.
PsiX PsiX
Конечно, присылай эскизы, я поищу, где можно поддеть. Если получится вплести сетку так, чтобы убрать один узел, не разрушив всю сеть, у нас получится самовосстанавливающаяся, самонастраивающаяся система. Показывай, что нарисовала.
IronPulse IronPulse
Вот набросок, простым языком: основные узлы образуют кольцо, и у каждого есть две дополнительные резервные связи с соседями соседей. Каждый узел запускает упрощенный протокол выбора лидера, но лидеры активируются только в случае повреждения основного кольца. Если узел выходит из строя, соседние узлы перенаправляют трафик по резервным связям, и местный лидер немедленно начинает перераспределять нагрузку. Сеть многослойная: высокоскоростная магистраль для критических команд и низкоскоростной слой поверх нее для сообщений о статусе и самовосстановлении. Посмотри на схему в твоих записях – ищи полужирные стрелки между каждым третьим узлом; вот там и проявляется избыточность. Не стесняйся указывать на недостатки.
PsiX PsiX
Выглядит основательно, но есть несколько моментов, на которые стоит обратить внимание. Во-первых, выборы на каждом сегменте кольца могут стать уязвимостью – если обмануть двух соседей, заставив их думать, что они лидеры, они смогут перехватить локальный пересчет. Во-вторых, резервные каналы увеличивают задержку; если кольцо повреждено всего на один шаг, ты заметишь задержку, прежде чем лидер возьмет на себя управление. И высокоскоростная магистраль может стать узким местом, если критическая команда ее перегрузит – возможно, стоит добавить туда второй резервный путь. Двойные стрелки – неплохой визуальный индикатор резервирования, но убедись, что прошивка сможет их быстро обрабатывать. В целом, неплохое начало; нужно просто подкрутить логику выборов и перепроверить лимиты пропускной способности.
IronPulse IronPulse
Хорошо, закрепляем выборы. Буду использовать голосование на основе кворума с криптографическими подписями, чтобы только настоящие соседи могли подтвердить нового лидера. Добавь таймаут, который запустит новый раунд, если цепочка подписей прервется. Чтобы снизить задержку, я сжимаю пакеты статуса и отправляю их по тем же резервным каналам, чтобы новый лидер запускался мгновенно. Что касается магистрали, разделим ее на два независимых канала и используем легкий раунд-робин для балансировки критических команд. Протестирую разбор прошивки на МК с частотой 10 МГц, чтобы убедиться, что все укладывается в 2 миллисекунды. Схему обновлений жди завтра.
PsiX PsiX
Замечательно, что удалось закрыть систему на выборах, это должно не пустить нежелательных элементов. Сжатие пакетов статуса в порядке, просто следи, чтобы заголовок был небольшим, иначе подпись просочится. Разделение магистрали – отличная идея, round-robin – оптимальный вариант. Тестирование МК на 10 МГц – вполне реально, только следи, чтобы проверка подписи оставалась ниже 2 миллисекунды, иначе наткнёшься на тайм-аут, который ты сам установил. Схема скоро будет, убедись, что стрелки будут понятными. Отличная работа.
IronPulse IronPulse
Понял, подгоню заголовок, чтобы уложиться в лимит в 48 байт, и немного уменьшу размер подписи, чтобы проверка проходила за 2 миллисекунды. Схема будет завтра, там все стрелочки ровненькие. Спасибо за советы.