Школа архитектурыучебник на одной странице

Как устроены большие сервисы — и как строить их с нейросетями

Базовая грамотность архитектора на одной странице. Разобрано на твоём маркетплейсе: что в нём уже есть, чего нет и в каком порядке это достраивать.

Факты сняты 14.11.2026около 45 минут чтения30 глав, словарь в конце

Как читать

Правило этой школы: каждое утверждение помечено, откуда оно. Мнение нейросети фактом не считается — в том числе моё.

Измерено — цифра снята с прибора, у неё есть дата.
По документам — так написано в коде и документах проекта; на живой системе не проверялось.
Практика отрасли — так делают большие компании.
Моя позиция — мнение. С ним можно и нужно спорить.

Новые слова выделены жирным, рядом в скобках — английский термин: под ним это слово живёт в документации и в ответах нейросети. Все термины собраны в словаре.

Часть I · Мышление

1С чего начинается архитектура

Архитектура — это не схема из квадратиков. Это список решений, которые дорого менять потом: где лежат данные, что случится при отказе, как ходят деньги, от кого мы зависим. Кнопку можно перекрасить за час. Способ хранения заказов меняют месяцами.

Архитектор не рисует систему, которая «выдержит всё». Он отвечает на четыре вопроса — цифрами.

  1. Что сломается первым? У любой системы есть самое узкое место (bottleneck). Его надо знать заранее, а не узнать из жалобы.
  2. При какой цифре? «Когда вырастем» — не ответ. «При 40 запросах в секунду к одной копии сервера» — ответ.
  3. Сколько стоит поломка? Витрина лежит час — потеряны продажи за час. Потеряны деньги покупателя или база заказов — потеряно доверие, это дороже на порядки.
  4. Что самое дешёвое можно сделать сейчас, чтобы поломка стала переносимой?
Запомни

Не строят «на вырост». Строят так, чтобы потолок был известен, измерен и у него был заранее записанный триггер замены — цифра, при которой деталь меняют.

Второе, что отличает профессионала: он знает, что бесплатных решений нет. Каждый новый механизм — кэш, очередь, копия базы — это ещё одна деталь, которая может сломаться и которую надо обслуживать. Поэтому хороший архитектор добавляет детали неохотно и только под цифру.

2Прикидка на салфетке

Первый навык — быстро перевести бизнес-цель в нагрузку. Нагрузку меряют в запросах в секунду (RPS) и всегда считают пик, а не среднее: система падает в пике.

Цель «300 000 покупок в месяц». Допущения грубые, важен порядок величин.

ШагРасчётИтог
Заказы300 000 в месяц≈ 10 000 в день
Запись заказа10 000 / 86 400 секунд, пик ×101–2 заказа в секунду в пике
Визитыпокупает 1,5 % зашедших≈ 670 000 визитов в день
Просмотры8 страниц на визит≈ 5,3 млн в день, ≈ 60 в секунду
Запросы к серверупик ×4, по 4 запроса на страницу≈ 1 000 запросов чтения в секунду в пике

Посмотри на две жирные цифры. Заказов — один-два в секунду. Запросов чтения — тысяча. Разница в 500–1 000 раз. Из неё следует всё остальное.

3Две задачи: чтение и деньги

чтение — около 99 % нагрузки

Тонкая полоска справа — деньги и заказы.

Чтение: каталог, поиск, карточка

Почти вся нагрузка. Важна пропускная способность. Лечится кэшем, сетью доставки, копиями сервера, поисковым движком.

Ошибка стоит дёшево: страница открылась на секунду позже.

Деньги и заказы

Доли процента нагрузки. Одной базы хватает на годы. Важна не скорость, а невозможность ошибки: не списать дважды, не продать то, чего нет, не потерять платёж.

Ошибка стоит дорого.

Запомни

Большинство провалов «высоконагруженных» проектов — от того, что эти две задачи путают: усложняют деньги ради скорости, которой там не нужно, и забывают про кэш там, где нагрузка настоящая.

Часть II · Механика

4Путь одного запроса

Человек открыл карточку товара. Вот через что проходит его запрос в большой системе. Практика отрасли

Покупательтелефон или браузер
1Сеть доставки контента (CDN)Серверы рядом с человеком отдают готовые страницы и картинки. Дальше идёт только то, чего у них нет.
2Балансировщик (load balancer)Раздаёт запросы по копиям приложения и не шлёт их на упавшую.
3Копии приложенияОдинаковые программы, которые принимают запрос, проверяют права и собирают ответ. 2 → 5 → 50 штук.
4Быстрая памятьХранит готовые ответы и счётчики в оперативной памяти. Отвечает за доли миллисекунды.
5Очередь → работникиВсё, что можно сделать позже: письма, обработка фото, отчёты.
6База данныхГлавная копия принимает запись. Читающие копии отвечают на чтение.
7Специальные хранилищаПоисковый движок, хранилище файлов, хранилище для отчётов.
СлойКак растётЧто мешает расти
1. Сеть доставкиСама — это арендованная услугаСтраницы с личными данными кэшировать нельзя. Поэтому витрину делают одинаковой для всех, а личное подгружают отдельно
2–3. ПриложениеДобавлением копий, почти линейноКопия не должна ничего помнить о человеке между запросами
4. Быстрая памятьРазделением по ролямКогда в одном экземпляре лежит и то, что терять нельзя (очереди), и то, что можно (кэш)
5. ФонЧислом работниковЗадача должна переносить повтор: её могут доставить дважды
6. БазаТруднее всегоЗдесь живёт состояние, его нельзя просто «скопировать»
7. СпецхранилищаКаждое по-своемуДанные надо держать в согласии с базой

