Эксплуатация в архитектуре: как инженеры возвращают схему в реальность

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

Архитектуру часто проектируют так, будто система будет жить в идеальных условиях: всё работает, данные приходят, связь стабильна. А потом систему передают в эксплуатацию — и выясняется, что красивая на схеме архитектура плохо наблюдается, тяжело восстанавливается и непонятна тому, кто разбирается в инциденте посреди ночи. Эксплуатация — это не то, что начинается после архитектуры. Это то, что архитектура либо предусмотрела, либо нет.

В прошлой статье мы выбирали уровни согласованности под реальные сценарии. Теперь посмотрим на систему глазами тех, кто будет её эксплуатировать — и увидим, что многие архитектурные решения рождаются (или должны рождаться) именно из эксплуатационных вопросов.

Пультовая лунной базы: наблюдаемость и уровни деградации

В статье

Почему эксплуатация — часть архитектуры, а не этап после

Решения, которые кажутся «операционными деталями», на самом деле архитектурные. Где границы контуров — там границы зон ответственности при инциденте. Какие данные мы сохраняем — то и сможем увидеть постфактум. Как устроена деградация — то и определит, переживёт ли система частичный отказ. Если это не заложено в архитектуру, эксплуатация будет компенсировать пробелы героизмом и ручными обходами — ровно тем, чего мы хотели избежать ещё в первой статье серии.

Наблюдаемость: видеть систему, а не угадывать

Наблюдаемость (observability) — это способность ответить на вопрос «что сейчас происходит и почему» по тому, что система отдаёт наружу. Обычно говорят о трёх вещах:

  • метрики — числа во времени (загрузка, задержки, остатки): видно, что что-то идёт не так;
  • логи — структурированные записи событий: видно, что именно произошло;
  • трейсы — путь запроса через контуры: видно, где именно затык.

Для архитектуры важно не «добавить логирование потом», а спроектировать, какие вопросы система должна позволять задавать. Observability — это не список инструментов, а способность ответить:

  • почему база ушла в деградацию и в какой момент?
  • какой датчик или контур инициировал решение?
  • какая версия правил приоритизации сработала?
  • на каких данных решение было принято и какими они были в тот момент?

Если контур принимает критичное решение, должно быть видно, на основании каких данных, версии правил и контекста он его принял — иначе разбор инцидента превращается в гадание: факт виден, а логика — нет.

Деградация: как система ведёт себя, когда всё плохо

Хорошая система спроектирована не только для штатного режима, но и для постепенного отказа. Деградация — это заранее продуманные уровни «работает хуже, но работает»:

  • что отключается первым при нехватке ресурсов;
  • что продолжает работать любой ценой;
  • как система сообщает, что перешла в деградационный режим;
  • как она возвращается обратно, когда условия восстановились.

Очень полезный артефакт для этого — матрица деградации: она превращает «система деградирует» в понятную форму, с которой работает и аналитик, и эксплуатация. Пример для базы:

Режим Триггер Что отключается Что сохраняется Кто уведомляется Как выйти
Норма штатные условия всё
Энергосбережение просадка энергобюджета некритичные нагрузки, фоновая аналитика жизнеобеспечение, связь экипаж энергобаланс восстановлен
Авария связи потеря канала с Землёй синхронные вызовы к Земле локальные решения, буферизация экипаж; запись в журнал связь восстановлена, буфер обработан, устаревшие команды отброшены по TTL
Критический угроза жизнеобеспечению всё, кроме жизнеобеспечения воздух, вода, давление экипаж (приоритетный алерт) параметры в пределах порогов

Без явной модели деградации система ведёт себя при отказе непредсказуемо: вместо «отключили некритичное» получается каскадный сбой. Деградация — это архитектурное свойство, а не аварийная импровизация.

Кто разбирается в инциденте в три часа ночи

Хороший тест архитектуры на эксплуатируемость: представить дежурного инженера, которого разбудил алерт, — а в кейсе лунной базы это может быть и член экипажа без связи с Землёй, у которого нет времени читать архитектурный документ. У него мало времени, неполная картина и высокая цена ошибки. Архитектура ему помогает, если:

  • понятно, какой контур отвечает за проблему (ясные границы и ownership);
  • видно состояние системы без раскапывания пяти подсистем;
  • есть деградационный режим, который уже стабилизировал ситуацию;
  • действия восстановления предсказуемы и описаны.

