Почему Facebook отказался от традиционного DevOps в пользу Production Engineering

SaaStr 2,2 тыс. 18 мин 7 мин 07.01.2021
Главное

Переход от традиционной эксплуатации к современным инженерным практикам стал ключевым фактором успешного масштабирования для мировых ИТ-гигантов. В своем выступлении на конференции SaaStr менеджер по производственной инженерии Facebook Нандини Чавагал подробно описывает эволюцию операционных моделей — от классического DevOps до методологии Production Engineering. На примере опыта Facebook она объясняет, как глубокая интеграция инженеров по эксплуатации в команды разработки позволяет устранить барьеры между отделами, оптимизировать ИТ-инфраструктуру и кратно повысить надежность ИТ-систем.

🔄 От «перебрасывания через стену» к SRE: Эволюция операционных моделей 1:35

Исторически взаимодействие между разработчиками и системными администраторами строилось по схеме, которую Нандини Чавагал иронично называет моделью «перебрасывания через стену». В рамках этого традиционного подхода программисты создают продукт, упаковывают его и передают операционной команде для развертывания в производственной среде. После этого вся ответственность за деплой, мониторинг и устранение инцидентов ложится исключительно на сисадминов или сотрудников центра управления сетью (NOC). Разработчики при этом оказываются полностью изолированы от реальных проблем эксплуатации.

Важным шагом вперед стало появление концепции SRE (Site Reliability Engineering), сформулированной компанией Google. В рамках этой модели на операционные роли начали нанимать полноценных разработчиков, понимающих архитектуру ПО. Манифест Google SRE привнес в индустрию важнейшие методологические принципы:

Благодаря SRE разработчики наконец получили, по выражению спикера, «шкуру в игре» (skin in the game), начав соприкасаться с операционными аспектами своих сервисов. Отдельно Чавагал затронула термин DevOps. По мнению спикера, следует избегать названий должностей вроде «DevOps-инженер», поскольку DevOps — это в первую очередь философия и методология взаимодействия, а не конкретная организационная структура или позиция в штатном расписании.

🚀 Рождение Production Engineering в Facebook 3:54

Концепция Production Engineering (PE) зародилась в Facebook как прямое развитие идей Google SRE. В конце 2010-го и начале 2011–2012 годов социальная сеть переживала взрывной рост аудитории. Инженеры по эксплуатации сталкивались с тем, что сайт постоянно падал под высокой нагрузкой, а масштабирование инфраструктуры требовало непрерывного найма новых людей.

Выход из этого кризиса нашли Педро Канахуати (Pedro Canahuati), Сантош (Santosh) и Джей Парих (Jay Parikh), которые основали в Facebook новое подразделение — Production Engineering. Они взяли за основу базовые принципы SRE, но глубоко модифицировали их, сделав ставку на максимальное встраивание (embedding) специалистов по надежности в общую инженерную структуру компании.

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

🤝 Принцип полного погружения: Как устроена встроенная модель 6:20

Ключевое отличие Production Engineering от традиционного Ops заключается в характере взаимодействия с командами разработки. Нандини Чавагал подчеркивает, что инженеры PE не просто сидят рядом с разработчиками — они сидят вместе с ними в рамках единого рабочего пространства. В этой схеме полностью стирается граница между «ними» (разработчиками) и «нами» (эксплуатацией).

Встроенная модель Facebook подразумевает глубокую интеграцию инженера PE во все процессы продуктовой команды:

В Facebook дежурства распределяются между разработчиками программного обеспечения (SWE) и производственными инженерами (PE) как между абсолютно равными партнерами. Спикер приводит наглядный пример: если продуктовая команда состоит из десяти человек, где восемь являются разработчиками, а двое — инженерами PE, то каждый из них заступает на дежурство ровно один раз за весь цикл, неся одинаковую ответственность за стабильность системы в свои часы.

⚙️ Роль производственного инженера на всех этапах SDLC 7:28

Спикер убеждена, что если инженеры PE будут фокусироваться исключительно на надежности и масштабируемости в отрыве от бизнес-контекста, они упустят суть решаемых компанией проблем и не смогут сформировать правильное долгосрочное видение продукта. Именно поэтому производственные инженеры подключаются к жизненному циклу разработки ПО (SDLC) с самого раннего этапа.

На этапе формирования требований и проектирования архитектуры инженер PE действует проактивно. Вместо того чтобы героически решать проблемы с производительностью уже после релиза, он заранее анализирует архитектуру на предмет узких мест. В качестве примера Чавагал предлагает оценить масштабируемость ресурсов: если для обработки 10 транзакций системе требуется 10 условных единиц ресурсов, то не потребует ли миллион транзакций миллиона ресурсов? Своевременные вопросы PE-инженера на этапе дизайна позволяют заложить правильные метрики надежности еще до написания первой строчки кода.

На этапе разработки и тестирования производственные инженеры работают бок о бок с программистами, проводят код-ревью и самостоятельно пишут код для повышения надежности компонентов.

