Неизменяемая инфраструктура

Неизменяемая инфраструктура — это практика никогда не править работающий сервер, контейнер или образ после развёртывания. Изменение означает собрать новый артефакт и заменить им старый; латать на месте нельзя, даже когда это было бы быстрее. Причина не эстетическая. Машина, которую правили месяцами, несёт конфигурацию, которую никто не воспроизведёт, потому что нынешнее состояние — это исходный образ плюс каждая срочная заплатка, каждое обновление пакета и каждая ручная правка с тех пор, применённые в порядке, который никто не записывал. Именно так два сервера за одним балансировщиком начинают вести себя по-разному, и так проблема воспроизводится на одном и не воспроизводится на другом. Замена вместо латания делает верными три вещи. Развёртывание и восстановление становятся одной операцией, поэтому путь, которым катят вперёд, тренируется постоянно и работает, когда им нужно откатиться. Один и тот же артефакт крутится и в тестовой среде, и в проде, что убирает целый класс отказов вида в стейджинге работало. И откат превращается в повторное развёртывание предыдущего артефакта вместо обращения серии изменений вспять, что куда надёжнее, потому что никому не нужно знать, в чём эти изменения состояли. Плата настоящая и её стоит назвать. Всякое состояние, которое обязано пережить замену, должно жить в другом месте — в базе, объектном хранилище или примонтированном томе, — и это проектное ограничение, а не деталь. Циклы замены медленнее правки файла, поэтому срочное исправление стоит одной сборки. И отладка меняет характер: зайти на машину и ковырять её неделю не выйдет, поэтому логи, метрики и трассировки должны быть достаточно хороши для диагностики снаружи, а машину, оставленную для разбирательства, следует вывести из обслуживания, а не оставлять под трафиком.

Похожие термины

Ещё термины: Облако и инфраструктура