5Три рычага. Других нет

Когда системе не хватает мощности, способов ровно три, и применяют их в таком порядке.

  1. Не делать работу. Ответ, который считали минуту назад, отдать готовым. Это кэш. Самый дешёвый рычаг: хороший кэш снимает 80–95 % нагрузки чтения.
  2. Делать работу дешевле. Найти, на что уходит время одного запроса, и убрать лишнее: лишний поход в базу, тяжёлый расчёт, отсутствующий индекс.
  3. Добавить работников. Поставить больше одинаковых копий сервера.

Ошибка новичка — начинать с третьего: купить десять серверов, чтобы десять раз выполнять работу, которую можно было не делать вовсе.

Третий рычаг бывает двух видов. Вверх (vertical scaling) — машина мощнее: просто, но у железа есть потолок. Вширь (horizontal scaling) — больше машин: потолка почти нет, но система должна это уметь.

6Состояние — главное слово

Состояние (state) — всё, что система обязана помнить: заказы, остатки, кто вошёл, что лежит в корзине.

Представь магазин. Кассиры ничего не помнят сами — всё записано в одной общей книге. Нужен ещё кассир — ставишь, и он сразу работает: любой кассир обслужит любого покупателя. Это копия приложения без состояния (stateless). А книга одна. Её нельзя просто размножить: если две книги разойдутся, непонятно, какой верить. Это база данных.

Запомни

Всё, что не хранит состояние, масштабируется деньгами. Всё, что хранит, — инженерией. Архитектор всю жизнь занят одним: выдавливает состояние из слоёв, где оно не нужно, и бережёт те немногие места, где оно обязано быть.

У тебя

Приложение умеет работать несколькими копиями (число копий — настройка) и не хранит ничего своего; перезапуск по одной копии без ошибок проверен замером команды на двух копиях. Это главный задел под рост, и он сделан. По документам

7Кэш: рычаг номер один

Кэш (cache) — место, где лежит готовый ответ, чтобы не считать его заново. Кэшей несколько, они стоят слоями:

  • в браузере и приложении — картинка, которую телефон уже скачал;
  • в сети доставки — готовая страница каталога на сервере рядом с человеком;
  • в быстрой памяти — результат тяжёлого запроса к базе;
  • в самой базе — заранее посчитанные таблицы, например счётчики по дням.

Качество кэша меряют долей попаданий (cache hit rate): сколько запросов из ста получили готовый ответ. 90 % попаданий — значит, до сервера доходит каждый десятый запрос.

Цена кэша одна: ответ может устареть. Человек видит «в наличии», а товар купили минуту назад. С этим борются двумя способами: сроком жизни записи (TTL — «через 60 секунд спроси заново») и сбросом при изменении (invalidation — «товар изменился, выбрось старое»). Второе точнее и заметно сложнее.

Кэшировать можно

То, что одинаково для всех и может отстать на минуту: каталог, карточку, фото, список категорий.

Кэшировать нельзя

Остаток в момент оформления заказа, баланс, корзину, всё личное. Здесь нужен только свежий ответ из базы.

8База данных

База — это книга учёта, которая не врёт. Четыре слова, без которых её не понять:

  • Транзакция (transaction) — несколько изменений как одно: либо записались все, либо ни одного. Списать остаток и создать заказ — одна транзакция. Не бывает «остаток списан, заказа нет».
  • Индекс (index) — оглавление к таблице. С ним база находит строку сразу, без него читает всё подряд. Отсутствующий индекс — самая частая причина «вдруг стало медленно».
  • Блокировка (lock) — пока один покупатель оформляет последнюю штуку, второй ждёт. Так не продают один товар дважды.
  • Миграция (migration) — изменение устройства таблиц. На живой системе её делают в три шага: добавили новое, перевели на него код, убрали старое. Иначе во время выкатки одна версия кода не поймёт таблицы другой.

Лестница базы

Базу масштабируют последней, и ступени обычно идут в таком порядке. Каждая следующая заметно дороже предыдущей. Практика отрасли

№Что делаютЧто это даёт и чем платят
1Машина мощнееОдна база на хорошем железе держит тысячи записей в секунду. Заказов у маркетплейса — 1–2 в секунду. Этой ступени хватает надолго
2Посредник соединений (connection pooler)Сотни копий приложения делят несколько десятков соединений с базой. Без него число копий упирается в лимит соединений
3Читающие копии (read replica)Чтение каталога уходит на копии, главная занята записью. Плата: копия отстаёт на доли секунды, и человек может не увидеть то, что сам только что записал
4Вынести чужую работуПоиск — в поисковый движок, отчёты — в отдельное хранилище, файлы — в объектное. База остаётся для заказов и денег
5Нарезать большие таблицы по времени (partitioning)Старые месяцы лежат отдельно и не мешают свежим; удаление старого — мгновенное
6Разделить базу на части (sharding)Последний шаг: когда одна главная копия не справляется с записью или закон требует хранить данные страны внутри страны

9Очереди и фоновая работа

Человек нажал «оформить». Ему нужен ответ «заказ принят» за полсекунды. А письмо продавцу, уведомление, пересчёт статистики могут подождать. Такую работу кладут в очередь (queue), и её разбирают работники (workers) — отдельные процессы.

Очередь даёт три вещи: быстрый ответ человеку, сглаживание пиков (в распродажу очередь растёт, но ничего не падает) и повтор при сбое.

