Выкат по воздуху, у которого есть пауза и откат
Обновление прошивки на оборудовании в цехе отличается от обновления сервиса одним: неудачный выкат может остановить производство. Отсюда пауза и откат как обязательные части.
Обновление прошивки узлов по воздуху — обычная функция. Необычное требование к ней в промышленном контексте: выкат обязан останавливаться на середине и обязан откатываться.
Причина простая. Неудачное обновление сервиса в кластере означает откат и разбор. Неудачное обновление узла, читающего сигналы станка, может остановить линию.
Пауза как первоклассная операция
Не «отмена», а именно пауза: часть узлов уже на новой версии, часть на старой, состояние зафиксировано и не двигается.
Это нужно, потому что проблема обнаруживается не сразу. Первые десять узлов обновились нормально, на одиннадцатом появилось странное поведение — и надо остановиться, не откатывая уже сделанное, чтобы посмотреть.
Выкат без паузы предлагает выбор из двух плохих вариантов: продолжать, надеясь, что показалось, или откатывать всё.
Откат как проверенный путь, а не теоретическая возможность
Откат должен быть тем же механизмом, что и накат, а не отдельной аварийной процедурой.
Разница принципиальна. Аварийная процедура выполняется впервые в аварии — то есть в худших условиях, человеком под давлением. Механизм, которым пользуются регулярно, работает.
Поэтому предыдущая версия остаётся доступной, а откат — обычная операция того же выката, а не восстановление из резервной копии.
Волнами, а не сразу
Обновление идёт группами. Сначала небольшая группа, проверка, потом остальные.
Выбор первой группы — не случайный. В неё попадают узлы, отказ которых наименее болезнен: например, наблюдающие некритичное оборудование или стоящие на участке, который сейчас не в работе.
Это ровно то же, что делается при обновлении сервисов, с одной разницей: здесь «не в работе» определяется производственным расписанием, а не долей трафика.
Что делает выкат невозможным
Отсутствие связи с узлом. Промышленная площадка — не датацентр: связь бывает нестабильной, а часть узлов доступна не всегда.
Отсюда требование: выкат должен переживать недоступность узла без потери состояния. Узел, который был офлайн во время обновления, получает его позже, а не выпадает из учёта.
Обратная сторона: пока часть узлов на старой версии, система работает в смешанном состоянии, и это состояние должно быть рабочим. Значит, изменения между версиями обязаны быть совместимыми — а это ограничение на разработку, а не на выкат.
Почему рядом стоит цифровой двойник
Потому что перед выкатом хочется знать, что произойдёт.
Модель площадки с ролями и политиками доступа позволяет проверить намерение до исполнения: какие узлы затронуты, что они наблюдают, что произойдёт при их недоступности.
И она же держит опасные операции в карантине. Наблюдение и управление различаются по правам: право обновить прошивку наблюдающего узла и право отправить команду в оборудование — не одно и то же право.
Чего мы не делаем
Не обновляем прошивку самого технологического оборудования. Речь про узлы наблюдения, которые мы поставили.
Граница проходит там же, где и везде в этом направлении: мы читаем состояние существующего производства и не вмешиваемся в него без отдельного, явно разрешённого пути.