Как создается Программное обеспечение для StarLink
vsatman888 — 23.05.2021
СпейсХ ведет постоянный набор специалистов, чтобы отобрать и
собрать лучших, они практикуют выступления своих сотрудников
в соцсетях, с рассказами, чем они и как занимаюся.
Недавно на реддите выступили программисты,
создающие ПО для СтарЛинка.
Так как я очень мало понимаю в программировании, то ограничусь
просто машинным переводом.
Желающие могут прочитать оригинал
///Есть требования, которые заставляют попотеть
программистов.
- Массовое распространение информации на тысячи узлов.
- Высокая надежность и доступность.
- Несколько разных платформ. Быстрый рост сети.
- Аппаратные платформы, которые меняются за дни или недели.
- А теперь отправьте свои производственные платформы в
космос.
Это всемирная программа SpaceX Starlink, цель которой -
предоставить высокоскоростной широкополосный доступ в Интернет в
местах, где доступ был ненадежным, дорогим или полностью
отсутствовал.
Stack Overflow поговорил с двумя руководителями программного
обеспечения Starlink - Акашем Бадшахом и Энди Боном - об их методах
и методах разработки. Программное обеспечение делится примерно на
две части: 1) бортовое программное обеспечение и 2) наземное
программное обеспечение, которое поддерживает летающие компоненты,
управляет сетями, управляет «созвездием» спутников Starlink -
спутниками Starlink на орбите - и поддерживает связь между
созвездием и обычным наземным интернетом.
Текущая группировка Starlink состоит из сотен небольших
недорогих спутников на низкой околоземной орбите, и компания
стремится увеличить их количество до нескольких тысяч. Малая высота
орбиты необходима для обеспечения малой задержки. Современные
геостационарные спутники вращаются на орбите в 26 200 милях от
центра Земли и на высоте 22 300 миль над поверхностью, что
означает, что для прохождения сигнала туда и обратно требуется
примерно 0,240 секунды. Starlink в настоящее время находится на
орбите в 340 миль, сокращая задержку почти до одной 1% от
этой.
Бон, менеджер группы сетевого программного обеспечения,
сказал: «У нас есть наземный кластер служб, который выясняет, кто с
кем "разговаривает" в сети. Что интересно в наших спутниках, так
это то, что они очень бблизко к Земле. Из-за этого спутник может
находиться над головой всего несколько минут. Поэтому антенна на
крыше клиента должна часто менять спутник, с которым она работает
».
Система starlink построена так, чтобы быть сверхдинамичной,
поскольку наши спутники движутся так быстро (> 7 км / с), что
пользователь не подключается к одному и тому же спутнику более
нескольких минут. Каждый пользовательский терминал может
одновременно работать только с одним спутником, поэтому наши каналы
спутниковой связи с клиентским трафиком используют электронно
управляемые лучи для мгновенного переключения со спутника на
спутник, и мы временно буферизуем трафик в ожидании этой
«передачи обслуживания».
В наших каналах связи между спутником и шлюзом (гейтвеем)
используется антенна с механическим управлением, поэтому мы должны
учитывать время движения и следить за тем, чтобы не «отпустить»
первое соединение между МСЗ и Гейтвеем, пока мы не установим
надежно следующее. Хороший визуальный эффект - это представить, как
наши спутники "проходят" через свои шлюзовые соединения по земле,
когда они пролетают.
Допуски наведения для межспутниковых лазерных линий довольно
жесткие, поэтому простого вычисления углов от ожидаемого
положения спутников недостаточно. Чтобы увидеть масштаб проблемы
наведения в перспективе, с точки зрения угловых допусков проблема,
которую мы пытаемся решить, так же сложна, как попытка выстрелить
лазером из Лос-Анджелеса и попасть в Эмпайр-стейт-билдинг в
Нью-Йорке.При подключении лазерной связи мы сначала начинаем с
наведения на ожидаемый угол, а затем организуем последовательность
сбора данных, чтобы получить постоянную мощность с обеих
сторон.
«Подумайте, как ваш мобильный телефон взаимодействует с
стационарными вышками связи. Иногда вашему телефону требуется
переключиться с одной вышки на другую, но соединение обычно
стабильное », - говорит Бон. «Для Starlink одна из основных проблем
заключается в том, что наши « башни » вращаются вокруг Земли,
заставляя ваш маршрут в Интернет очень часто меняться. Моя команда
организует этот процесс, вычисляя желаемую топологию сети,
распределяя этот план по устройствам в сети и настраивая
оборудование, чтобы это произошло ».
Конечно, у спутников Starlink есть свои проблемы. Каждый
спутник отвечает не только за поддержание связи с находящимися в
поле зрения наземными станциями, но, в отличие от большинства
спутников, спутники Starlink в основном сами занимаются своей
навигацией. Когда вы запускаете сотни спутников, нет времени
выводить каждый на свою определенную орбиту; вместо этого наземное
управление задает каждому спутнику место в группировке, и спутник
сам перемещается на это место. Затем наземная сеть обеспечивает
непрерывную обновленную информацию об условиях движения и
изменениях созвездия, в то время как каждый спутник обновляет
данные , получаемые от центра управления, по своей
траектории.
The combinatorics of the problem make scaling this system
to many millions of people a challenge,”
«Комбинаторика проблемы затрудняет масштабирование этой
системы для многих миллионов людей», - говорит Бон. «При
обслуживании пользователей спутники Starlink должны обеспечить, что
на Земле лучи с одинаковыми частотами не накладыаются друг на
друга, чтобы избежать помех. В конечном итоге мы решаем глобальную
проблему "окраски" (на схемах лучи с разными частотными
диапазонами обычно окрашивают в разных цвета для лучшей
наглядности и задача частотного планировния избежать того, чтобы
лучи одного "цвета" соприкасались прим. Vsatman) и
предотвращения помех, что является еще одной из наших самых
серьезных задач в реальном времени ».
Программное обеспечение Starlink, как на спутниках, так и на
земле, написано почти исключительно на C ++, с некоторыми
разработками прототипов на Python. Программное обеспечение
разрабатывается в среде непрерывной интеграции, with teams merging
into the master development branch often and deploying to the fleet
of satellites in space each week. (при этом новые
версии ПО часто добавляются в основной софт и каждую неделю
переносятся на спутники летающие в космосе).
«Мы используем C ++ для большей части программного обеспечения
для управления транспортными средствами. В SpaceX у него много
наследия, так как это очень низкоуровневый язык, который мы можем
использовать на микроконтроллерах с чистым железом. Это позволяет
нам использовать его на наших компьютерах со встроенной Linux,
которые мы используем во всех наших транспортных средствах », -
объясняет Бадшах. «Мы многому научились у Dragon и Falcon о том,
как можно запустить архитектуру с самодостаточным резервированием
на компьютерах с тройным дублированием, которые обмениваются
данными и решают одни и те же проблемы».
Новый код проходит обширный цикл тестирования с использованием
множества различных тестовых фреймворков, от простых модульных
тестов до запуска в массовых симуляциях. Некоторые из наиболее
интересных тестов включают в себя все: от помещения спутников в
безэховую изоляцию от наземных станций и проверки их связи до
теста, который представляет испытательную платформу с
моделированием всей среды, в которой будут работать спутники. По
сути, Starlink создал симуляцию пространства-времени, по крайней
мере, в окрестностях Земли.
«Для разработки и тестирования этих алгоритмов у нас есть
полномасштабное сетевое моделирование, работающее в непрерывной
интеграции на высокопроизводительном вычислительном кластере. Это
моделирование позволяет запускать производственный код C ++, а
также работать с кодом прототипа, написанным на Python », - говорит
Бон. «Версия Python позволяет выполнять быструю итерацию на этапе
проектирования. Когда мы довольны результатами алгоритма, мы
переносим его на C ++, чтобы он эффективно работал в
производственной среде ».
Одна из больших проблем для Starlink заключается в том, что
сами спутники часто меняются. Starlink сообщает, что у них
никогда не было запуска, при котором спутники, входящие в
группировку, не изменились с момента последнего запуска.
В большинстве случаев это было бы серьезной проблемой (читайте:
путь к катастрофе). Starlink решил эту проблему, включив
разработчиков программного обеспечения непосредственно в
производственный цикл.
Вместо того, чтобы «бросать через стену» разработчикам новое
оборудование, разработчики программного обеспечения
интегрируются в производственный процесс до такой степени, что
находятся в реальном производственном цехе. Чтобы обеспечить
синхронизацию аппаратного и программного обеспечения на протяжении
всего процесса, программное обеспечение иногда тестируется на
спутниках, сходящих с производственной линии и направляющихся на
орбиту.
Когда спутниковое программное обеспечение готово к запуску,
оно упаковывается для передачи на спутники. Релизы сначала
отправляются на несколько спутников на орбите и проходят испытания
в космосе. В случае сбоев программное обеспечение можно
откатить. Если же новая версия будет признана
удовлетворительной, программное обеспечение будет развернуто в
геометрической прогрессии на оставшихся спутниках.
Еще одно преимущество C ++ - в области управления памятью.
Независимо от того, сколько раз вы проверяете код перед запуском,
вы должны быть готовы к повреждению программного обеспечения, когда
оно поступит на ИСЗ на орбите.
«Мы создали базовую инфраструктуру, которая позволяет нам знать,
что мы распределяем всю нашу память на время инициализации. Если
что-то не сработает, мы делаем это сразу », - говорит Бадшах. «У
нас также есть различные инструменты, так что любое состояние,
которое сохраняется в приложении, управляется в очень конкретном
месте в памяти. Это позволяет нам знать, что он правильно
распределяется между компьютерами. Чего вы не хотите, так это
ситуации, когда один из компьютеров получает повреждение от
радиациации, немного переворачивается, и у него нет распределенной
памяти с другими компьютерами и он может как бы работать
самостоятельно ».
Оригинал “What we have established is a core infrastructure
that allows us to know we are allocating all of our memory at
initialization time. If something is going to fail allocation, we
do that right up front,” says Badshah. “We also have different
tools so that any state that is persisted through the application
is managed in a very particular place in memory. This lets us know
it is being properly shared between the computers. What you don’t
want is a situation where one of the computers takes a radiation
hit, a bit flips, and it’s not in a shared memory with the other
computers, and it can kind of run off on its own.”
Ответ Чтобы управлять большой спутниковой группировкой, не
прибегая к сотням людей-операторов, мы полагаемся на автоматизацию
программного обеспечения, работающего на земле и на спутниках.
Чтобы полностью протестировать наши системы в сквозной
конфигурации, это означает, что мы должны интегрировать сотни
различных программных сервисов в среду разработки.
Еще одна проблема при тестировании заключается в том, что не
всегда можно проверить каждую возможность с помощью одного теста.
Например, нам нужны автоматизированные тесты, проверяющие каналы
связи спутник-земля. У нас есть испытательные стенды HITL
(аппаратное обеспечение в контуре) для спутников, и мы можем
создать имитацию наземной станции с фиксированной антенной. Мы
можем запустить тест, в котором мы имитируем полет спутника над
наземной станцией, но мы должны переопределить программное
обеспечение, чтобы оно считало, что всегда находится в контакте с
нашей фиксированной антенной. Это позволяет нам протестировать весь
RF и сетевой стек, но не позволяет тестировать логику наведения
антенны. В качестве альтернативы мы можем запустить чисто
программное моделирование для проверки наведения антенны. Мы должны
убедиться, что у нас есть достаточно частичное тестирование всех
важных аспектов системы.
Вопрос: В общих чертах, можете ли вы описать сложность
телеметрической системы Starlink с фиксированными наземными
терминалами и насколько усложняется использование в движении,
например, лодки или дома на колесах?
Самая большая проблема, которую мы должны решить, думая о
стационарных наземных терминалах, - это как распределить «лучи» от
спутников на каждую точку на Земле, которую мы хотим обслуживать.
Мы должны учитывать, сколько пользователей нуждается в полосе
пропускания, радиопомехи от других спутников (включая нас самих!) И
ограничения видимости спутника из точки нахождения терминала.
Движение обычно не усложняет систему телеметрии. Это
действительно создает некоторые интересные проблемы, когда речь
идет, например, о спутниках, которые не имеют контакта с землей на
некоторых участках своей орбиты. Это означает, что наша
телеметрическая система должна быть устойчивой к выходу из строя и
/ или позднему поступлению телеметрии.
Движущиеся цели требуют от нас быстрого и непрерывного решения
проблемы взаимного расположения ИСЗ и терминала (в какую сторону
наводить антенну). При этом также изменяется количество
пользователей, находящихся в определенном месте в каждый момент
времени, что влияет на требуемую пропускную способность.
В: Какие есть планы по увеличению производства
терминалов Starlink?
Что касается масштабов производства, которых мы стремимся
достичь, мы строили с нуля большую часть того, что мы здесь делаем,
превращаясь в новый завод с новыми программными системами, которые
были разработаны для запланированного масштаба Starlink
сначала мысенно. Команда разработчиков программного обеспечения
находится на заводе вместе со всеми остальными, кто думает об этой
проблеме, и они потратили время на создание Starlinks в цеху, чтобы
убедиться, что они понимают высокопроизводительные производственные
процессы, насколько это возможно. Для завода, производящего с
желаемой скоростью, нам нужна высокоинтегрированная
производственная система, в которой автоматизация, роботы, люди и
программное обеспечение работают вместе. Руководящий принцип, как
правило, состоит в том, чтобы продолжать искать, насколько мы можем
упростить то, что мы делаем.
В: Как вы управляете разными версиями программного обеспечения
с разными версиями бустеров / спутников Starlink?
Что касается Starlink, мы изо всех сил стараемся иметь единую
версию программного обеспечения для всех спутников, независимо от
конкретных версий каждого подкомпонента на любом конкретном
транспортном средстве. Мы делаем это, делая четкое разделение между
уровнями аппаратного интерфейса и «бизнес-логикой» различных
компонентов. Программное обеспечение считывает различные
идентификаторы оборудования, чтобы понять, какие типы каждой вещи у
нас есть, и соответствующим образом адаптирует свое поведение.
Мы спроектировали нашу систему так, что каждый модуль (который
может содержать десятки отдельных компьютеров) обновляется
автономно, сначала загружая новый пакет на центральный узел, а все
остальные компьютеры получают обновления с этого центрального узла.
Каждое устройство также сохраняет резервную копию последнего
исправного программного обеспечения, поэтому, если что-то пойдет не
так (например, сбой питания, вызванный радиацией) во время
обновления, оно автоматически восстановится, загрузившись в эту
резервную копию.
Почти все наши инструменты развертывания и тестирования созданы
собственными силами, в основном потому, что наша архитектура
настолько уникальна, и различные ограничения, с которыми нам
приходится работать, потребуют значительной настройки готовых
инструментов.
В: Не могли бы вы рассказать нам больше о системе телеметрии
Starlink? С какими проблемами вы столкнулись и как их решали?
Когда мы только начинали, у нас уже была отличная внутренняя
система телеметрии, но в ней заложена основная концепция «старта» -
определенного времени начала и окончания для данного набора
информации. Starlink не подходит для этой модели, потому что в нем
есть много устройств, которые всегда включены и могут отправлять
данные не по порядку или со значительной задержкой, поэтому это
были одни из первых проблем, которые нам пришлось решить. Попутно
некоторые из наиболее интересных проблем были связаны с доменами
сбоя и отказоустойчивостью - как мы можем обеспечить максимальную
доступность частей системы? Если один набор устройств передает
информацию, которая не является ошибочной, как мы можем ограничить
влияние этого, на на как можно меньшую часть остального
программного обеспечения, чтобы другие массивы информации не были
затронуты и продолжали обрабатываться? Мы также решили не хранить
все данные, а создали мощную систему для агрегирования информации с
течением времени, а также удаления, когда она больше не
нужна.
//_________________________________________________________________________________________
Если все так, как описыает Бадшах, то не совсем понимаю, о каком
окончании бета тестирования и переходе к эксплуатации (=
предоставлении услуг) можно говорить сейчас в случае СтарЛинка, по
сути у него идет непрерывная конструкторская разработка
почти всех компонентов сети, и при всем уважении к опыту
Программистов СпейсХ и прилагаемых ими усилий, рано или поздно
какой то достаточно глобальный сбой "прилетит", особенно в свете
постоянно увеличивающегося размера сети, объема трафика. Закон о
переходе количества в качество никто отменить не смог.
И, кстати, это еще одни ответ на тему , кто такой Илон Макс:
великий Инженер и Изобретатель или отличный организатор
производственных процессов и управленец, умеющий собрать и
мотивировать лучших спецов в своей отрасли..