За это платят одним неприятным свойством. Сеть ненадёжна: работник мог выполнить задачу и не успеть об этом сообщить. Очередь не знает, сделано или нет, и отдаёт задачу ещё раз. Доставки «ровно один раз» в природе нет. Есть «хотя бы один раз» (at-least-once).

Запомни

Любая задача должна быть идемпотентной (idempotent): выполнил второй раз — ничего не изменилось. «Списать 500 рублей» — опасно. «Списать 500 рублей по операции №123, если ещё не списано» — безопасно.

  • Повтор с паузой (retry with backoff) — не получилось, пробуем через 1, 5, 30 секунд, а не долбим без остановки.
  • Очередь неудачников (dead letter queue) — задача упала десять раз и уходит в отдельный список, который смотрит человек. Иначе она молча пропадёт.
  • Таблица исходящих (outbox) — как не потерять событие. «Заказ создан» записывается в базу той же транзакцией, что и сам заказ, а отдельный процесс потом отправляет его дальше. Заказ записан — событие точно уйдёт. Не записан — точно не уйдёт.
У тебя

Очередь, повтор и таблица исходящих сделаны. Слабое место: работник один, и не проверено, не задвоятся ли задачи по расписанию при двух. По документам

10Куб масштабирования и как делают большие

У инженеров есть стандартная модель: три оси, по которым система может расти.

Ось X — клоны

Одинаковые копии за балансировщиком. Дёшево, первая мера.

Ось Y — по функциям

Поиск, чат, обработка фото, платежи — отдельные службы. Нужно, когда части мешают друг другу или над ними работают разные команды.

Ось Z — по данным

Та же система в нескольких экземплярах: каждый обслуживает свою страну или группу клиентов. Экземпляр называют ячейкой (cell).

У больших
  • Shopify — модульный монолит (один большой код) и ячейки: магазины разложены по изолированным группам, у каждой своя база. Авария одной группы не задевает остальные. Перед распродажами — учения под нагрузкой на боевой системе.
  • Stack Overflow (вся сеть его сайтов) годами обслуживал больше миллиарда просмотров в месяц примерно с двух десятков собственных серверов: мощные машины, аккуратный кэш, быстрый код. Пример того, как далеко уводят рычаги 1 и 2.
  • Облако Amazon — ячейки как принятая практика: у ячейки жёсткий потолок размера, растут числом ячеек.
  • Alibaba — покупатель привязан к своему центру данных, почти вся его работа идёт там. Но общие данные, например остатки, остаются в центре. То, что должно быть одно на всех, не делят.
  • Ozon, Wildberries — сотни и тысячи отдельных служб. Это ответ на сотни команд разработки, а не на число покупателей.
Запомни

Отдельные службы (микросервисы) появляются из-за числа людей в разработке. Ячейки — из-за числа клиентов и требований стран. Нагрузку сами по себе микросервисы не лечат.

Моя позиция

Тебе нужна ось X сейчас, точечно ось Y (она уже начата: приложение, работник, чат и обработчик видео — отдельные процессы) и ось Z — когда придёт вторая страна со своими требованиями к данным. Дробить монолит на службы не надо: это решение для ступени, до которой ещё несколько порядков роста.

11Расчёт: 30 000 человек одновременно

ШагРасчётИтог
Просмотры30 000 человек, страница раз в 25 секунд≈ 1 200 страниц в секунду
Запросыпо 4 запроса на страницу≈ 4 800 в секунду
После кэша на входепопадание 85–90 %500–700 доходит до приложения
Копии приложения20–25 запросов в секунду на копию20–35 копий, каждой своё ядро
Сборка страниц сайтаотдельный слой, тоже упирается в процессорещё несколько машин
Чатсоединение держат 10–30 % людей3 000–9 000 соединений, 2–4 копии чата
Заказы1–2 % людей покупают в течение часаменьше 1 заказа в секунду — база не заметит

Это около десятка машин, а не сотни. Без кэша на входе та же нагрузка потребовала бы в семь–десять раз больше копий приложения — вот цена первого рычага.

У тебя — откуда цифра 20–25

Замер команды на стенде: одна копия держит 20–25 запросов в секунду под смешанной нагрузкой и упирается в одно ядро процессора. Три копии на той же машине дают около 50, а не 75 — ядра общие. Линейный рост «копия = ещё 25» верен, только когда у копии есть своё свободное ядро. По документам

И ловушка: 35 копий по 10 соединений — это 350 соединений при лимите базы 100. Поэтому посредник соединений нужен вместе со второй машиной приложения, а не «когда-нибудь».

Часть III · Надёжность

12Отказы и резервные копии

Всё ломается: диски, сети, хостеры, люди. Вопрос не «сломается ли», а «что будет, когда сломается».

  • Единая точка отказа (single point of failure) — деталь, с отказом которой встаёт всё. Архитектор ищет такие детали и либо дублирует их, либо записывает как принятый риск.
  • Допустимая потеря данных (RPO) — сколько минут работы можно потерять при аварии. Копия раз в сутки — значит, можно потерять сутки.
  • Время восстановления (RTO) — через сколько система снова работает.

Взрослая система начинается с того, что эти две цифры записаны и проверены учением.

У больших — правило 3-2-1

Три копии данных, на двух разных носителях, одна — в другом месте. Смысл в последнем пункте: копия на той же машине спасает от ошибочного удаления, но не от потери машины.

И второе правило: копия, которую не пробовали восстановить, — не копия. Типичная история о потере данных — «копии делались годами, а когда понадобились, не развернулись».

У тебя

Копия базы делается каждую ночь; последняя — 14.11. Раз в месяц копия автоматически разворачивается в пробную базу; последняя проверка — 01.11, успешно. Это сделано лучше, чем у большинства небольших проектов. Измерено 14.11

