1. Паттерны разработки: как устроен CI/CD длиной в 4 миллиарда лет
Мы пишем микросервисы на Go и Rust.
У нас есть Kubernetes, service mesh, observability stack, SRE-команды и SLA 99.99%.
Мы проводим chaos engineering эксперименты и считаем систему надёжной, если она переживает отказ нескольких узлов.
Теперь представьте прод-систему, которая:
- работает без остановки около 4 миллиардов лет;
- никогда не проходила полный рефакторинг;
- не имеет тестового окружения;
- не умеет делать rollback;
- не умеет восстанавливаться из бэкапа;
- непрерывно обслуживает миллиарды экземпляров одновременно.
И при этом до сих пор находится в продакшене.
**Эта система называется биосфера Земли.**
Самое удивительное, что её никто не проектировал.
Эволюция не похожа на инженера с архитектурной диаграммой.
Она больше похожа на бесконечный CI/CD pipeline, в котором каждое изменение сразу попадает в прод, а неудачные релизы просто исчезают вместе с их авторами.
| IT | Эволюция |
|----|----------|
| Разработка → тестирование → деплой | Мутация → отбор → выживание |
| CI/CD pipeline | Смена поколений |
| Интеграционные тесты | Хищники, паразиты, конкуренты |
| Прод-среда | Биосфера |
| Релизный цикл | Продолжительность жизни |
У нас обратная связь приходит в виде алертов, багрепортов и падения метрик.
У эволюции обратная связь гораздо проще.
Она называется **смерть**.
Каждое живое существо — это очередной коммит в репозиторий длиной четыре миллиарда лет.
Большинство коммитов не пережило ревью среды.
2. Катаклизмы как hard reset прод-системы
Иногда падает сервис.
Иногда падает кластер.
А иногда падает почти вся жизнь на планете.
За историю Земли произошло несколько массовых вымираний, во время которых исчезало от 70 до 90 процентов всех существующих видов.
Самое страшное произошло около 252 миллионов лет назад.
Так называемое Пермское вымирание уничтожило примерно 96% морских видов и большую часть наземных экосистем.
Представьте себе дата-центр, в котором одновременно отказали почти все стойки, почти все сервисы и почти все резервные системы.
Именно так выглядела Земля.
Самое интересное началось после аварии.
У инженерных систем есть бэкапы.
Есть snapshots.
Есть disaster recovery планы.
У эволюции ничего этого нет.
После катастрофы она работает только с тем, что случайно осталось живым.
Несколько выживших видов становятся фундаментом для новой экосистемы.
По сути это восстановление продакшена без резервных копий.
Из единственного уцелевшего worker node нужно заново собрать весь кластер.
Причём никто не знает исходную архитектуру.
Никто не знает полный список сервисов.
Никто не знает, какие зависимости были потеряны навсегда.
И всё же система постепенно восстанавливается.
Не потому что умеет возвращаться к прошлому состоянию.
А потому что умеет строить новое.
Это одно из самых странных свойств жизни.
Эволюция почти не умеет откатываться назад.
Зато она удивительно хорошо умеет двигаться вперёд из любого повреждённого состояния.
Для инженера это звучит непривычно.
Мы обычно думаем о надёжности как о способности быстро восстановить систему.
Эволюция использует другой подход.
Она делает ставку на то, чтобы хоть кто-то пережил аварию.
3. Архитектура организма как распределённая система
Если бы инженер проектировал человеческий организм с нуля, он почти наверняка сделал бы центральный сервер.
Одну систему хранения состояния.
Один источник истины.
Один контроллер принятия решений.
Но эволюция пошла другим путём.
У вашего организма нет единой базы данных.
Нет центрального хранилища состояния.
Нет процесса, который знает всё происходящее одновременно.
Каждая клетка обладает лишь небольшим фрагментом информации о мире вокруг неё.
Тем не менее десятки триллионов клеток каким-то образом координируют работу всего организма.
Для инженера это выглядит как гигантская распределённая система.
Сервисы и интерфейсы
Органы — это специализированные сервисы.
Каждый из них имеет собственную ответственность и собственный интерфейс взаимодействия.
| Сервис | Ответственность | Интерфейс |
|--------|----------------|-----------|
| Сердце | Транспорт ресурсов | Кровоток |
| Лёгкие | Газообмен | Диффузия |
| Печень | Метаболизм и фильтрация | Химические сигналы |
| Мозг | Координация | Нервная система |
| Иммунитет | Защита | Клеточные и химические сигналы |
Ни один сервис не может существовать самостоятельно.
Но ни один сервис не управляет всеми остальными напрямую.
Три канала связи
Самое интересное — коммуникация.
Организм использует сразу несколько принципиально разных транспортных протоколов.
Нервы работают как RPC.
Сигнал распространяется быстро, адресно и с минимальной задержкой.
Если вы случайно коснулись горячей поверхности, реакция должна произойти за доли секунды.
Гормоны работают как асинхронная очередь сообщений.
Они распространяются медленнее, зато способны влиять одновременно на огромное количество получателей.
Получатель может обработать сообщение спустя минуты, часы или даже дни после отправки.
Кровь больше напоминает общую шину событий.
Она непрерывно переносит ресурсы, сигналы, продукты обмена и информацию о состоянии системы.
Большая часть этих сообщений вообще не имеет конкретного адресата.
Каждый компонент сам решает, какие сигналы ему важны.
Наблюдаемость встроена в систему
Современные распределённые системы требуют отдельной инфраструктуры мониторинга.
- Prometheus
- Grafana
- Логи
- Трейсинг
Организм использует другой подход.
Он встроил мониторинг прямо в архитектуру.
В крови непрерывно измеряются:
- уровень кислорода;
- уровень углекислого газа;
- температура;
- давление;
- концентрация глюкозы;
- кислотность среды.
Сотни миллионов сенсоров круглосуточно собирают телеметрию.
Причём эта телеметрия не отправляется во внешний мониторинг.
Она немедленно участвует в принятии решений.
- Если уровень кислорода падает, меняется дыхание.
- Если растёт температура, активируется иммунный ответ.
- Если снижается давление, меняется работа сердца и сосудов.
Система не просто наблюдает за собой.
Она непрерывно себя регулирует.
Что удивительно для инженера
Мы часто представляем организм как тщательно спроектированную машину.
На практике он больше похож на огромный распределённый кластер, который постепенно собирался из независимых компонентов сотни миллионов лет.
У него нет единого центра управления.
Нет полного знания состояния системы.
Нет глобального источника истины.
И всё же он способен поддерживать согласованную работу триллионов участников.
Для распределённых систем это до сих пор остаётся одной из самых сложных задач.
4. Митохондрии: самое успешное поглощение в истории
В каждой вашей клетке находятся десятки, сотни, а иногда и тысячи маленьких структур, без которых вы бы умерли за минуты.
Они производят большую часть энергии, которую использует организм.
У них есть собственная ДНК.
Они размножаются независимо от ядра клетки.
Передаются почти исключительно по материнской линии.
И самое странное — когда-то они были отдельными живыми существами.
Примерно два миллиарда лет назад одна древняя клетка поглотила другую.
По всем правилам эволюции история должна была закончиться перевариванием.
Но что-то пошло не так.
Или наоборот — слишком хорошо.
Поглощённая бактерия не погибла.
Она осталась жить внутри хозяина.
Прошли миллионы поколений.
Часть её генов переехала в ядро клетки-хозяина.
Часть осталась у неё.
Обе стороны настолько глубоко интегрировались друг в друга, что перестали существовать по отдельности.
Сегодня каждая сложная форма жизни на Земле является потомком этого древнего слияния.
Самый дорогой vendor lock-in в истории
В инженерных системах мы стараемся избегать критических зависимостей.
Любой архитектор знает опасность ситуации:
"Мы слишком сильно завязались на этот компонент."
Митохондрии — это именно такая история.
Только длиной в два миллиарда лет.
Когда-то они были внешним сервисом.
Теперь они настолько глубоко встроены в систему, что удалить их невозможно.
Нет миграционного плана.
Нет альтернативного провайдера.
Нет стратегии выхода.
Вся платформа построена вокруг их существования.
Частичная интеграция вместо полного поглощения
Что особенно интересно инженеру — интеграция так и не была завершена полностью.
Если бы архитектор проектировал такую систему сегодня, он, вероятно, попытался бы объединить всё в единый код.
Эволюция поступила иначе.
Часть функций осталась внутри митохондрий.
Часть была перенесена в ядро.
Получилась странная гибридная архитектура, в которой критически важный компонент продолжает жить на собственном рантайме.
Это выглядит почти как микросервис, который настолько важен для бизнеса, что его нельзя ни переписать, ни заменить, ни даже полностью понять.
Чему это учит архитектора
Мы часто считаем хорошей архитектурой ту, которую можно легко модифицировать.
Эволюция показывает другой критерий.
Иногда система становится настолько успешной, что цена замены оказывается выше любой потенциальной выгоды.
Митохондрии существуют внутри нас уже около двух миллиардов лет.
За это время исчезли континенты, возникли животные, появились леса, динозавры и люди.
А этот древний внешний сервис всё ещё работает.
И никто так и не смог его заменить.
5. Микробиом: кластер, который вам не принадлежит
Если бы инженер получил задачу спроектировать человека, он, вероятно, предположил бы довольно простую архитектуру.
Есть система.
Есть её код.
Есть её компоненты.
Есть граница между своим и чужим.
Реальность оказалась гораздо страннее.
Внутри каждого человека живут триллионы бактерий.
Некоторые помогают переваривать пищу.
Некоторые синтезируют вещества, влияющие на иммунитет.
Некоторые участвуют в конкуренции с патогенами.
Некоторые, вероятно, влияют даже на работу нервной системы.
Другими словами, значительная часть процессов, поддерживающих вашу жизнь, выполняется организмами, которые вами не являются.
И самое интересное — вы ими не управляете.
Контейнеры без доступа к оркестратору
Представьте Kubernetes-кластер.
Внутри него работают тысячи контейнеров.
Они используют ресурсы системы.
Обмениваются данными.
Влияют на производительность.
Участвуют в обеспечении безопасности.
Но есть проблема.
Вы не знаете их исходный код.
Не можете напрямую обращаться к их API.
Не можете гарантированно обновить их версии.
Не можете точно сказать, какие из них будут запущены через месяц.
И всё же без них платформа перестанет нормально функционировать.
Примерно так выглядит микробиом.
Управление через среду вместо управления через команды
Для большинства сервисов существует административный интерфейс.
Можно отправить команду.
Изменить конфигурацию.
Перезапустить процесс.
С микробиомом это не работает.
У организма практически нет прямого control plane.
Он не может сказать:
"Бактерия №8472, обновись до новой версии."
Он может только менять среду.
Питание.
Температуру.
Кислотность.
Доступные ресурсы.
То есть управлять не самими компонентами, а условиями их существования.
Это удивительно современный подход.
Вместо директивного управления — управление через стимулы.
Dependency hell длиной в сотни миллионов лет
Ситуацию делает ещё интереснее то, что микробиом не является статичной системой.
Бактерии появляются.
Исчезают.
Конкурируют.
Обмениваются генами.
Эволюционируют быстрее своих хозяев.
Получается экосистема зависимостей, которую никто никогда полностью не описывал.
Представьте проект, где сотни сторонних библиотек способны самостоятельно модифицировать друг друга прямо во время выполнения.
Добро пожаловать в биологию.
Кто здесь главный?
Самый неудобный вопрос возникает в конце.
Мы привыкли считать человека единым организмом.
Но если критически важные функции выполняют триллионы независимых организмов, которые живут внутри нас, где проходит граница между системой и её окружением?
Для инженера это звучит как философская игра.
Для биологии это вполне практический вопрос.
Возможно, человек — это не приложение.
И даже не операционная система.
Возможно, человек — это целый кластер, внутри которого постоянно договариваются о совместной работе миллиарды независимых участников.
И большинство из них даже не являются людьми.
6. Безопасность в мире, где всё хочет вас съесть
Представьте систему, которая работает в интернете без файрволов.
Без сегментации сети.
Без централизованной аутентификации.
Без сертификатов.
Без SOC-команды.
И при этом каждый день подвергается миллиардам попыток компрометации.
Добро пожаловать в биологию.
Практически каждый организм на Земле живёт в среде, где огромное количество других организмов пытаются использовать его в своих интересах.
- Съесть.
- Заразить.
- Отравить.
- Вытеснить.
- Использовать как транспорт.
- Использовать как источник энергии.
В природе нет безопасного режима.
Продакшен всегда находится под атакой.
Иммунитет как распределённая система безопасности
Самое удивительное, что у организма нет центрального отдела информационной безопасности.
Нет единого сервера, который знает обо всех угрозах.
Нет глобального списка запрещённых процессов.
Иммунная система больше напоминает огромную распределённую сеть сенсоров и агентов.
Миллиарды клеток непрерывно патрулируют организм.
Проверяют подозрительные сигналы.
Ищут аномалии.
Уничтожают потенциальные угрозы.
Большинство решений принимается локально.
Отдельная клетка почти ничего не знает о состоянии всей системы.
Но система в целом оказывается удивительно эффективной.
Для инженера это выглядит как комбинация IDS, EDR и автономных security-агентов, работающих на каждом узле кластера одновременно.
Главная проблема безопасности — ложные срабатывания
Любой специалист по безопасности знает неприятную истину.
Обнаружить угрозу недостаточно.
Нужно не уничтожить систему в процессе защиты.
Иммунитет сталкивается с той же проблемой.
Слишком слабая реакция приводит к заражению.
Слишком сильная реакция приводит к аутоиммунным заболеваниям, когда система начинает атаковать собственные компоненты.
Представьте антивирус, который удаляет половину рабочих процессов при малейшем подозрении.
Формально безопасность выросла.
Практически система перестала выполнять свои функции.
Эволюция постоянно балансирует между этими двумя крайностями.
Идеальной настройки не существует.
Есть только компромисс.
Гонка вооружений длиной в сотни миллионов лет
Инженеры регулярно сталкиваются с бесконечной гонкой между защитой и атакой.
Появляется новая защита.
Появляется новый способ её обойти.
Появляется новая защита.
Появляется новая атака.
В биологии этот цикл продолжается сотни миллионов лет.
Хищники становятся быстрее.
Жертвы становятся осторожнее.
Бактерии приобретают устойчивость к антибиотикам.
Вирусы учатся обходить иммунный ответ.
Иммунитет адаптируется в ответ.
Никто никогда не побеждает окончательно.
Меняются только правила игры.
Почему абсолютной безопасности не существует
Самый неприятный урок биологии для инженера заключается в том, что идеальной защиты не бывает.
Если система полностью закрыта от внешнего мира, она перестаёт взаимодействовать со средой и погибает.
Если система полностью открыта, её быстро используют другие.
Жизнь существует где-то между этими крайностями.
Организм вынужден постоянно обмениваться веществами, энергией и информацией с окружающим миром.
А значит, вынужден принимать риск.
Это правило одинаково работает для клеток, людей и распределённых систем.
Абсолютная безопасность несовместима с жизнью.
Вопрос лишь в том, насколько дорого обойдётся очередное нарушение безопасности.
И здесь начинается самое интересное.
Потому что некоторые организмы научились не просто обходить защиту.
Они научились захватывать саму систему управления.
7. Манипуляторы: взлом через подмену сигналов в control plane
Большинство паразитов используют хозяина как источник ресурсов.
Они потребляют энергию.
Занимают место.
Создают нагрузку.
Это неприятно, но достаточно примитивно.
Гораздо интереснее паразиты, которые научились не просто использовать систему, а управлять её поведением.
Они не ломают организм.
Не переписывают его целиком.
Не берут прямой контроль над каждой мышцей.
Вместо этого они захватывают каналы принятия решений.
В терминах IT это уже не кража ресурсов.
Это атака на control plane.
7.1. Оса-нейрохирург: точечный патч без переписывания системы
Оса Ampulex compressa охотится на тараканов.
Но вместо того чтобы убить добычу, она делает нечто гораздо более странное.
Оса впрыскивает яд в два конкретных участка нервной системы таракана — области, отвечающие за инициацию движения.
После этого таракан сохраняет способность двигаться.
Его мышцы работают.
Ноги работают.
Органы чувств работают.
Но он перестаёт самостоятельно принимать решение начать движение.
Оса буквально берёт его за усик и ведёт к своему гнезду.
Таракан не парализован.
Он просто больше не хочет уходить.
IT-аналогия выглядит пугающе знакомо.
Представьте бинарный файл без исходников.
Вы не меняете код.
Не переписываете алгоритмы.
Не ломаете зависимости.
Вы находите один критический флаг в памяти и меняете его значение.
Программа продолжает работать.
Но больше не может принять решение перейти в нужное состояние.
Система выглядит исправной.
Проблема в том, что её воля больше ей не принадлежит.
7.2. Волосатики: использование легитимного кода
Черви-волосатики заставляют сверчков и кузнечиков прыгать в воду, где те погибают.
Долгое время казалось, что паразит управляет хозяином при помощи каких-то особых токсинов.
Оказалось, всё гораздо интереснее.
Исследования показали, что волосатики используют молекулы, удивительно похожие на собственные сигнальные механизмы хозяина.
Проще говоря, они не обязательно пишут свой код.
Они заставляют систему запускать её собственный.
IT-аналогия:
Самые опасные атаки редко выглядят как внедрение вредоносного бинарника.
Гораздо эффективнее использовать уже существующие доверенные механизмы.
Не ломать систему авторизации.
Использовать её штатный API.
Не подделывать сертификат.
Украсть настоящий.
Не внедрять новую функцию.
Запустить существующую в нужный момент.
Для журналов событий всё выглядит легитимно.
Система делает именно то, для чего была создана.
Проблема лишь в том, что цели изменились.
7.3. Корнеголовые: захват control plane
Если оса напоминает патч памяти, а волосатик — злоупотребление доверенными механизмами, то корнеголовые переходят на следующий уровень.
Rhizocephala — паразитические ракообразные, заражающие крабов.
После заражения паразит прорастает внутрь организма сетью отростков, пронизывающих значительную часть внутренних тканей и нервных узлов.
Со временем он становится настолько глубоко интегрирован в хозяина, что начинает влиять на его поведение.
Самцы крабов начинают демонстрировать поведение, характерное для самок.
Краб ухаживает за потомством паразита так же, как должен был бы ухаживать за собственным.
Фактически организм продолжает функционировать.
Но его жизненные цели были заменены.
IT-аналогия:
Это уже не вредоносный контейнер.
Не компрометация отдельного сервиса.
Это проникновение в service mesh, API server и etcd одновременно.
Атакующий не подменяет отдельные запросы.
Он становится частью системы управления.
После этого каждый сигнал между сервисами может быть перехвачен, изменён или перенаправлен.
Самое неприятное, что система продолжает считать эти решения своими.
Чему это учит архитектора
Все три истории выглядят по-разному.
Но используют одну и ту же идею.
Оса меняет критический управляющий сигнал.
Волосатик использует доверенные механизмы системы.
Корнеголовый становится частью самой системы управления.
Современная безопасность в основном сосредоточена на защите ресурсов.
Кто получил доступ.
Кто может читать данные.
Кто может выполнять команды.
Природа показывает другую угрозу.
Иногда самый эффективный способ захватить систему — не украсть её ресурсы.
А заставить её добровольно делать то, что нужно вам.
Причём так, чтобы она считала это собственным решением.
Для архитектора это неприятный, но полезный урок.
Самые опасные атаки происходят не тогда, когда ломают вычисления.
Самые опасные атаки происходят тогда, когда подменяют сигналы, на основании которых система принимает решения.
8. Конвергентная эволюция: архитектуры, которые невозможно было не обнаружить
Представьте несколько инженерных команд.
Они работают независимо.
Не читают чужой код.
Не посещают конференции.
Не используют общие библиотеки.
Не знают о существовании друг друга.
У них разные технологии, разные ограничения и разный исторический багаж.
Через несколько сотен миллионов лет вы сравниваете результаты и обнаруживаете странную вещь.
Они решили одни и те же задачи.
Природа постоянно делает именно это.
Полёт был изобретён несколько раз
Если бы кто-то показал инженеру птицу, летучую мышь и стрекозу, а потом спросил:
"Какой из этих проектов был исходником для остальных?"
Ответ был бы очевидным.
Наверняка кто-то скопировал удачное решение.
Но в природе всё произошло иначе.
Насекомые освоили полёт задолго до птиц.
Потом появились птерозавры.
Затем птицы.
Позже летучие мыши.
Каждая группа пришла к полёту самостоятельно.
Без общего репозитория.
Без дизайн-документа.
Без архитектурного комитета.
Самое интересное, что реализации получились совершенно разными.
Птица летает перьями.
Летучая мышь — перепонкой, натянутой между пальцами.
Стрекоза использует четыре независимо управляемых крыла.
Муха вообще превратила вторую пару крыльев в жужжальца — миниатюрную гироскопическую систему стабилизации.
Это выглядит как четыре разных архитектурных решения одной задачи.
Среда диктует требования, а не реализацию
Когда инженеры говорят о паттернах, часто возникает ощущение, что существует единственно правильное решение.
Эволюция показывает более интересную картину.
Для полёта нет единственного правильного крыла.
Есть набор ограничений:
- нужна подъёмная сила;
- нужна устойчивость;
- нужно управление;
- нужно приемлемое энергопотребление.
Внутри этих ограничений возможны десятки реализаций.
Именно поэтому птица и муха выглядят настолько по-разному.
Архитектура отличается.
Функция остаётся той же.
Глаз был изобретён неоднократно
Ещё интереснее история со зрением.
Интуитивно кажется, что сложный глаз должен был появиться один раз.
Слишком уж сложная конструкция.
Но природа снова не согласилась.
Сложные глаза независимо возникали у разных групп животных.
Причём иногда более поздние реализации оказывались технически лучше ранних.
У позвоночных существует слепое пятно.
Сетчатка устроена так, что нервные волокна проходят перед светочувствительными клетками.
У кальмаров и осьминогов этой проблемы нет.
Они решили ту же задачу другой архитектурой.
Получилась альтернативная реализация с меньшим техническим долгом.
Возможно, паттерны не изобретаются
Это самая интересная часть истории.
Мы привыкли воспринимать архитектурные паттерны как результат человеческой изобретательности.
Кто-то придумал очереди сообщений.
Кто-то придумал репликацию.
Кто-то придумал кэширование.
Но конвергентная эволюция заставляет посмотреть на проблему иначе.
Что если хорошие решения не создаются?
Что если они обнаруживаются?
Когда ограничения становятся достаточно жёсткими, пространство возможных архитектур начинает сжиматься.
Большинство решений оказываются тупиковыми.
Некоторые работают.
Совсем немногие оказываются устойчивыми.
Именно к ним разные команды начинают приходить снова и снова.
Не потому что копируют друг друга.
А потому что задача постепенно выталкивает их в одну и ту же область пространства решений.
Что это значит для инженера
Возможно, архитектура — это не столько творчество, сколько поиск.
Не создание формы с нуля.
А обнаружение формы, которая естественным образом возникает под действием ограничений среды.
Птицы, летучие мыши, стрекозы и мухи показывают удивительную вещь.
Они используют разные материалы.
Разные механизмы.
Разные системы управления.
Разную историю развития.
Но все пришли к способности летать.
Точно так же независимые инженерные команды снова и снова приходят к очередям сообщений, репликации, кэшированию, компенсационным транзакциям и event-driven архитектурам.
Не потому что кто-то написал об этом книгу.
А потому что определённые задачи имеют ограниченное число хороших решений.
И если дать достаточно времени, разные команды рано или поздно найдут их самостоятельно.
Природе для этого понадобились сотни миллионов лет непрерывного продакшена.
У нас обычно есть только дедлайн на следующий квартал.
9. Технический долг природы
Любой инженер знает момент, когда нужно остановиться и сказать:
Так дальше жить нельзя.Надо переписывать.
Старая архитектура мешает развитию.
Временное решение стало постоянным.
Костыли начинают поддерживать другие костыли.
Технический долг становится дороже самого продукта.
В этот момент обычно начинается рефакторинг.
Эволюция поступает иначе.
Она почти никогда ничего не переписывает.
Самый старый легаси-проект на планете
Представьте кодовую базу возрастом четыре миллиарда лет.
Над ней работали миллиарды разработчиков.
Большинство из них давно удалены из системы.
Документация отсутствует.
Авторы первых модулей неизвестны.
Архитектурный комитет никогда не существовал.
И при этом проект всё ещё находится в продакшене.
Именно так выглядит жизнь на Земле.
Почему у нас есть слепое пятно
Сетчатка человеческого глаза устроена странно.
Свет проходит через слой нервных волокон и только потом попадает на светочувствительные клетки.
В месте выхода зрительного нерва возникает слепое пятно.
Любой современный инженер назвал бы это архитектурным дефектом.
Что особенно интересно — природа сама знает более удачное решение.
У кальмаров и осьминогов этой проблемы нет.
Они пришли к другой архитектуре.
Но эволюция не умеет брать готовый модуль из одного проекта и переносить его в другой.
Поэтому позвоночные продолжают жить с ошибкой, которой сотни миллионов лет.
Позвоночник как система, которую никто не планировал
Позвоночник млекопитающих создавался для существ, передвигавшихся на четырёх конечностях.
Потом некоторые из них решили ходить на двух ногах.
Вместо полной переработки конструкции эволюция адаптировала существующую.
Результат знаком каждому человеку старше тридцати.
Боли в спине.
Грыжи.
Проблемы с осанкой.
С инженерной точки зрения это выглядит как попытка запустить новую нагрузку на систему, которая проектировалась под совершенно другой сценарий использования.
Аппендикс и другие призраки прошлого
Иногда легаси остаётся просто потому, что его удаление слишком дорого.
Аппендикс долго считался бесполезным пережитком прошлого.
Сегодня считается, что определённые функции у него всё же есть.
Но даже если бы их не было, это мало что меняло бы.
Эволюция удаляет не всё ненужное.
Она удаляет только то, что достаточно сильно мешает выживанию.
Если старый модуль почти ничего не стоит системе, он может существовать миллионы лет.
Любой разработчик видел такой код.
Никто не знает, зачем он нужен.
Но никто не рискует его удалять.
Почему природа не делает рефакторинг
Это самый интересный вопрос.
Почему эволюция не исправляет очевидные ошибки?
Потому что она работает не так, как инженер.
Инженер может остановить проект.
Выделить бюджет.
Собрать команду.
Переписать систему целиком.
Эволюция не может остановить продакшен ни на секунду.
Каждое изменение должно работать сразу.
Здесь и сейчас.
Под полной нагрузкой.
В условиях непрерывной эксплуатации.
Поэтому локальный костыль почти всегда выигрывает у глобального перепроектирования.
Возможно, мы слишком боимся легаси
Инженеры любят говорить о техническом долге как о чём-то однозначно плохом.
Эволюция предлагает более прагматичный взгляд.
Легаси — это не обязательно ошибка.
Иногда это след успешных решений, которые пережили все альтернативы.
Да, позвоночник несовершенен.
Да, глаз содержит архитектурные компромиссы.
Да, организм полон исторических артефактов.
Но все эти решения прошли самое жёсткое тестирование из возможных.
Они пережили сотни миллионов лет продакшена.
Возможно, главный урок эволюции заключается не в том, что технический долг безопасен.
А в том, что идеальная архитектура существует только на диаграммах.
В реальном мире выживают системы, которые достаточно хороши, чтобы продолжать работать.
Даже если внутри них хранится четыре миллиарда лет накопленных компромиссов.
10. Четыре миллиарда лет в продакшене
Мы любим рассказывать истории про инженерное мастерство.
Про красивые архитектуры.
Про элегантные решения.
Про системы, которые были тщательно спроектированы с самого начала.
Жизнь на Земле рассказывает совершенно другую историю.
Никто не проектировал митохондрии.
Никто не планировал микробиом.
Никто не закладывал архитектуру позвоночника.
Никто не создавал дорожную карту для появления мозга.
Каждое решение принималось локально.
Каждое изменение решало проблему сегодняшнего дня.
Каждый новый слой строился поверх предыдущего.
Иногда удачно.
Иногда ужасно.
Но система продолжала работать.
За четыре миллиарда лет она пережила астероиды.
Пережила супервулканы.
Пережила изменения атмосферы.
Пережила массовые вымирания.
Пережила практически все катастрофы, которые только можно представить.
И при этом ни разу не получила возможности остановить продакшен и начать заново.
В каком-то смысле жизнь представляет собой самый экстремальный эксперимент по непрерывной эксплуатации системы в истории Вселенной.
Именно поэтому она так интересна инженерам.
Не потому, что природа совершенна.
Она не совершенна.
Она полна технического долга.
Полна исторических компромиссов.
Полна странных зависимостей и архитектурных решений, которые сегодня никто не согласовал бы на ревью.
Но она демонстрирует нечто гораздо более важное.
Устойчивость.
Мы часто воспринимаем архитектуру как искусство построения правильной системы.
Эволюция предлагает другой взгляд.
Возможно, архитектура — это искусство построения системы, которая сможет пережить собственные ошибки.
Не самой красивой.
Не самой чистой.
Не самой эффективной.
А той, которая останется работоспособной после тысяч неудачных решений, миллионов локальных исправлений и миллиардов лет непрерывных изменений.
За время существования жизни исчезли бесчисленные виды.
Менялись океаны.
Менялись континенты.
Менялся климат.
Менялись правила игры.
Но сама система продолжала работать.
Не потому, что была идеально спроектирована.
А потому, что научилась жить в мире, где идеальных решений не существует.
Возможно, это и есть главный урок эволюции для инженеров.
Выживает не идеальная архитектура.
Выживает архитектура, которая продолжает работать достаточно долго, чтобы пережить всё остальное.