As-Code как ДНК актуальной инженерной культуры
Недавно на митапе о стандарте разработки нам с Heads of Profession задали вопрос, который завис в воздухе, как нерешенный баг в коде. Пятый по популярности в сообществе, он звучал так:
“А что за потребность всё делать %-as-code? Какая от этого польза? Зачем число комитящих в код?”
Мы, как архитекторы инженерной культуры, внедряем лучшие практики и подходы: Infrastructure-as-Code, API-First, unit-тесты, компонентное тестирование, TBD (trunk based development), GitOps, Doc As Cod, ..as code. Хаос необходимо упорядочить. Мы дорабатываем пайплайн, как инженеры, собирающие сеть в подвале старого дата-центра. Мы создаем условия для Continuous Deployment с продуктовыми платформами, где blue-green deployment и canary deployment становятся порталами для перехода прода из одного состояние в другое..
Каждый коммит — это шаг в будущее, где код уже не просто текст, а нить в живой ткани новой реальности. Число комитящих — это не просто метрика, это сигнал, что система жива, что она дышит, что она развивается. As-code — это философия, где всё, от инфраструктуры до документации, становится частью единого цифрового сада.
Я провалился в момент осознания вопроса в другой слой реальности, задумался об истории ..as code и собрал этот текст из разбросанных по сети слепков.
И когда кто-то спрашивает: “Зачем?”, я отвечаю: “Потому что иначе мы останемся в прошлом, где ручные процессы, как старые провода, тянут нас назад в тишину, замедляя каждый шаг. ” Мы строим мир, где as code не просто слова, код - наша новая реальность. И каждый, кто коммитит, становится частью этой вселенной.
Концепт "as code" зародился как реакция на вызовы современной ИТ-индустрии: сложность, скорость изменений и необходимость автоматизации.
As code концепт стал естественным продолжением эволюции разработки, где код стал не только инструментом создания программ, но и способом управления инфраструктурой, документацией, архитектурой и политиками. Этот подход продолжает развиваться, интегрируя новые технологии, такие как AI, и становится стандартом для современных ИТ-компаний
"as code" глубоко корнями тонет в 1970-е годах. Ранние инструменты, такие как Unix "make" и PXE boot, заложили фундамент для автоматизации конфигураций, которые позже эволюционировали в современные подходы, такие как Infrastructure-as-Code, Documentation-as-Code и GitOps. Это подчеркивает, что "as code" — это не просто тренд, а естественное развитие технологий, направленное на упрощение управления сложными системами.
Если хотите глубже погрузиться в историю, рекомендую изучить материалы по эволюции конфигурационных инструментов, которые показывают, как идеи 1970-х годов повлияли на современные практики.
As Code - это актуальная реальность
История показывает, что концепция "as code" — это далеко не модный тренд, а результат многолетней эволюции и актуальное настоящее. Концепция возникла из необходимости управлять сложностью и масштабируемостью систем, и сегодня охватывает не только инфраструктуру, но и документацию, архитектуру, политики и даже процессы разработки.
Для начала давайте разберемся
Почему ИТ-сообщество стремится всё делать в Git?
Git — это не просто система контроля версий, это универсальный инструмент для управления изменениями. Вот ключевые причины, почему ИТ-сообщество стремится всё делать в Git:
- История изменений: Git хранит всю историю изменений, что позволяет отслеживать, кто, когда и что сделал. Это критически важно для анализа и отката ошибок.
- Коллаборация: Git позволяет нескольким людям работать над одним проектом одновременно, не мешая друг другу.
- Прозрачность: Все изменения видны, их можно обсудить, проверить и улучшить через механизмы pull/merge requests.
- Автоматизация: Git интегрируется с CI/CD (Continuous Integration/Continuous Deployment), что позволяет автоматизировать тестирование, сборку и деплой.
Работа в git помогает “все иметь под рукой” и способствует упрощению в создании систем поддержки и контроля стандарта ИТ Производства. - Безопасность: Git позволяет контролировать доступ к коду и данным через ролевую модель и механизмы проверки изменений.
История возникновения гит.
Сначала был гит.
Короткая история рождения Git
Git появился в 2005 году как ответ на кризис в разработке ядра Linux. До этого разработчики использовали проприетарную систему контроля версий BitKeeper, но из-за юридических споров её использование стало невозможным. Линус Торвальдс, создатель Linux, решил создать собственную систему, которая бы отвечала потребностям крупных распределённых проектов. Прекрасный пример проактивной позиции: если тебя что-то не устраивает, ты разрабатываешь инструмент сам для решения задачи. Ты реагируешь на боли не нытьем, а делом оставляя боль позади.
Ключевые моменты:
- Проблема: Linux-сообщество осталось без инструмента для управления кодом. Существующие системы (например, CVS, Subversion) не подходили для масштабных проектов.
- Цель: Торвальдс хотел создать систему, которая бы:
- Была быстрой.
- Поддерживала распределённую разработку.
- Гарантировала целостность данных (через хеши SHA-1).
- Разработка: Git был создан всего за 10 дней. Первая версия была настолько проста, что Торвальдс называл её "игрушечной", но она уже решала ключевые задачи.
- Философия: Git был разработан с акцентом на децентрализацию. Каждый разработчик имеет полную копию репозитория, что делает процесс более гибким и устойчивым.
Эволюция:
- 2005: Первый релиз Git.
- 2008: Появление GitHub, который популяризировал Git среди разработчиков.
- Сейчас: Git стал стандартом де-факто для контроля версий, используемым миллионами разработчиков по всему миру.
Git родился из необходимости и стал революцией в мире разработки. Его простота, скорость и распределённая природа сделали его незаменимым инструментом для команд любого масштаба.
Предпосылки появления "as code"
- Автоматизация и стандартизация: В 1990-х годах с развитием DevOps и Agile-методологий возникла потребность в автоматизации процессов разработки и управления инфраструктурой. Это стало основой для появления подходов, где всё описывается в виде кода
- Распространение систем контроля версий: Git, появившийся в 2005 году, стал ключевым инструментом для управления изменениями, что сделало возможным хранение и версионирование не только кода, но и документации, конфигураций и архитектуры
Infrastructure as Code (IaC)
- Что это: Описание инфраструктуры (серверы, сети, базы данных) в виде кода (например, с помощью Terraform, Ansible, CloudFormation).
- Зачем: Чтобы инфраструктура была воспроизводимой, предсказуемой и легко управляемой.
- Пример: Вместо ручного создания серверов в облаке вы описываете их в коде и разворачиваете одной командой.
Когда мы слышим термин "Infrastructure-as-Code" (IaC), мы обычно думаем о современных инструментах, таких как Chef, Ansible или Terraform. Однако сама идея управления конфигурациями и инфраструктурой через код уходит корнями в 1970-е годы. Уже тогда инженеры сталкивались с необходимостью автоматизации управления парками машин, будь то физические серверы или виртуальные системы.
Ранние инструменты конфигурации
- Unix "make" (1976):
- Один из первых инструментов, который позволял автоматизировать сборку и настройку программного обеспечения.
- Хотя "make" не был полноценным инструментом управления инфраструктурой, он заложил основы для автоматизации задач конфигурации.
- PXE boot (1981):
- Позволял загружать и настраивать целые машины по сети, что стало прообразом современных подходов к управлению инфраструктурой.
- Это был важный шаг к автоматизации, хотя и не в том виде, к которому мы привыкли сегодня.
Эволюция к современным инструментам
Эти ранние инструменты, хотя и не считаются полноценными решениями для управления инфраструктурой, заложили фундамент для современных подходов. Они показали, что автоматизация конфигураций возможна и необходима, особенно с ростом сложности систем.
- 1990-е: Появление CFEngine (1993) стало следующим шагом в эволюции. Это был один из первых инструментов, который позволял управлять конфигурациями на множестве машин.
- 2000-е: С развитием облачных технологий и DevOps появились более мощные инструменты, такие как Puppet (2005) и Chef (2009), которые сделали управление инфраструктурой через код стандартом.
-
2010-е: Terraform (2014) и Ansible (2012) стали лидерами в области IaC, предлагая более гибкие и мощные решения для управления облачной инфраструктурой.
-
2013: Docker
- 2014: Kubernetes + Terraform
- 2017: Pulumi
- 2021: Brainboard
Хотя инфраструктура как код (IaC) может показаться современной концепцией, на самом деле она уходит корнями в историю зарождения машин. Со временем мы решали одни и те же проблемы с разных сторон, создавая слои абстракции для решения проблем, которые инженеры уже решили.
Documentation as Code (Docs as Code)
- Что это: Документация пишется в формате, который легко версионировать (Markdown, AsciiDoc) и хранить в Git.
- Зачем: Чтобы документация всегда была актуальной, доступной и синхронизированной с кодом.
-
Пример: Документация API или архитектуры хранится в репозитории рядом с кодом. Docs-as-Code гарантирует, что ваша документация останется актуальной, не замедляя разработку, а дополняя ее становясь частью процесса разработки и развиваясь в гит совместно с кодом. При таком подходе достижимо одно важное преимущество Docs-as-Code - актуальность документации в соответствии с кодом.
-
Ранние примеры: Ещё в 2000-х годах крупные компании, такие как Microsoft, начали использовать внутренние инструменты для генерации документации из исходного кода. Например, документация .NET Framework создавалась с помощью автоматизированных процессов.
- Формализация концепции: Термин Docs as Code был популяризирован в 2010-х годах, когда такие инструменты, как Markdown, AsciiDoc и Sphinx, стали широко использоваться для создания и управления документацией в репозиториях Git.
Architecture as Code (AaC)
- Что это: Описание архитектуры системы в виде кода (например, с помощью DSL — Domain Specific Language).
- Зачем: Чтобы архитектура была понятной, проверяемой и легко изменяемой.
-
Пример: Использование инструментов вроде Structurizr или PlantUML для описания диаграмм и зависимостей.
например https://c4model.co/m/ -
Появление: Подход Architecture as Code начал развиваться в 2010-х годах с появлением инструментов, таких как Structurizr (2014), которые позволяли описывать архитектурные схемы в виде кода и автоматически генерировать диаграммы.
- Современное применение: Сегодня AaC используется для описания архитектуры систем в формате (например c4), который можно версионировать и тестировать, что делает его частью DevOps-практик.
C4-модель (https://c4model.com) — это популярный подход к визуализации архитектуры программного обеспечения, который помогает разработчикам и архитекторам лучше понимать сложные системы. В сочетании с подходом Architecture as Code (AaC) C4-модель становится мощным инструментом для описания архитектуры в виде кода, что позволяет автоматизировать создание диаграмм, документирование и анализ систем.
Хотя конкретные компании редко публично афишируют использование C4-модели или AaC, есть несколько примеров и индустрий, где эти подходы активно применяются:
1. Крупные технологические компании
- Microsoft: Использует C4-модель для документирования архитектуры своих облачных сервисов, таких как Azure. Подход Architecture as Code помогает автоматизировать создание диаграмм и поддерживать документацию в актуальном состоянии.
- Amazon (AWS): Внутренние команды AWS используют C4-модель для описания архитектуры своих сервисов, а инструменты AaC помогают интегрировать эти описания в CI/CD-процессы.
2. Финансовые организации
- Banks and FinTech: Многие банки и финтех-компании используют C4-модель для документирования сложных распределённых систем. Например, ING и Goldman Sachs применяют AaC для автоматизации создания архитектурных диаграмм и проверки соответствия стандартам.
3. Консалтинговые и IT-компании
- ThoughtWorks: Активно продвигает использование C4-модели и Architecture as Code в своих проектах. Они разрабатывают инструменты и практики для интеграции AaC в процессы разработки.
- Red Hat: Использует C4-модель для документирования архитектуры своих решений, таких как OpenShift, и применяет AaC для автоматизации создания диаграмм.
ДокХаб
X5 активно использует и применяет C4-модель для документирования архитектуры.
Policy as Code
- Что это: Описание правил и политик (например, безопасности или доступа) в виде кода.
- Зачем: Чтобы автоматизировать проверку и обеспечение compliance (соответствия требованиям).
-
Пример: Использование Open Policy Agent (OPA) для описания политик безопасности.
-
Развитие: Подход Policy as Code стал популярным с появлением инструментов, таких как Open Policy Agent (OPA) и Hashicorp Sentinel, которые позволяют описывать политики безопасности и compliance в виде кода. Это стало особенно востребованным в облачных средах.
GitOps и GitSecOps
GitOps — это подход к управлению инфраструктурой и приложениями через Git.
Концепция GitOps была формализована в 2017 году компанией Weaveworks. Она предполагает использование Git как единого источника истины для управления инфраструктурой и приложениями.
- Основная идея: Git становится единственным источником истины (single source of truth). Все изменения в инфраструктуре и приложениях вносятся через Git.
- Как работает:
- Инфраструктура и конфигурации описываются в коде (например, с помощью Kubernetes manifests).
- Изменения в Git автоматически применяются с помощью CI/CD.
- Преимущества:
- Прозрачность: Все изменения видны в Git.
- Автоматизация: Процессы деплоя и обновления автоматизированы.
- Безопасность: Изменения проходят код-ревью и тестирование.
GitSecOps
Расширение GitOps с акцентом на безопасность стало развиваться в 2020-х годах, интегрируя проверки безопасности в CI/CD-процессы.
- Основная идея: Безопасность интегрируется в процесс разработки и эксплуатации через Git.
- Как работает:
- Политики безопасности описываются в коде (Policy as Code).
- Инструменты статического анализа кода (SAST) и анализа зависимостей (SCA) интегрируются в CI/CD.
- Все изменения проверяются на соответствие требованиям безопасности.
- Преимущества:
- Раннее выявление уязвимостей.
- Автоматизация проверок безопасности.
- Соответствие стандартам (например, GDPR, HIPAA).
Как видно из статьи, мы внедряем лучшие инженерные практики, шаг за шагом приближая актуальность инженерной культуры к состоянию мастер-системы, которая, тем временем, бежит вперед и я вижу в пространстве новые коммиты актуальной реальности. Но пока мы остаемся той самой медленной нодой в распределенной сети, которая, несмотря на все усилия, тормозит синхронизацию инженерной культуры с потребностями бизнеса. Мы — узкое горлышко в потоке данных, где каждая задержка отзывается эхом в бесконечном цикле итераций. И пока мы пытаемся догнать мастер-систему, бизнес не может уйти на следующий виток спирали, заторможенный устаревшими процессами и отсутствием коммитов нереализованных фич.
Полезные ссылки:
https://hackernoon.com/everything-as-code-explained-0ibg32a3
https://www.writethedocs.org/guide/docs-as-code/
https://medium.com/@EjiroOnose/understanding-docs-as-code-01b8c7644e23
https://cloud.google.com/deploy/docs/deployment-strategies/canary