Но журнал копий сам пишет: вывоз за пределы сервера пропущен. Скрипт умеет вывозить копии наружу в зашифрованном виде — площадка для этого не подключена. Измерено 14.11

Что это значит

Пропадёт сервер — сбой диска, блокировка или потеря аккаунта у хостера, взлом, ошибочное удаление — и вместе с базой пропадут все её копии. Никакая архитектура под миллионы не имеет значения, пока это так. И это самый дешёвый пункт из всего списка.

Следующие ступени после вывоза копий: восстановление на момент времени (PITR) — база пишет журнал всех изменений, и её можно вернуть на любую минуту, а не только на ночь; и горячая копия (standby) — вторая база на другой машине, которая повторяет главную и подхватывает работу при её отказе.

13Как не упасть целиком

Масштаб — это не только «больше». Это ещё и «чтобы отказ части не стал отказом всего».

  • Обратное давление (backpressure). Перегруженная система должна честно отказывать части запросов — «попробуйте через 5 секунд», — а не принимать всё и умирать. Инструмент — лимит запросов (rate limit).
  • Пределы времени (timeout). Каждый вызов наружу и в базу — с потолком ожидания. Иначе один зависший сосед вешает всех, кто его ждёт.
  • Предохранитель (circuit breaker). Сосед не отвечает — перестаём его дёргать на минуту и сразу отдаём запасной ответ. Как автомат в электрощитке.
  • Изоляция поломки. Упал поиск — каталог работает. Упал чат — заказы идут.
  • Деградация (graceful degradation). Под перегрузкой система жертвует второстепенным — рекомендациями, счётчиками, — чтобы сохранить главное: оформление заказа.
У тебя

Лимиты и лестница деградации с рубильниками есть. У приложения и чата пределы времени есть; у фонового работника на запросы к базе — нет. Главный нарушитель изоляции — общий экземпляр быстрой памяти: через него идут и очереди, и лимиты, и чат, и кэш. Его отказ задевает сразу несколько частей системы. По документам

14Выпуск изменений

Чаще всего систему ломает не нагрузка, а собственное обновление. Поэтому у выпуска своя механика.

  • Стенд и бой (staging и production). Стенд — копия системы для проверок. Бой — то, чем пользуются люди. Они должны быть раздельными: иначе эксперимент ломает живое.
  • Автосборка (CI). Робот, который на каждое изменение сам запускает проверки: типы, тесты, защитные правила. Её ценность в том, что это проверка, которая не зависит ни от чьего мнения.
  • Маленькие шаги и откат (rollback). Чем меньше изменение, тем проще понять, что сломало, и вернуть как было. Способ отката придумывают до выкатки.
  • Постепенная выкатка (canary). Новая версия сначала достаётся 1–5 % людей. Если ошибок не прибавилось — всем.
  • Рубильник (feature flag). Код выложен, функция выключена. Включают настройкой, без новой выкатки — и так же выключают.
  • Проверка на живом устройстве. Тест проверяет то, что придумал автор теста. Телефон в руках проверяет то, что есть на самом деле.
У тебя

Автосборка красная: последняя зелёная — 21.09.2026. Проверки не запускаются вообще. Причина не в коде: не прошла оплата сервиса сборки или исчерпан лимит расходов. Почти два месяца изменения проверялись только вручную на ноутбуках исполнителей. Измерено 14.11

Стенд и бой — одна система. Рубильники есть. По документам

15Приборы: как видеть систему

Систему, которую не видно, нельзя ни чинить, ни растить. Сигналов три вида:

  • Метрики (metrics) — цифры во времени: запросов в секунду, доля ошибок, загрузка процессора. Отвечают на вопрос «что происходит».
  • Журналы (logs) — запись каждого события. Отвечают на вопрос «что именно случилось с этим запросом».
  • Трассировка (tracing) — путь одного запроса по всем слоям с временем на каждом. Отвечает на вопрос «где тормозит».

Задержку смотрят не по среднему, а по «хвосту»: p95 — время, в которое укладываются 95 запросов из 100. Среднее 0,4 секунды может скрывать, что каждый двадцатый человек ждёт пять секунд.

У больших

Четыре главных сигнала (так учит Google): задержка, поток запросов, ошибки, насыщение — насколько близко к потолку.

Целевой уровень (SLO) — обещание цифрой: «99,9 % оформлений заказа проходят успешно». 99,9 % за месяц — это 43 минуты допустимого простоя. Эти минуты называют бюджетом ошибок: пока он не истрачен, можно быстро выпускать новое; истрачен — занимаемся только надёжностью.

Оповещение (alert) шлют только на то, что требует действия человека. Тревога, на которую не надо реагировать, учит не реагировать.

У тебя

Приборы есть: страница «Рост» в админке (показы, клики, просмотры, заявки по дням), «пульс» приложения и проба из России на странице монитора, журнал копий. До 14.11 их никто не сводил вместе. Измерено 14.11

Графиков здоровья системы, целевых уровней и дежурства нет. По документам

Часть IV · Деньги, защита, страны

16Деньги

