Проблема — атомарность двух разных систем (БД и брокер). Распределённую двухфазную фиксацию между PostgreSQL и Kafka на практике почти не используют.
Паттерн «исходящая таблица»:
▫️ Одна транзакция: запись заказа + запись события в служебную таблицу — либо оба шага, либо ни одного
▫️ Фоновый процесс (опрос таблицы или снимок изменений) читает неотправленные строки и публикует в Kafka с гарантией «как минимум один раз»
▫️ Подписчик обязан обрабатывать повторы идемпотентно — по идентификатору события или заказа
Почему не 2
Двойная запись без общей транзакции — классическая потеря события: в БД заказ есть, в брокер сообщение не ушло. Ручной повтор не масштабируется и не попадает в автотесты.
Почему не 3
Брокер как единственный источник правды для заказа ломает модель: «показать заказ пользователю» потребует отдельного хранилища или чтения из топика. Сложнее, чем нормальная операционная БД.
Почему не 4
Снимок изменений строк таблицы не заменяет публикацию конкретного бизнес-события с нужным составом полей. Он отдаёт факт изменения строки, а не доменное сообщение. Связка «исходящая таблица + снимок по ней» — да; «вместо исходящей таблицы» — нет.
💡 На собесе: исходящая таблица — ответ на «как гарантировать отправку события, если заказ уже сохранён».
Платёжный шлюз шлёт вебхук «оплата прошла» с ключом идемпотентности в заголовке. Иногда доставляет один и тот же вебхук дважды с разницей 30 сек. Как обработчик должен вести себя по ТЗ?
Anonymous Quiz
3%
Игнорировать второй вебхук без ответа — сеть сама разберётся
3%
Всегда переводить заказ в «оплачен» — побеждает последний вебхук
6%
Ответ 409 при повторе — пусть шлюз повторяет запрос до успеха
88%
По ключу: если уже обработан — ответ 200 и тот же ответ, статус заказа не менять
📖 Пояснение:
Вебхуки от внешних систем доставляются по принципу «как минимум один раз». Повтор с тем же ключом идемпотентности — не ошибка, а норма.
Правильный обработчик:
▫️ Хранит таблицу обработанных ключей (или ключ в статусе заказа)
▫️ Первый раз: бизнес-логика «оплачен», сохранить тело ответа
▫️ Повтор: ответ 200 с тем же телом — провайдер перестаёт слать повторы
▫️ Без побочных эффектов: не слать второе письмо, не дублировать проводку
Почему не 1
Молчание без ответа → провайдер считает доставку неудачной → шторм повторов, нагрузка и гонки при параллельных воркерах.
Почему не 2
«Последний побеждает» без ключа — при доставке не по порядку можно откатить «оплачен» в «ожидает оплаты». С ключом порядок для дубликата не важен.
Почему не 3
409 на легитимный повтор заставляет шлюз бесконечно повторять запрос. Контракт вебхука: успех = код 2xx, в том числе для идемпотентного повтора.
💡 В ТЗ на входящий вебхук всегда: идемпотентность, таймаут ответа, порядок доставки не гарантирован.
Старый монолит на Java: модуль «Отчёты» грузит процессор, релизы раз в месяц. Нужно вынести отчёты в новый сервис без единовременного переезда. Какой первый шаг в дорожной карте?
Anonymous Quiz
3%
Единовременный переезд: остановить монолит, перенести БД отчётов, включить новый сервис за выходные
90%
Постепенная замена: шлюз направляет запросы к отчётам в новый сервис, остальное — в монолит
4%
Скопировать код отчётов в новый репозиторий, оба варианта в проде без маршрутизации
3%
Сначала Kafka между модулями внутри монолита, вынос через год
📖 Пояснение:
Постепенная замена — трафик на старую систему сужается по маршрутам и функциям, пока монолит не останется без нагрузки по этому домену.
Шаги:
▫️ Шлюз или обратный прокси: маршрутизация по пути запроса
▫️ Новый сервис сначала читает данные через интерфейс монолита или реплику, потом — своя БД
▫️ Откат — переключить маршрут обратно за минуты
Почему не 1
Единовременный переезд на проде с общей БД отчётов — высокий риск простоя. Нет поэтапного переключения и плана отката.
Почему не 3
Два кода без единой точки входа — двойная поддержка и путаница у пользователей. Без постепенной замены нет контроля миграции.
Почему не 4
Брокер внутри монолита не выносит нагрузку отчётов с процессора. Усложнение без решения узкого места.
💡 На проекте аналитик описывает критерии переключения: доля трафика, метрики ошибок, условие отката.
Публичный REST-интерфейс v1: поле «сумма» в рублях (целое). В v2 нужны копейки. 200+ внешних интеграторов, часть к v2 не готова ещё 6 месяцев. Стратегия по ТЗ?
Anonymous Quiz
54%
Версии в URL параллельно; v1 заморожен; снятие v1 с датой в журнале изменений
0%
Ломающее изменение в v1: всех заставить перейти за 2 недели
16%
Только заголовок Accept с типом v2, без /v2 в пути
29%
Добавить поле «сумма_коп» в v1 без версии — оба поля навсегда
❤2👌2
📖 Пояснение:
При ломающем изменении и долгом хвосте клиентов нужны параллельные версии и явная политика:
▫️ v1 — только исправления ошибок, контракт не меняется
▫️ v2 — новая семантика поля «сумма»
▫️ Журнал изменений + дата снятия старой версии + период поддержки (6+ мес для B2B)
▫️ Метрики: сколько клиентов ещё на v1
Почему не 2
2 недели для 200 интеграторов — нереалистично, ломает контракты и соглашения об уровне сервиса. Нужен период совместной работы версий.
Почему не 3
Версия в заголовке работает, но для внешних партнёров версия в URL нагляднее в документации и мониторинге.
Почему не 4
Два поля с разной семантикой в одной версии — техдолг: клиенты не знают, какое поле «правда». Вечная двусмысленность хуже явного v2.
💡 В ТЗ на интерфейс: политика версий, ломающие и безопасные изменения, сроки снятия старых версий.
👍6🔥2
Пошла спросить ИИ про C4. Он отправил меня к нам же 😂
Сейчас мы активно обновляем курсы по архитектуре систем и вот я пошла к ИИ быстро свериться по C4 — а он в ответе взял и сослался на сайт нашей школы🤩
Получилось забавно: спрашиваю у ИИ про архитектуру, а он такой: "Вот, почитайте у вас же"
С одной стороны, смешно. С другой — приятно. Значит, материалы, которые мы собираем и структурируем, уже живут не только на сайте, но и попадают в источники, на которые опираются ИИ-ответы🔥
Кстати, уже можно посмотреть обновлённые программы и даты стартов:
— «Архитектура систем. База» — старт 6 июля
— «Архитектура систем. Хард» — старт 27 июля
А есть среди подписчиков те, кто пришел к нам "через поиск"?
Сейчас мы активно обновляем курсы по архитектуре систем и вот я пошла к ИИ быстро свериться по C4 — а он в ответе взял и сослался на сайт нашей школы
Получилось забавно: спрашиваю у ИИ про архитектуру, а он такой: "Вот, почитайте у вас же"
С одной стороны, смешно. С другой — приятно. Значит, материалы, которые мы собираем и структурируем, уже живут не только на сайте, но и попадают в источники, на которые опираются ИИ-ответы
Кстати, уже можно посмотреть обновлённые программы и даты стартов:
— «Архитектура систем. База» — старт 6 июля
— «Архитектура систем. Хард» — старт 27 июля
А есть среди подписчиков те, кто пришел к нам "через поиск"?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍2❤1
Нужна ваша помощь. С командой зашел небольшой спор над "актуальной темой" для вебинара по архитектуре!
Разрулите нас, и за одно выберем как раз ту, которая вам наиболее интересна 🙌
Опрос сделаем ниже👇
Разрулите нас, и за одно выберем как раз ту, которая вам наиболее интересна 🙌
Опрос сделаем ниже
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Могучая кучка, 2026 г 😁
Именно так мы себя называем, потому что впятером организовали аналитический клуб для системных аналитиков
Очень горжусь, что являюсь организатором этого клуба🤩
Проводим офлайн митапы в Москве. Если вы еще не видели, то ссылка клуба тут:
@analystclubru
Так что, кто в Москве - будем рады:)
Именно так мы себя называем, потому что впятером организовали аналитический клуб для системных аналитиков
Очень горжусь, что являюсь организатором этого клуба
Каждый из нас - активен в медийке системного анализа, с большим багажем знаний, опыта и достижений. Кто-то силен в сложных интеграциях, архитектуре высоконагруженных систем, миграции данных или даже банально легко умеет докапаться до сути. Мы как пазлы смогли усилить друг друга - кто-то проводит воркшоп, а кто-то пишет анонс или предлагает новые идеи
Проводим офлайн митапы в Москве. Если вы еще не видели, то ссылка клуба тут:
@analystclubru
Так что, кто в Москве - будем рады:)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤3
Озон Доставка меня разочаровала 🫠
Спойлер: удобно не получилось
На ПВЗ сотрудник устроил очередь минут на 20, я потом ещё записывала друзьям гневные голосовые, потому что всё происходило максимально странно. Но ладно, думаю, главное — отправила
Спустя пару дней получила сообщение, что приехал не тот подарок 🤬
Начинаем разбираться — и выясняется, что на ПВЗ перепутали отправления. То есть часть подарков уехала не тем людям. Кому-то вместо своего мерча приехал чужой, кто-то вообще получил не то, что должен был. ПЕРВЫЙ РАЗ С ТАКИМ СТОЛКНУЛАСЬ! Даже на Почте такого у меня не было)) Хотя я отправляю много посылок и из других стран!
Я понимаю, что ошибки бывают. Но в этой ситуации неприятно не только то, что сотрудник накосячил, а то, как это потом решается. По сути, ответ сводится к "проведём инструктаж". Инструктаж — это прекрасно, но посылки сами обратно не поменяются, а доставку и переотправку теперь снова нужно оплачивать нам 🥲
🪿 У вас были похожие истории с ПВЗ или доставками?
В конце мая — начале июня мы проводили активности и разыгрывали мерч: футболки, настольные игры и всякие приятные штуки для участников
Победителей получилось около 10 человек. Я всё собрала, подписала открытки, разложила по пакетам и пошла отправлять через ПВЗ, потому что мне сказали: "Оля, сейчас так все делают, это удобно и дешевле, чем Почтой"
Спойлер:
На ПВЗ сотрудник устроил очередь минут на 20, я потом ещё записывала друзьям гневные голосовые, потому что всё происходило максимально странно. Но ладно, думаю, главное — отправила
Спустя пару дней получила сообщение, что приехал не тот подарок 🤬
Начинаем разбираться — и выясняется, что на ПВЗ перепутали отправления. То есть часть подарков уехала не тем людям. Кому-то вместо своего мерча приехал чужой, кто-то вообще получил не то, что должен был. ПЕРВЫЙ РАЗ С ТАКИМ СТОЛКНУЛАСЬ! Даже на Почте такого у меня не было)) Хотя я отправляю много посылок и из других стран!
Я понимаю, что ошибки бывают. Но в этой ситуации неприятно не только то, что сотрудник накосячил, а то, как это потом решается. По сути, ответ сводится к "проведём инструктаж". Инструктаж — это прекрасно, но посылки сами обратно не поменяются, а доставку и переотправку теперь снова нужно оплачивать нам 🥲
Сейчас всё разруливаем, чтобы каждый получил именно свой мерч. Потому что нам правда важно, чтобы подарок был не просто "для галочки", а чтобы человеку было приятно его получить
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5🔥1
📌 НФТ в архитектуре: измеримые требования
«Система должна быть быстрой» — не НФТ. Без цифр и сценариев архитектурные решения не защитить ни перед техлидом, ни перед бизнесом.
👉 Что такое НФТ для аналитика:
Не список технологий, а критерии успеха системы в цифрах и сценариях.
Минимальный набор для архитектурного ТЗ:
▫️ Нагрузка — запросов в секунду, заказов в час, одновременных пользователей, рост на год
▫️ Задержка ответа — 95-й и 99-й перцентиль (не «среднее»)
▫️ Доступность — 99,9% ≈ 8,7 ч простоя в год; что допустимо
▫️ Время восстановления / допустимая потеря данных — сколько можно быть недоступными и что потерять
▫️ Безопасность — платёжные данные, персональные данные, аудит
👉 Как переводить бизнес-фразы в НФТ:
Схема: Бизнес говорит → Аналитик фиксирует
«Быстро» → 95-й перцентиль < 300 мс на оформлении при 500 запр/с
«Не должно падать» → 99,95% доступности, плавное снижение функций при отказе каталога
«Чёрная пятница» → Пик в 10 раз от среднего, 2 ч, автомасштабирование за 5 мин
👉 Зачем это влияет на архитектуру:
▫️ 99-й перцентиль 300 мс при 5 синхронных вызовах → нужна прослойка для фронта или параллельные запросы
▫️ Нулевая потеря заказов → синхронная репликация или исходящая таблица со строгим порядком
▫️ Пик в 10 раз → горизонтальное масштабирование слоя без состояния + кэш, не «больше процессора на монолите»
💡 На собеседовании: после условия задачи спроси «какие НФТ?» — это отделяет тех, кто рисует схемы, от тех, кто проектирует систему.
«Система должна быть быстрой» — не НФТ. Без цифр и сценариев архитектурные решения не защитить ни перед техлидом, ни перед бизнесом.
👉 Что такое НФТ для аналитика:
Не список технологий, а критерии успеха системы в цифрах и сценариях.
Минимальный набор для архитектурного ТЗ:
▫️ Нагрузка — запросов в секунду, заказов в час, одновременных пользователей, рост на год
▫️ Задержка ответа — 95-й и 99-й перцентиль (не «среднее»)
▫️ Доступность — 99,9% ≈ 8,7 ч простоя в год; что допустимо
▫️ Время восстановления / допустимая потеря данных — сколько можно быть недоступными и что потерять
▫️ Безопасность — платёжные данные, персональные данные, аудит
👉 Как переводить бизнес-фразы в НФТ:
Схема: Бизнес говорит → Аналитик фиксирует
«Быстро» → 95-й перцентиль < 300 мс на оформлении при 500 запр/с
«Не должно падать» → 99,95% доступности, плавное снижение функций при отказе каталога
«Чёрная пятница» → Пик в 10 раз от среднего, 2 ч, автомасштабирование за 5 мин
👉 Зачем это влияет на архитектуру:
▫️ 99-й перцентиль 300 мс при 5 синхронных вызовах → нужна прослойка для фронта или параллельные запросы
▫️ Нулевая потеря заказов → синхронная репликация или исходящая таблица со строгим порядком
▫️ Пик в 10 раз → горизонтальное масштабирование слоя без состояния + кэш, не «больше процессора на монолите»
💡 На собеседовании: после условия задачи спроси «какие НФТ?» — это отделяет тех, кто рисует схемы, от тех, кто проектирует систему.
❤11
Курсы по архитектуре уже на финишной прямой
Сейчас у нас тот самый этап подготовки курса, который обычно не видно снаружи: уроки записываются, потом пересматриваются, потом часть уроков перезаписывается заново, тесты разделяются, домашки проверяются, вопросы докидываются, формулировки докручиваются
Вот это как раз то, что мы применяем в подходе к курсам. Не просто записать урок, выложить и сказать "готово", а довести материал до состояния, когда его действительно удобно смотреть, понимать и применять
Поэтому сейчас мы не просто "обновляем курс", а фактически усиливаем архитектурную линейку: пересобираем материалы, практику, тесты и домашние задания так, чтобы после обучения оставалось не ощущение "я послушал про архитектуру", а понимание, как с этим работать!
Старт уже близко:
— «Архитектура систем. База» — 6 июля
— «Архитектура систем. Хард» — 27 июля
Актуальные программы уже можно посмотреть на сайте
Успевайте приобрести по предпродаже по выгодным условиям!
Сейчас у нас тот самый этап подготовки курса, который обычно не видно снаружи: уроки записываются, потом пересматриваются, потом часть уроков перезаписывается заново, тесты разделяются, домашки проверяются, вопросы докидываются, формулировки докручиваются
“Всё, что записывается второй раз, звучит и выглядит намного лучше” - написал автор курса, Владимир Бурмистров
Вот это как раз то, что мы применяем в подходе к курсам. Не просто записать урок, выложить и сказать "готово", а довести материал до состояния, когда его действительно удобно смотреть, понимать и применять
Поэтому сейчас мы не просто "обновляем курс", а фактически усиливаем архитектурную линейку: пересобираем материалы, практику, тесты и домашние задания так, чтобы после обучения оставалось не ощущение "я послушал про архитектуру", а понимание, как с этим работать!
Старт уже близко:
— «Архитектура систем. База» — 6 июля
— «Архитектура систем. Хард» — 27 июля
Актуальные программы уже можно посмотреть на сайте
Успевайте приобрести по предпродаже по выгодным условиям!
❤8🔥1
📝 Задача | Архитектура · Корзина и оформление заказа
Условие:
Интернет-магазин электроники. Пользователь кладёт товары в корзину, применяет промокод, выбирает доставку и оплачивает.
Вводные:
▫️ Средняя нагрузка 800 rps на каталог, в пик (распродажа) до 4000 rps на оформление
▫️ Каталог и остатки — разные сервисы; остатки обновляются с задержкой до 2 сек из складской системы
▫️ Промокоды проверяются во внешнем сервисе лояльности (95-й перцентиль 150 мс)
▫️ При оплате нельзя продать товар, которого нет на остатке — перепродажа недопустима
▫️ Корзина должна переживать закрытие вкладки (вернуться через день)
Задание:
1. Назови основные компоненты (4–7).
2. Где хранить корзину и почему (БД, брокер, кеш)
3. В какой момент резервировать/списывать остаток — при добавлении в корзину, при оформлении или при оплате? Обоснуй.
4. Что кэшировать и с каким временем жизни?
⏱️ Попробуй решить сам.
Разбор опубликуем 24.06.
Пиши ответ в комментариях 👇
Условие:
Интернет-магазин электроники. Пользователь кладёт товары в корзину, применяет промокод, выбирает доставку и оплачивает.
Вводные:
▫️ Средняя нагрузка 800 rps на каталог, в пик (распродажа) до 4000 rps на оформление
▫️ Каталог и остатки — разные сервисы; остатки обновляются с задержкой до 2 сек из складской системы
▫️ Промокоды проверяются во внешнем сервисе лояльности (95-й перцентиль 150 мс)
▫️ При оплате нельзя продать товар, которого нет на остатке — перепродажа недопустима
▫️ Корзина должна переживать закрытие вкладки (вернуться через день)
Задание:
1. Назови основные компоненты (4–7).
2. Где хранить корзину и почему (БД, брокер, кеш)
3. В какой момент резервировать/списывать остаток — при добавлении в корзину, при оформлении или при оплате? Обоснуй.
4. Что кэшировать и с каким временем жизни?
⏱️ Попробуй решить сам.
Разбор опубликуем 24.06.
Пиши ответ в комментариях 👇
🔥1👌1
Команда 💛👩👩👦
А школа начинается там, где появляются люди, которым тоже не всё равно. Кто проверяет домашки не для галочки, разруливает сложные ситуации, видит косяки, предлагает идеи и может честно сказать: «Оль, тут надо переделать»
За несколько лет мы, конечно, ошибались с людьми. Иногда быстро понимали: не совпали по подходу, ответственности, вниманию к деталям. Но зато когда находишь своих - это прям отдельное счастье
🪿 Вчера был год, как со мной работает моя ассистентка/менеджер. Я отправила ей тортик с кофе, а она написала, что у нас самая лучшая команда. И я такая: ну всё, можно немного всплакнуть и дальше работать 😄
Наверное, один из главных выводов за годы школы: качество делают не только программы курсов. Качество делают люди
И моя команда - одна из главных причин, почему школа вообще стала школой
❤️ - если хочется больше узнавать о нашей команде и кто стоит за "школой"
В какой-то момент я поняла: школа держится не только на курсах, лендингах и моём желании сделать всё хорошо. Без команды это был бы просто мой личный проект, который я тащу на себе
А школа начинается там, где появляются люди, которым тоже не всё равно. Кто проверяет домашки не для галочки, разруливает сложные ситуации, видит косяки, предлагает идеи и может честно сказать: «Оль, тут надо переделать»
За несколько лет мы, конечно, ошибались с людьми. Иногда быстро понимали: не совпали по подходу, ответственности, вниманию к деталям. Но зато когда находишь своих - это прям отдельное счастье
Наверное, один из главных выводов за годы школы: качество делают не только программы курсов. Качество делают люди
И моя команда - одна из главных причин, почему школа вообще стала школой
❤️ - если хочется больше узнавать о нашей команде и кто стоит за "школой"
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥4
Я немного боюсь этого проекта. И очень его хочу
Сейчас обсуждаем корпоративное обучение для одной известной компании. Название пока не раскрываю, но масштаб там такой, что я одновременно радуюсь и думаю:
Запрос у них очень правильный: они не просто хотят «курс для аналитиков». Они увидели, где у команды проседают знания, и пришли с конкретным списком: что аналитики должны знать и уметь
Такой подход мне нравится. Мы сейчас собираем программу под их задачи: выбираем только нужные темы, продумываем воркшопы, Q&A-сессии и практику, чтобы обучение было не для галочки, а реально закрывало пробелы
Я очень хочу, чтобы больше компаний так подходили к развитию аналитиков. Не «ну купим доступ к курсу», а сначала понять, где команда проседает, и под это собрать обучение
Если у вас в компании аналитиков много, а общей базы и единого подхода не хватает — возможно, это знак показать этот пост руководителю 🙂
Оставить заявку на корпоративное обучение
Сейчас обсуждаем корпоративное обучение для одной известной компании. Название пока не раскрываю, но масштаб там такой, что я одновременно радуюсь и думаю:
«Оля, ну ты точно готова?» 😄
Запрос у них очень правильный: они не просто хотят «курс для аналитиков». Они увидели, где у команды проседают знания, и пришли с конкретным списком: что аналитики должны знать и уметь
Такой подход мне нравится. Мы сейчас собираем программу под их задачи: выбираем только нужные темы, продумываем воркшопы, Q&A-сессии и практику, чтобы обучение было не для галочки, а реально закрывало пробелы
Я очень хочу, чтобы больше компаний так подходили к развитию аналитиков. Не «ну купим доступ к курсу», а сначала понять, где команда проседает, и под это собрать обучение
Если у вас в компании аналитиков много, а общей базы и единого подхода не хватает — возможно, это знак показать этот пост руководителю 🙂
Оставить заявку на корпоративное обучение
❤15👍6
✅ Решение | Архитектура · Корзина и оформление
Краткий ответ:
Шлюз → сервис корзины (Redis) + каталог + остатки + лояльность + заказ + оплата. Резерв остатка — при переходе к оплате, списание — после успешной оплаты. Кэш — каталог и цены, не остатки.
📖 Разбор:
1️⃣ Компоненты
▫️ Шлюз / прослойка для фронта — агрегация для веба и мобилки, ограничение частоты на оформлении
▫️ Сервис корзины — корзина пользователя, время жизни 7–14 дней
▫️ Сервис каталога — товары, цены, медиа
▫️ Сервис остатков — складские остатки, резервы, единственный источник правды по артикулу
▫️ Лояльность — внешняя проверка промокодов
▫️ Заказ + оплата — создание заказа, оплата, сага при сбоях
2️⃣ Где хранить корзину
Redis (или аналог) с ключом по идентификатору пользователя:
▫️ Быстрые чтение и запись при высокой нагрузке
▫️ Время жизни для «брошенных» корзин
▫️ Не смешивать с транзакционными заказами в PostgreSQL
Для гостя — ключ по сессии с объединением при входе в аккаунт.
3️⃣ Когда резервировать остаток
Добавление в корзину
+ «Мягкая» бронь
- Тысячи мёртвых резервов, перепродажа при задержке склада
Оформление (перед оплатой)
+ Баланс удобства и точности
- Нужен срок резерва 10–15 мин
После оплаты
+ Просто
- Перепродажа на этапе оплаты — нельзя по НФТ
Оптимально: нажатии «Оформить» — синхронный резерв в сервисе остатков со сроком; при успешной оплате — подтверждение; при таймауте/отмене — снятие резерва. В корзину — только проверка «есть ли хоть что-то» без жёсткой брони.
4️⃣ Кэш
▫️ Каталог, цены, картинки — сеть доставки контента + Redis, время жизни 5–60 мин, сброс по событию
▫️ Остатки — не кэшировать на пути оформления; читать остатки напрямую при резерве
▫️ Промокод — не кэшировать надолго; короткое время жизни или только на шаге применения
❌ Типичные ошибки:
▫️ Резерв при добавлении в корзину на 4000 rps — склад «заморожен» чужими корзинами
▫️ Кэш остатков с задержкой 2 сек + оплата без резерва = перепродажа
▫️ Всё в одной БД монолита без ограничения частоты на оформлении — падение при пике
💡 Связывай решение с НФТ из условия: 4000 rps, задержка 2 сек, запрет перепродажи.
Краткий ответ:
Шлюз → сервис корзины (Redis) + каталог + остатки + лояльность + заказ + оплата. Резерв остатка — при переходе к оплате, списание — после успешной оплаты. Кэш — каталог и цены, не остатки.
📖 Разбор:
1️⃣ Компоненты
▫️ Шлюз / прослойка для фронта — агрегация для веба и мобилки, ограничение частоты на оформлении
▫️ Сервис корзины — корзина пользователя, время жизни 7–14 дней
▫️ Сервис каталога — товары, цены, медиа
▫️ Сервис остатков — складские остатки, резервы, единственный источник правды по артикулу
▫️ Лояльность — внешняя проверка промокодов
▫️ Заказ + оплата — создание заказа, оплата, сага при сбоях
2️⃣ Где хранить корзину
Redis (или аналог) с ключом по идентификатору пользователя:
▫️ Быстрые чтение и запись при высокой нагрузке
▫️ Время жизни для «брошенных» корзин
▫️ Не смешивать с транзакционными заказами в PostgreSQL
Для гостя — ключ по сессии с объединением при входе в аккаунт.
3️⃣ Когда резервировать остаток
Добавление в корзину
+ «Мягкая» бронь
- Тысячи мёртвых резервов, перепродажа при задержке склада
Оформление (перед оплатой)
+ Баланс удобства и точности
- Нужен срок резерва 10–15 мин
После оплаты
+ Просто
- Перепродажа на этапе оплаты — нельзя по НФТ
Оптимально: нажатии «Оформить» — синхронный резерв в сервисе остатков со сроком; при успешной оплате — подтверждение; при таймауте/отмене — снятие резерва. В корзину — только проверка «есть ли хоть что-то» без жёсткой брони.
4️⃣ Кэш
▫️ Каталог, цены, картинки — сеть доставки контента + Redis, время жизни 5–60 мин, сброс по событию
▫️ Остатки — не кэшировать на пути оформления; читать остатки напрямую при резерве
▫️ Промокод — не кэшировать надолго; короткое время жизни или только на шаге применения
❌ Типичные ошибки:
▫️ Резерв при добавлении в корзину на 4000 rps — склад «заморожен» чужими корзинами
▫️ Кэш остатков с задержкой 2 сек + оплата без резерва = перепродажа
▫️ Всё в одной БД монолита без ограничения частоты на оформлении — падение при пике
💡 Связывай решение с НФТ из условия: 4000 rps, задержка 2 сек, запрет перепродажи.
🔥6👍1
📂 Кейс: кэш спас скорость — и чуть не убил согласованность цен
🏢 Контекст:
Онлайн-аптека, 1,5 млн артикулов. Сервис каталога отдаёт карточку товара. После кэша в Redis 95-й перцентиль упал с 420 мс до 40 мс. Бизнес доволен. Через две недели — жалобы: в корзине одна цена, на оплате другая.
😬 Проблема:
Аналитик в ТЗ написал: «Кэшировать ответ карточки товара на 24 часа». Разработчики закэшировали весь ответ, включая поле «цена». Маркетинг обновил цены в БД в 09:00, пользователи до следующего дня видели старую цену в каталоге; при оформлении цена бралась из актуальной таблицы заказа — расхождение.
🔍 Что сделали:
1. Разделили кэшируемые поля: статика (название, фото) — долгое время жизни; цена — короткое (60 сек) или отдельный ключ по артикулу
2. Добавили сброс кэша по событию «цена изменилась» из админки
3. В контракт прослойки для фронта: на шаге оформления пересчёт цены с сервера, интерфейс показывает «цена обновлена» при расхождении
4. В ТЗ явно: «источник правды цены при оплате — сервис ценообразования, не кэш каталога»
✅ Результат:
Жалобы исчезли. 95-й перцентиль каталога — 55 мс (чуть выше, но в рамках НФТ). Аналитик добавил в шаблон ТЗ секцию «политика кэширования по полям».
💡 Выводы:
▫️ Кэш — архитектурное решение с бизнес-последствиями, не только про скорость
▫️ В ТЗ указывай: что кэшируем, срок жизни, сброс, что нельзя кэшировать на критичном пути
▫️ «Согласованность цены» — НФТ, которое ломается тихо
🏢 Контекст:
Онлайн-аптека, 1,5 млн артикулов. Сервис каталога отдаёт карточку товара. После кэша в Redis 95-й перцентиль упал с 420 мс до 40 мс. Бизнес доволен. Через две недели — жалобы: в корзине одна цена, на оплате другая.
😬 Проблема:
Аналитик в ТЗ написал: «Кэшировать ответ карточки товара на 24 часа». Разработчики закэшировали весь ответ, включая поле «цена». Маркетинг обновил цены в БД в 09:00, пользователи до следующего дня видели старую цену в каталоге; при оформлении цена бралась из актуальной таблицы заказа — расхождение.
🔍 Что сделали:
1. Разделили кэшируемые поля: статика (название, фото) — долгое время жизни; цена — короткое (60 сек) или отдельный ключ по артикулу
2. Добавили сброс кэша по событию «цена изменилась» из админки
3. В контракт прослойки для фронта: на шаге оформления пересчёт цены с сервера, интерфейс показывает «цена обновлена» при расхождении
4. В ТЗ явно: «источник правды цены при оплате — сервис ценообразования, не кэш каталога»
✅ Результат:
Жалобы исчезли. 95-й перцентиль каталога — 55 мс (чуть выше, но в рамках НФТ). Аналитик добавил в шаблон ТЗ секцию «политика кэширования по полям».
💡 Выводы:
▫️ Кэш — архитектурное решение с бизнес-последствиями, не только про скорость
▫️ В ТЗ указывай: что кэшируем, срок жизни, сброс, что нельзя кэшировать на критичном пути
▫️ «Согласованность цены» — НФТ, которое ломается тихо
👍8❤4
«Пошаговый гайд по System Design»
30 июня в 19:00 проведем бесплатный вебинар
На вебинаре разберём:
— что такое System Design и из каких этапов он состоит;
— как подойти к проектированию системы пошагово;
— зачем System Design спрашивают на собеседованиях и как пройти эту секцию;
— какие ошибки можно допустить на каждом этапе и завалить решение;
— где и как дальше изучать System Design, чтобы прокачаться системно.
🎁 Бонус за регистрацию:
💡 Вебинар подойдёт системным аналитикам, которые хотят лучше понимать архитектуру, увереннее участвовать в технических обсуждениях и прокачать базу для работы и собеседований
Дата: 30 июня 19:00 (мск)
Формат: онлайн, бесплатно
Участие: по регистрации
Регистрируйтесь по ссылке: https://school.systemanalyst.life/abkhi
30 июня в 19:00 проведем бесплатный вебинар
System Design часто воспринимают как страшную секцию на собеседовании: нужно быстро придумать архитектуру, нарисовать схему, объяснить решения и не посыпаться на вопросах.
Но на самом деле System Design — это не
только про собеседования
Это навык, который помогает системному аналитику:
— понимать, как требования превращаются в архитектуру;
— увереннее общаться с разработчиками, архитекторами и техлидами;
— видеть ограничения, риски и trade-off’ы;
— не теряться в интеграциях, брокерах, очередях, НФТ и микросервисах;
— расти внутри компании, в зарплате и своей ценности на рынке
На вебинаре разберём:
— что такое System Design и из каких этапов он состоит;
— как подойти к проектированию системы пошагово;
— зачем System Design спрашивают на собеседованиях и как пройти эту секцию;
— какие ошибки можно допустить на каждом этапе и завалить решение;
— где и как дальше изучать System Design, чтобы прокачаться системно.
🎁 Бонус за регистрацию:
После регистрации вы получите полезные материалы по System Design:
— подборку статей;
— книги по архитектуре и проектированию систем;
— конференции и митапы;
— подкасты и блоги;
— презентацию с вебинара
Дата: 30 июня 19:00 (мск)
Формат: онлайн, бесплатно
Участие: по регистрации
Регистрируйтесь по ссылке: https://school.systemanalyst.life/abkhi
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9