Если же для диагностики нужно держать в голове всю систему — архитектура не эксплуатируема, как бы красиво она ни выглядела на схеме.

Лунная база: эксплуатация в сценарии аварии

Сквозной сценарий серии — связь с Землёй пропала на 40 минут, а энергобюджет просел — это, по сути, эксплуатационный инцидент. Посмотрим, что должна обеспечить архитектура, чтобы его пережить:

  • Наблюдаемость локально. Экипаж должен видеть состояние без Земли: пороги жизнеобеспечения, энергобаланс, что уже отключено. Если телеметрия видна только на Земле — в этот момент она бесполезна.
  • Деградация по уровням. Система сама понижает приоритет некритичных нагрузок, сохраняя жизнеобеспечение, и явно сообщает, что перешла в аварийный режим.
  • Журнал решений. Всё, что контур решил локально, фиксируется — чтобы после восстановления связи наземный центр понял, что произошло и почему.
  • Короткий runbook. Журнал фиксирует, что произошло, но экипажу нужна и процедура: как проверить текущий режим, что можно включать обратно и в каком порядке, какие действия запрещены до восстановления. Без неё восстановление зависит от того, кто именно сейчас на смене.
  • Предсказуемое восстановление. Когда связь вернулась и энергия восстановилась, система выходит из деградации управляемо, а не лавиной отложенных операций.
flowchart TD obs["Локальная наблюдаемость
(пороги, энергобаланс)"] --> dec["Контур решений"] dec -->|понижает приоритет| deg["Деградация по уровням"] dec -->|фиксирует| jrn["Журнал решений"] deg --> rb["Runbook восстановления"] rb --> recover["Управляемое восстановление"] jrn -.->|после связи| ground["Наземный центр"]

flowchart TD
  obs["Локальная наблюдаемость
(пороги, энергобаланс)"] --> dec["Контур решений"] dec -->|понижает приоритет| deg["Деградация по уровням"] dec -->|фиксирует| jrn["Журнал решений"] deg --> rb["Runbook восстановления"] rb --> recover["Управляемое восстановление"] jrn -.->|после связи| ground["Наземный центр"]
Эксплуатационный контур базы в аварийном сценарии

Где аналитик влияет на эксплуатируемость

Эксплуатация кажется зоной инженеров, но многое закладывается ещё на уровне требований и доменной модели — там, где работает аналитик:

  • определить, что считается инцидентом и какие сценарии система обязана переживать;
  • зафиксировать, какие данные должны быть видны для принятия решений (не «всё подряд», а нужное);
  • описать уровни деградации на языке домена: что критично, что можно отключить;
  • согласовать, какие алерты actionable (требуют действия), а какие лишь информационные: плохие алерты быстро превращаются в шум, на который перестают реагировать;
  • принести в разговор реальность эксплуатации: кто, как и в каких условиях будет с этим жить.

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

Короткий checklist эксплуатируемости

Перед тем как считать архитектуру готовой, проверьте:

  1. Что должно быть видно, чтобы понять состояние системы без раскопок?
  2. Какие сценарии отказа система обязана переживать?
  3. Есть ли явная модель деградации — что отключается и в каком порядке?
  4. Понятно ли при инциденте, какой контур отвечает за проблему?
  5. Фиксируются ли критичные решения для последующего разбора?
  6. Какие есть алерты и что каждый из них требует сделать?
  7. Есть ли runbook для ключевых инцидентов?
  8. Предсказуемо ли восстановление после отказа?
  9. Как понять, что восстановление завершено, а не просто исчезли симптомы?
  10. Сможет ли дежурный (или экипаж без связи) разобраться, не держа в голове всю систему?

Если на эти вопросы нет ответа, систему придётся эксплуатировать героизмом, а не архитектурой.

Что дальше

Мы прошли всю серию по частям: рамку кейса, роль аналитика, problem statement, требования-драйверы, доменную модель, C4, взаимодействия, согласованность и эксплуатацию. Осталось собрать это в одну картину. Финальная статья серии — сквозной итоговый кейс: собираем рабочую систему лунной базы — проходит один сценарий от требований до эксплуатации, показывая, как все решения складываются вместе.

См. также

Обсуждение в Telegram

Присоединиться →

Комментарии