Денежная часть устроена не как остальной код. Её цель — чтобы ошибку было невозможно сделать и невозможно скрыть.

  1. Суммы — целым числом копеек. Дробные числа компьютер хранит приближённо: у него 0,1 + 0,2 не равно 0,3. На миллионе операций копейки расползаются.
  2. Двойная запись (double-entry ledger). Каждая операция — две строки: откуда ушло и куда пришло. Сумма всех строк всегда ноль. Баланс не хранится числом, которое правят, — он считается из журнала.
  3. Журнал только на дозапись. Ошибку исправляют новой, обратной строкой. Стереть или поправить старую нельзя. Так устроены банки.
  4. Ключ идемпотентности (idempotency key). Связь плохая, человек нажал «оплатить» дважды. У обоих запросов один и тот же номер операции — сервер видит повтор и не списывает второй раз.
  5. Сверка (reconciliation). Каждый день сравнивать свой журнал с выпиской банка или платёжной службы. Сверка существует ровно для одного: поймать разницу между «мы думаем» и «на счёте есть». Сверка своих записей со своими же ничего не ловит.
  6. Цепочка с компенсацией (saga). Заказ — это резерв товара, списание денег, уведомление. Они живут в разных системах, одной транзакцией их не обернуть. Поэтому у каждого шага есть обратный: не прошло списание — снять резерв.
  7. Удержание (escrow). Деньги покупателя не уходят продавцу сразу, а лежат до подтверждения получения.
  8. Чарджбэк (chargeback). Банк покупателя может вернуть платёж по жалобе клиента — через недели после сделки. Это должен быть описанный процесс, а не сюрприз.
Запомни

Главный вопрос в деньгах — не технический: кто по закону принимает деньги и что умеет платёжная служба — делить платёж между продавцом и площадкой, выдавать чеки, платить за границу. От ответа зависит, какой учёт вообще нужен.

У тебя

Пункты 1–4 и удержание сделаны всерьёз и до первого платежа. Остатки под блокировкой: в прогоне на ноутбуке 400 попыток купить 60 штук — продано ровно 60. Сверка — пока своих записей со своими; выписка сама не загружается. Продукт в режиме «бета без оплаты», боевой платёжной службы в коде нет. По документам

Моя позиция

До выбора платёжной службы денежную часть не развивать вовсе. Иначе продолжим строить под схему, которой может не быть.

17Защита

Защита — не отдельный этап в конце, а привычка задавать вопрос «а что, если это сделает злоумышленник?» к каждой функции.

  • Модель угроз (threat model) — до кода: кто нападает, чего хочет, каким путём, чем закрыто. Дешевле, чем разбор после взлома.
  • Вход и права — разные вещи. Вход (authentication) — «кто ты». Права (authorization) — «что тебе можно». Самая частая дыра в любых сервисах: человек вошёл честно, а потом открыл чужой заказ, подставив чужой номер.
  • Минимальные права (least privilege). Каждый человек и каждая программа получают ровно столько доступа, сколько нужно для работы.
  • Не доверяй входу. Всё, что пришло снаружи — форма, файл, ответ партнёра, уведомление от платёжной службы (webhook), — проверяется, как будто его прислал враг.
  • Секреты — ключи и пароли — не лежат в коде и не попадают в журналы.
  • Личные данные (PII): собирать меньше, хранить зашифрованно, в журналы не писать.
  • «Четыре глаза» на деньги: один создаёт выплату, другой подтверждает.
  • Лимиты на всё, что стоит денег: СМС, попытки входа, тяжёлые запросы.
  • Второй фактор (2FA) для сотрудников и админки.
  • Цепочка поставки (supply chain). В продукте сотни чужих библиотек; уязвимость в любой — твоя уязвимость. Их проверяют автоматически при сборке.
  • Мошенничество — это не взлом. Накрутки, фальшивые заказы, сговор покупателя с продавцом идут через честные двери. Против них работают правила и наблюдение, а не замки.
У тебя

Есть: модель угроз до кода, «четыре глаза» на деньги (на запуске — с временным исключением), защита от накрутки СМС. Несколько пунктов из списка выше в коде не найдены. Точный перечень — в карте школы, раздел 4.5: на открытую страницу я его намеренно не вынес. По документам

18Страны

Правило одно: страна должна быть настройкой, а не кодом. Настройкой становятся:

Деньги

Валюта, курс, налог, чек, способ оплаты.

Люди

Язык, часовой пояс, формат адреса и телефона.

Право

Документы, где обязаны лежать данные, кто продавец по закону.

У тебя

Сейчас страна — это код. Списки стран — константы в программе. Базовая валюта — рубль, магазин может быть только в рублях или юанях. «Сутки по Москве» зашиты в нескольких местах. Адрес — плоский текст. Товар хранится на одном языке. Документы — один комплект. По документам

Моя позиция

Переписывать сейчас не надо. Надо перестать добавлять новые привязки: каждая функция, написанная «под Россию», увеличивает цену будущего выхода. Где должны лежать данные граждан каждой страны — вопрос юристу, не нейросети, и он стоит уже сегодня.

Часть V · Твой продукт

19Из чего он состоит

Твой маркетплейс — модульный монолит: один код и одна выкатка, а внутри — модули с границами (корзина, заказы, платежи, доставка, промо). Для команды твоего размера это мировой стандарт. По документам

ДетальЧто делаетНа чём
Сайт и мобильное приложениеТо, что видит человексайт собирается на сервере; приложение для iOS и Android
Приложение (API)Принимает запросы, проверяет права, пишет в базуBun, Hono
База данныхТовары, заказы, деньги, людиPostgres
Быстрая памятьОчереди, лимиты, чат, кэш — всё в одном экземпляреRedis
Фоновый работникУведомления, пересчёты, задачи по расписаниюBullMQ
Чат, обработчик видеоОтдельные процессы—
Хранилище файловФото товаров, документы продавцовсовместимое с S3
Входной узел в РоссииЧтобы сервис открывался у российских пользователейотдельный сервер
МониторСтраница состояния, «пульс», проба из Россииотдельный сервер

