Карта курса
Семь актов и два эпилога. Каждый модуль — глава истории и порция решений.
Акт I. Монолит
- 01не начат
Система, которую все боятся трогать
Первый день Ивана в «Ярмарке»: правка одной строчки в заказах ломает выгрузку для бухгалтерии.
- 02не начат
Чего на самом деле хочет бизнес
Инвестраунд закрыт, план — рост в десять раз. Иван превращает «чтобы не тормозило» в требования, которые можно измерить.
- 03не начат
Карта хаоса
Команда спорит: «переписать всё с нуля» против «ничего не трогать». Иван применяет Cynefin, чтобы понять, в каком домене находится каждая часть системы.
- 04не начат
Каталог, который не влезает в таблицы
Фермеры хотят карточки с произвольными атрибутами, а в products уже сорок nullable-колонок и EAV-костыль. Команда выбирает модель данных для каталога.
- 05не начат
Цена связей
Ретроспектива инцидента первой недели: Иван показывает команде, почему изменение было непредсказуемым, — и считает степени свободы системы.
- 06не начат
Границы
Иван предлагает модуляризовать монолит, не распиливая его на сервисы. Спор с Геной о том, что такое настоящий модуль.
Модульный монолит утверждён. Но инвестраунд закрыт, команда утроилась, нагрузка растёт — и модули начинают дребезжать.
Акт II. Рост
- 07не начат
Дребезг зависимостей
Хотфикс в модуле цен ломает три соседних. Какие виды знания утекли через границы?
- 08не начат
Почему база тормозит
Сезон урожая: p99 записи заказа вырос в двадцать раз, а код не менялся. Иван спускается под капот — к движку хранения.
- 09не начат
Первый разрез: платежи
Платежи выходят из монолита первыми. Сколько знания они утянут за собой через новую границу — и что делать с общей транзакцией, которой больше нет?
- 10не начат
Язык межсервисного общения
Платежи выкатили новую версию — и старый обработчик заказов упал на поле, которого не ждал. Учимся менять схемы, не роняя соседей.
- 11не начат
Что резать, а что не трогать
Двенадцать кандидатов на выделение и команда, готовая пилить всё. Иван достаёт два фильтра: дистанцию и волатильность.
- 12не начат
Формула баланса
Иван защищает план декомпозиции перед советом. Три оси связанности сходятся в одну формулу — и она отвечает, что резать, а что не трогать.
План декомпозиции принят, «Ярмарка» выходит в 15 регионов. Одна база на всю страну — что может пойти не так?
Акт III. Распределёнка
- 13не начат
Одна база — одна точка отказа
Чёрная пятница, пятнадцать регионов, одна база-лидер. Сервер моргнул — и вся страна на одиннадцать минут перестала оформлять заказы.
- 14не начат
Шардируй это
Реплики разгрузили чтение, но запись и объём всё ещё на одном узле, а Москва душит его сильнее всех. Пора резать данные на части.
- 15не начат
Деньги не прощают
Двойное списание, отрицательный остаток у фермера и ночной разбор с юристами. Иван учится изоляции — там, где ошибаться нельзя.
- 16не начат
Всё, что может сломаться
Сервис курьеров ведёт себя так, будто у него два главных узла разом. Сеть врёт, часы врут, паузы врут — кому верить?
- 17не начат
Договориться в темноте
Раз сеть, часы и паузы врут — как гарантированно выбрать одного лидера? Консенсус без магии.
- 18не начат
Ребалансировка
Два сервиса перестукиваются сорок раз на один заказ. Иван предлагает их слить — и объясняет, почему это не откат, а ребалансировка.
Система пережила чёрную пятницу. Теперь фермеры хотят аналитику, бизнес — realtime, а поиск отстаёт на сутки.
Акт IV. Платформа данных
- 19не начат
Ночной конвейер
Поиск отстаёт на сутки, а ночной пересчёт роняет прод. Иван строит конвейер, который не страшно перезапустить.
- 20не начат
Река событий
Карта должна показывать курьеров вживую, а не раз в ночь. Иван меняет опрос базы на поток событий.
- 21не начат
Разобрать базу на части
Крамольная мысль: журнал событий — хребет, а база — лишь производное. «Вывернуть базу наизнанку» — и когда этого делать не нужно.
- 22не начат
Экзамен архитектора
Новое направление «Ярмарка для бизнеса». Марина кидает шесть ситуаций подряд — и в каждой сходится весь курс.
Платформа работает. Но накопленные данные поднимают вопрос, на который не отвечает ни одна из книг по архитектуре.
Эпилог
Проходит несколько месяцев. B2B растёт, платформа справляется. А на совете директоров Марине задают вопрос, который сейчас слышит каждый CTO: «У всех ИИ. Где наш?»
Акт V. Агенты
- 24не начат
Стохастический стажёр
Совет требует «наш ИИ», поддержка тонет в обращениях. Иван разбирает, что такое агент на самом деле — и где ему не место.
- 25не начат
Руки для агента
Ассистент отвечает красиво, но не знает статус ни одного заказа. Дать агенту руки — и не дать ему лишнего.
- 26не начат
Память стажёра
Агент забывает разговор на третьей реплике и помнит лишнее на десятой. Память — это снова данные, у которых есть хозяин.
- 27не начат
Агент читает реку
Ассистент должен знать каталог и правила платформы. Векторный индекс — ещё одно производное представление, и оно тоже отстаёт.
- 28не начат
Бригада агентов
Один агент разросся в god-класс с двадцатью инструментами. Резать на бригаду — но по каким швам?
- 29не начат
Виза для чужого агента
Оптовики приходят со своими закупочными ИИ и просят «просто дайте доступ». Протоколы — контракты эпохи агентов.
- 30не начат
Доверять, но проверять
Агент в проде — это инцидент, который ждёт своего часа. Тимур строит наблюдаемость, тесты и предохранители для недетерминизма.
Агенты работают, предохранители на месте, панели не краснеют. А совет директоров закрывает новый раунд — с условием, которое превратит «Ярмарку» из витрины в источник данных о целой экономике.
Акт VI. Индикаторы
- 32не начат
Миллион рядов
Совет требует «стать источником данных об экономике». Миллион временных рядов не влезает в привычную базу — но проблема не в размере, а в форме нагрузки.
- 33не начат
Тысяча источников
Внешние данные приходят когда хотят, в форматах, которые меняются без предупреждения. Контракт с миром, которым не управляешь.
- 34не начат
Число, которое меняется
Клиент показывает два отчёта с разными цифрами за один месяц. Оба правильные: официальные числа меняются задним числом.
- 35не начат
Свой индекс
Самое ценное — не чужие ряды, а свои: миллионы живых цен. «Ярмарка» строит собственный индекс — и учится не изобретать науку и не присасываться к чужой базе.
- 36не начат
Фабрика прогнозов
Миллион рядов — миллион прогнозов. Кто их будет делать: миллион моделей, одна глобальная — или чужая, уже обученная?
- 37не начат
Что мы знали в тот вторник
Прогноз в бэктесте гениален, в проде — стыден. Модель подсматривала в будущее — и никто этого не замечал.
- 38не начат
Говорящие числа
Клиенты хотят спрашивать данные словами и получать отчёты текстом. LLM охотно говорит о числах — и охотно их выдумывает.
Платформа данных считает, прогнозирует и говорит. Но терминал «Индикаторов» пилят уже три команды — в одном фронтенде, и по пятницам он всё чаще принадлежит никому.
Акт VII. Витрина для витрин
- 39не начат
Фронтенд-монолит
Терминал пилят три команды, на подходе четвёртая — а деплой один на всех. Пятница, релизный поезд, хотфикс графиков ломает алерты. Где-то Иван это уже видел.
- 40не начат
Нарезка и композиция
Решили резать. По каким швам — и где склеивать: на сервере, на клиенте, в сборке?
- 41не начат
Контракты на клиенте
Зоны независимы до первого «пусть выбор региона фильтрует всё». Общее состояние — это общая база данных, только в браузере.
- 42не начат
Сто деплоев в витрину
Три команды деплоят независимо — и впервые в проде встречаются версии, которые никогда не встречались на стенде.
- 43не начат
Маятник
Автономия победила: команды летят. Через полгода терминал выглядит как три разных продукта. Маятник качается обратно — и это не поражение.
Терминал собран из зон, команды летят, панели не краснеют. Остался вопрос, который не решается кодом: кто отвечает за слова, сказанные системой.