Когда продукт выходит в прод, общими усилиями настраиваются дашборды и определяются бюджеты ошибок. Важнейшим фокусом работы становится борьба с выгоранием на дежурствах. По словам Чавагал, если дежурный инженер тратит 50% своего времени на рутинное устранение однотипных инцидентов, это означает, что 10% продуктивности всей команды из 10 человек тратится впустую. Инженеры PE анализируют отчеты по дежурствам (on-call summaries), чтобы автоматизировать рутину, устранить первопричины сбоев и снизить операционную нагрузку. В этом им помогают мощные внутренние инструменты Facebook для глубокого анализа трендов и ошибок.

📈 Пирамида зрелости и ключевые фокусы инженерии 11:06

Деятельность Production Engineering в Facebook распределена по четырем ключевым направлениям:

  1. Надежность (Reliability): обеспечение бесперебойной работы сервиса и гарантия того, что API-интерфейсы выдают корректные ответы без задержек.
  2. Масштабируемость (Scalability): проектирование систем, способных линейно и эффективно справляться с миллионами транзакций.
  3. Производительность (Performance): оптимизация использования процессора (CPU) и оперативной памяти, а также устранение неэффективных синхронных зависимостей между слоями инфраструктуры.
  4. Эффективность разработки (Developer Efficiency): создание и внедрение инструментария, ускоряющего работу как обычных программистов, так и инженеров машинного обучения (ML).

Для оценки текущего состояния операционных процессов Чавагал использует «Пирамиду зрелости инфраструктуры».

На самом базовом, нижнем уровне пирамиды находятся задачи по обслуживанию серверного оборудования, подготовке мощностей (provisioning) и мониторингу жизненного цикла серверов. Спикер отмечает, что многие традиционные Ops- и SRE-команды застревают именно здесь. Это необходимая работа, но по мере взросления процессов компании нужно двигаться выше.

Средний уровень включает в себя автоматизацию развертывания (деплоя) и мониторинг сервисов. Здесь внедряются так называемые «гейткиперы» (gatekeepers) — механизмы, позволяющие безопасно раскатывать обновления сначала на 5%, затем на 10% трафика, и лишь при отсутствии аномалий масштабировать до 100%. На этом же уровне прорабатываются сценарии аварийного восстановления (Disaster Recovery) на случай полного отключения целого дата-центра.

Вершина пирамиды — это тонкая настройка производительности (performance tuning) и непосредственный вклад в архитектурную надежность сервисов. Команда под руководством Нандини Чавагал оперирует именно на этом высшем уровне, поскольку базовые инфраструктурные слои Facebook полностью автоматизированы сторонними специализированными командами.

🗺️ Практическое руководство: Как внедрить Production Engineering 14:51

Переход на модель Production Engineering — это сложная стратегическая трансформация. По мнению Чавагал, она не может быть исключительно низовой инициативой (grassroots movement). Для ее успеха критически важна поддержка со стороны высшего руководства (management buy-in), которое должно разделить это видение и понимать выгоду для бизнеса.

Процесс трансформации требует синхронизации и выстраивания партнерских отношений между инфраструктурными подразделениями, командами разработки и проектными менеджерами (technical program managers). Компании придется полностью перестроить внутреннюю культуру, внедрив безобвиняемые постмортемы, а также изменить подходы к обучению и развитию навыков сотрудников.

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

Подводя итог, Нандини Чавагал призывает компании осознанно выбирать операционную модель, поскольку она напрямую формирует культуру разработки и скорость доставки фич до конечного пользователя. Традиционный подход «перебрасывания кода через стену» позволяет программистам писать код быстро, но этот код неизбежно застревает на этапе релиза в прод. Внедрение Production Engineering может замедлить процессы на самых ранних этапах проектирования, однако, как утверждает спикер, «нужно двигаться медленно вначале, чтобы получить возможность двигаться по-настоящему быстро в будущем». Результатом станет бесперебойный, стабильный и эффективный конвейер поставки ценности от идеи до успешной работы в производственной среде.

💬 Цитаты

«Мы не просто сидим рядом с разработчиками программного обеспечения, мы сидим вместе с ними — это полностью встроенная модель.»

Нандини Чавагал 06:20

«Вы должны двигаться медленно в самом начале, чтобы в итоге получить возможность двигаться по-настоящему быстро.»

Нандини Чавагал 17:14
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Production Engineering
Гибридная инженерная дисциплина в Facebook, объединяющая подходы системного администрирования и разработки программного обеспечения.
SRE (Site Reliability Engineering)
Подход к эксплуатации ИТ-систем, разработанный в Google, предполагающий применение практик разработки ПО к задачам администрирования.
Error Budget (Бюджет ошибок)
Допустимый уровень ненадежности системы, определяющий баланс между скоростью внедрения новых фич и стабильностью сервиса.
Diff (Дифф)
Изменения в исходном коде программного обеспечения, отправляемые на проверку и последующее слияние с основной веткой разработки.
📊 Цифры
🗓 Хронология
  1. 2010–2012 гг. Педро Канахуати, Сантош и Джей Парих основывают подразделение Production Engineering в Facebook для борьбы с постоянными сбоями из-за роста масштабов.
⚖️ Другая сторона
Технологии и IT Facebook Production Engineering SRE Нандини Чавагал SaaStr