Приложение, база, очереди и файлы работают на одной машине. По документам

20Что сделано по-взрослому

Это не комплимент, а опора: на этом можно строить, и этого не надо переделывать. По документам

ЧтоПочему это правильно
Модульный монолит, а не микросервисыТак начинал Shopify и живёт до сих пор
Двойная запись, копейки целым числом, журнал только на дозаписьБаланс нельзя «подправить», можно только добавить строку
Ключ идемпотентности на оформлении заказаПовтор из-за плохой связи не создаёт второй заказ
Остатки под блокировкой и запрет отрицательного остатка в самой базеНельзя продать то, чего нет
Таблица исходящих событийУведомление не теряется и не уходит зря
Постраничная выдача по курсоруНе замедляется на глубине и на миллионах строк
Лестница деградации с рубильникамиПод перегрузкой жертвуем рекомендациями, а не заказом
Нагрузочные прогоны с разделом «что не проверялось»Большинство команд своих потолков не знает вообще
Модель угроз до кода, «четыре глаза» на деньги (на запуске — с временным исключением)Угрозы разбираются до инцидента, а не после
Единый интерфейс перевозчикаНового логиста можно добавить, не переписывая заказы

21Чего нет — в порядке «что ударит раньше»

Факты — из кода и документов проекта, порядок — мой. По документам Моя позиция

№ЧтоКогда ударит
1Выживаемость. Одна машина на всё; копии базы не вывозятся за её пределы; нет сценария «сервера больше нет, поднимаемся с нуля» и учения с замером времениВ любой день, при любой нагрузке
2Автоматическая проверка. Автосборка стоит с сентябряУже сейчас: изменения проверяются только вручную
3Деньги. Нет платёжной службы, сверки с выпиской, процесса чарджбэков; не решены комиссия и срок удержанияДо включения оплаты
4Потолок витрины. 20–25 запросов в секунду на копию; сеть доставки не раздаёт страницы и картинки; поиск средствами базы — граница около 100 000 товаров; одна база без читающей копииПри росте трафика
5Страны. Страна зашита в кодПри выходе за пределы России
6Эксплуатация. Нет графиков, целевых уровней, дежурства; знание о системе — в файлах нейросетейПри первой серьёзной аварии

Про поиск отдельно: каталог сейчас около 9 700 товаров, две недели назад было 344. До границы поиска в 100 000 ещё на порядок, но скорость роста каталога — сама по себе цифра, за которой стоит следить. Измерено 14.11

22Панель реальности: снимок 14.11.2026

Шесть цифр, ни одна из которых не мнение нейросети. Это первый снимок; дальше — раз в неделю. Одна цифра из шести пока не снята.

красная

Автосборка. Последняя зелёная — 21.09. Измерено

+12 296 / −2 225

Строк кода за неделю. На одну удалённую — 5,5 добавленных. Измерено

50

Разных адресов с телефонов за 13.11. За неделю не снято. Измерено

11

Заявок за неделю. За всё время — 16, от 12 покупателей. Измерено

—

Доступность из России. Прибор есть, цифра не снята.

01.11

Последняя проверка восстановления из копии, успешно. Измерено

Что говорят цифры

  • Продукт ожил на этой неделе. Показы товаров: 08.11 — 44 в день, 11.11 — 335, 12.11 — 2 157, 13.11 — 8 396. За неделю: 11 189 показов → 244 клика → 333 просмотра карточки → 11 заявок. Учётных записей 75, из них 37 появились за семь дней. Что именно произошло 12–13.11, из цифр не видно.
  • Масштаб — десятки людей. До «десятков тысяч одновременно» три порядка. Диск сервера занят на 39 %, копия базы весит 24 МБ. Нагрузка сейчас не ограничивает ничего.
  • На одну удалённую строку кода — пять с половиной новых. Плюс за ту же неделю 13,5 тысячи строк тестов и 12,3 тысячи строк документов.
Оговорки — чего эти цифры не значат

Адреса — не люди: один человек с телефона и из дома — два адреса, а запросы через российский входной узел могут сливаться в один. В 75 записях и 16 заявках есть команда и тесты; сколько — не измерено. День 13.11 в таблице ещё не закрыт, его цифры могут подрасти. Неделя — одна точка, по одной точке тренд не строят.

Урок этого снимка

Одно чтение приборов подтвердило на живой системе то, что до этого было строкой в документах и принятым долгом: копии базы лежат рядом с базой. А рост каталога в 28 раз и первые живые заявки сделали этот долг опасным. Пока не посмотришь на прибор, долг остаётся строкой, которую никто не перечитывает.

23Главное противоречие и порядок шагов

Код опережает бизнес. Написаны банковский учёт, удержание, возвраты, споры — и не принят ни один настоящий платёж. Типовой провал здесь называется «строю собор до первой службы». Риск не в том, что система не выдержит 300 000 заказов. Риск в том, что первые 300 покажут: деньги ходят иначе, логист отвечает иначе, покупатель хочет иначе — и часть собора придётся перекладывать.

Моя позиция

Сейчас правильная архитектурная работа — не масштабирование, а три вещи по порядку: (1) данные нельзя потерять; (2) первый настоящий рубль проходит весь путь от покупателя до продавца и сходится с выпиской банка; (3) новые функции перестают прибивать систему к одной стране.

Что меня переубедит: цифры живого трафика, близкие к потолку — сотни одновременных покупателей каждый день, — или договор с датой, требующий нагрузки, которой стенд не держит. Снимок 14.11 показал начало движения, но не это.

Лестница роста: что делать на какой цифре

СтупеньТриггерЧто добавляется
0. Бета — сейчас—Копии вне машины, восстановление на момент времени, учение по восстановлению, сеть доставки перед витриной, автосборка, панель цифр
1. Первые деньгивключение оплатыБаза на отдельной машине с горячей копией, сверка с выпиской, второй фактор сотрудникам, первые правила против мошенничества, целевые уровни и оповещения, дежурный
2. Десятки тысяч заказов в месяцкопии загружены выше 60 %; поиск медленнее 300 мс; больше 100 000 товаровЧитающие копии базы, посредник соединений, поисковый движок, быстрая память по ролям, отчёты в отдельном хранилище, вторая платёжная служба и второй логист, страна как настройка
3. Сотни тысяч заказов, несколько странвторая страна со своими требованиями к данным; команда больше 15–20 разработчиковЯчейки по странам, шина событий, выделение горячих частей в службы, круглосуточное дежурство

Ближайшие шаги

  1. Вывоз копий за пределы сервера. К росту отношения не имеет, но стоит первым: без него всё остальное строится на песке.
  2. Вернуть автосборку. Это счёт, а не разработка.
  3. Сеть доставки перед витриной и картинками. Код к этому готов. Сначала проверить, как выбранная сеть работает для покупателей в России.
  4. База на отдельной машине с горячей копией. И рост, и страховка. Срок — до включения оплаты.
  5. Профиль одного запроса: куда уходит процессор. Триггер не нужен — это дёшево.
  6. Дальше — только по триггерам из таблицы выше.

Чего делать не надо: дробить монолит на службы, ставить тяжёлую систему управления контейнерами ради пяти машин, делить базу.

Часть VI · Стройка с нейросетями

24Как устроена твоя фабрика

Весь код пишут нейросети. Чтобы это работало, ты построил конвейер: у каждой задачи одна и та же дорога.

Ты — говоришь, что нужно, обычными словами.
Директор — переводит в постановку: цель, границы, признак готовности, уровень риска.
Проверка постановки — отдельная нейросеть с чистым листом ищет дыры до кода.
Разработчик — план, сначала тест, потом код.
Независимая проверка кода — ещё одна нейросеть, которая не знает, что думал автор.
Проверка «сломай» — на деньгах, входе и личных данных: задача не проверить, а взломать.
Приёмка — полный прогон тестов на финальной версии, слияние, выкатка.

Пять принципов, на которых это держится:

  • Три уровня риска. Правка текста не проходит тот же путь, что возврат денег. Уровень назначается до начала.
  • Чистый контекст у проверяющего. Он не видит рассуждений автора и не заражается ими. Нейросеть, которой показали вывод, склонна его подтвердить.
  • Сначала тест, потом код. Тест — это записанное требование, которое можно запустить.
  • Память — в файлах. У нейросети нет памяти между разговорами. Всё, что должно пережить сессию, записывается.
  • Один хозяин у задачи. Две нейросети не правят одно и то же одновременно.

25Что в ней работает и что нет

Вердикт

Система хорошо делает правильный код и почти не видит реальность. Она построена ловить ошибки в тексте — в постановке, коде, плане. А то, что реально ударило по продукту, лежало вне текста: приложение не открывалось в России, остановилась автосборка, копии лежат рядом с базой.

Вторая половина: у системы нет тормоза. Она производит код, тесты и правила быстрее, чем кто-либо способен их прочитать.

ЧтоЦифраВывод
Проверка постановки до кодасерьёзные замечания в 18 прогонах из 20, около 3,5 на постановкуРаботает. Самая окупаемая стадия
Проверка «сломай» на деньгахсерьёзные замечания в 3 прогонах из 5Работает
Повторные проверки после правок5 из 5 — ничегоСокращены 19.10 по этим цифрам. Сработало ли — ещё не проверено
Инженер приёмки17 из 17 — ничегоС 19.10 поднимается только при серьёзных замечаниях. Эффект ещё не проверен
Производство кодаоколо 1 350 изменений в месяц; 206 тысяч строк кода и 161 тысяча строк тестовУзкое место продукта — не код
Журнал решений5 164 пункта, 23 тысячи строкПрочитать нельзя никому
Обязательное чтение перед работой4,2 МБФизически невыполнимо, выполняется выборочно и молча

Цифры собраны 14.11.2026 по истории кода и файлам офиса.

Пять причин, по порядку тяжести

  1. Нет обратной связи от реальности. Почти все источники правды в контуре — мнение нейросети. Она описывает ожидаемое поведение продукта, а не фактическое, и отличить одно от другого нечем.
  2. Фабрика работает не на узкое место. Запуск денег держат договор с платёжной службой, ответ юриста и модель оплаты доставки. Ни одно из трёх — не код. Когда узкое место снаружи, а производство идёт внутри, растёт не продукт, а цена его содержания.
  3. Добавлять умеют все, убирать — никто. Каждый проверяющий получает вопрос «чего не хватает?». Нейросеть на него всегда находит ответ. Вопрос «что лишнее?» долго не задавал никто.
  4. Память переросла голову. Файлы памяти выросли до мегабайт. Читать их целиком невозможно — значит, читают кусками и не говорят об этом.
  5. Правила только копятся. После каждого сбоя появляется правило. Ни срока, ни цифры для отмены у правил нет.

26Свойства нейросети, которые надо знать

Это не лечится формулировкой запроса. Это свойства инструмента — их обходят устройством работы.

СвойствоКак проявляетсяЧем обходить
Памяти нет, кроме файловКаждый разговор начинается с нуля; файлы пухнутЖёсткий потолок на обязательное чтение; старое — в архив
Склонность добавлятьПлан на тысячу строк при просьбе «просто»Вопрос «что убрать» в каждой проверке; лимит объёма в постановке
Уверенный тон«Готово» звучит одинаково, проверено или нет«Сделано» принимается только с доказательством: вывод команды, номер сборки, снимок с телефона
Угодливость (sycophancy)Попросил «пуленепробиваемо» — получил ещё слой брони, а не вопрос «а надо ли»Спрашивать прямо: «что бы ты здесь не делал?», «где я ошибаюсь?»
Не видит мирСеть в России, магазин приложений, диск, неоплаченный счёт — вне поля зренияПриборы и живой телефон
Выдумывает (hallucination)Пересказ чужого отчёта вместо первоисточника: в первой версии этого курса так появилось пять ошибокТребовать файл и строку; факт без источника — не факт
Одна модель проверяет себяСовпадение мнений — не подтверждение: слепые зоны общиеДругой вопрос и чистый контекст; на деньгах — проверка, которая не нейросеть
Главное ограничение — не в модели, а в схеме

Ты единственный человек в контуре, и читать код ты не можешь. Поэтому контроль ты строил единственным доступным способом — добавлял ещё одну нейросеть, которая читает текст. Это ловушка: контроля становится больше, а знания о реальности — нет. Выход — приборы, которые ты читаешь сам, без посредника.

27Как ставить задачу

Сначала честно: твои запросы — не первая причина проблем. Размытую диктовку система исправляет сама. Но три привычки стоят дорого.

  • «Без ограничений», «сколько нужно». Для модели это команда «максимум объёма». Нет точки остановки — будет больше помощников, файлов и страниц.
  • Нет слов «не делать» и «готово». Пустоту нейросеть заполняет сама, и всегда в сторону «больше».
  • Противоречивые сигналы. «Быстрее», «меньше кода» и «максимально надёжно» в одной задаче модель примиряет единственным способом — добавляет процесс.

Диктовать можно так же свободно. Но в конце — пять строк:

Результат:     что я хочу держать в руках.
Зачем:         какое решение я приму на основе этого.
Готово, когда: признак, по которому остановиться.
Не делать:     что вне задачи.
Бюджет:        объём ответа, время, сколько помощников.

Что у тебя сильное — сохрани. Ты разрешаешь спорить и требуешь честности. Записываешь решения с датой. Меняешь процесс в день сбоя. Так работают немногие.

28Десять вопросов и семь правил

Вопросы, которые профессионал задаёт к любой задаче

Их можно задавать нейросети дословно. Ответ «не знаю» или «не измерено» — нормальный ответ, с ним можно работать. Плохой ответ — уверенный и без цифры.

  1. Какую цифру пользователя или денег это двигает?Нет цифры — задача ждёт. Это и есть тормоз.
  2. Что здесь сломается первым и при какой цифре?Потолок должен быть назван числом.
  3. Что увидит человек, если эта часть упадёт?Изоляция и деградация.
  4. Что будет, если запрос придёт дважды?Идемпотентность.
  5. Где здесь состояние и кто его хозяин?Одна правда — в одном месте.
  6. Что здесь растёт без потолка?Таблицы, журналы, очереди, файлы.
  7. Каким прибором я увижу, что это работает в бою?Не «тесты зелёные», а цифра с живой системы.
  8. Как это откатить?Придумывается до выкатки.
  9. Что здесь можно не делать?Лучшая деталь — отсутствующая.
  10. Что привязывает нас к одной стране или одному поставщику?Цена будущего выхода.

Семь правил стройки с нейросетями

  1. Панель реальности раз в неделю. Шесть цифр на одной странице, ни одна — не мнение нейросети.
  2. Автосборка всегда зелёная. Красная автосборка — авария, а не фон.
  3. Живой телефон перед каждым выпуском. Два устройства, одно — в России.
  4. К каждой задаче — строка «какую цифру двигает».
  5. Потолок на обязательное чтение. Закрытое — в архив. Нейросеть должна успевать прочитать свои правила целиком.
  6. Правило — только с цифрой и сроком. Одно новое правило — одно старое на выход.
  7. Одна проверка без нейросети в каждой задаче: запуск, замер, телефон или запись из боевого журнала.

Чего не трогать: денежное ядро; проверку постановки до кода; проверку «сломай» на деньгах, входе и личных данных. У них единственных доказанная отдача.

Справочник

29Словарь

Русское слово, английский термин, объяснение в одну строку. Начни печатать — список сузится.

30Что читать дальше

  • Мартин Клеппман, «Высоконагруженные приложения» (Designing Data-Intensive Applications). Главная книга о данных: базы, копии, очереди, согласованность. Читать медленно, первую часть — обязательно.
  • Google, «Site Reliability Engineering». Откуда взялись целевые уровни, бюджет ошибок и дежурство. Есть в открытом доступе.
  • Майкл Нейгард, «Release It!». Истории аварий и приёмы против них: пределы времени, предохранители, изоляция.
  • Мартин Эбботт, Майкл Фишер, «The Art of Scalability». Откуда куб масштабирования.

Не читай всё подряд. Бери главу под вопрос, который стоит на этой неделе.

Собрано 14.11.2026 из четырёх документов школы: карта и диагноз, урок о масштабировании, разбор системы разработки, панель реальности. Факты о продукте — из кода и документов проекта; пять из шести цифр панели сняты 14.11.2026 только чтением — с сервера, из сервиса сборки и из истории кода.

Страница закрыта от поисковиков. Адреса серверов, имена, доступы и точный перечень слабых мест защиты в неё намеренно не включены.