Мой воркшоп прошел на ура! Рассказывала, как создавать продукт, который будет приносить деньги и нужен пользователям😎
А помимо воркшопа я соорганизатор сообщества аналитического клуба и мы проводили совместный воркшоп, где просили ребят написать ТЗ на снежинки. Было забавно, посмотрите как парень смеется на последних видео)
А помимо воркшопа я соорганизатор сообщества аналитического клуба и мы проводили совместный воркшоп, где просили ребят написать ТЗ на снежинки. Было забавно, посмотрите как парень смеется на последних видео)
❤12👏2
📌 Границы сервисов
Без чётких границ микросервисы быстро превращаются в распределённый монолит. Аналитику важно понимать, как резать систему на части и как связывать их без хаоса.
👉 Зачем думать о границах:
Не "нарисовать 12 блоков", а ответить: какой сервис за что отвечает и какие данные ему принадлежат.
Хорошая граница:
▫️ Совпадает с бизнес-возможностью (заказ, оплата, доставка)
▫️ Имеет свой жизненный цикл данных — другие сервисы не лезут в чужую БД
▫️ Меняется относительно независимо: можно выкатить оплату, не трогая каталог
👉 Как искать границы на практике:
1️⃣ По процессу — шаги бизнес-процесса → кандидаты в сервисы (но не каждый шаг = сервис)
2️⃣ По данным — у кого «источник правды» для сущности? Заказ живёт в Order Service, не в Payment
3️⃣ По нагрузке и НФТ — если расчёт ETA тормозит всё, его можно вынести, не дробя монолит на 20 частей
4️⃣ По команде — Conway's law: структура системы повторяет структуру коммуникации команд
👉 Красные флаги плохого разбиения:
▫️ Два сервиса пишут в одну таблицу
▫️ Синхронная цепочка из 5+ вызовов на каждый клик пользователя
▫️ "Общая" БД с JOIN-ами между доменами — признак того, что граница проведена на схеме, а не в голове
💡 На Middle от аналитика ждут не определение DDD, а умение объяснить: "Мы выделили сервис оплаты, потому что у него отдельный SLA, PCI-ограничения и свой релизный цикл".
Без чётких границ микросервисы быстро превращаются в распределённый монолит. Аналитику важно понимать, как резать систему на части и как связывать их без хаоса.
👉 Зачем думать о границах:
Не "нарисовать 12 блоков", а ответить: какой сервис за что отвечает и какие данные ему принадлежат.
Хорошая граница:
▫️ Совпадает с бизнес-возможностью (заказ, оплата, доставка)
▫️ Имеет свой жизненный цикл данных — другие сервисы не лезут в чужую БД
▫️ Меняется относительно независимо: можно выкатить оплату, не трогая каталог
👉 Как искать границы на практике:
1️⃣ По процессу — шаги бизнес-процесса → кандидаты в сервисы (но не каждый шаг = сервис)
2️⃣ По данным — у кого «источник правды» для сущности? Заказ живёт в Order Service, не в Payment
3️⃣ По нагрузке и НФТ — если расчёт ETA тормозит всё, его можно вынести, не дробя монолит на 20 частей
4️⃣ По команде — Conway's law: структура системы повторяет структуру коммуникации команд
👉 Красные флаги плохого разбиения:
▫️ Два сервиса пишут в одну таблицу
▫️ Синхронная цепочка из 5+ вызовов на каждый клик пользователя
▫️ "Общая" БД с JOIN-ами между доменами — признак того, что граница проведена на схеме, а не в голове
💡 На Middle от аналитика ждут не определение DDD, а умение объяснить: "Мы выделили сервис оплаты, потому что у него отдельный SLA, PCI-ограничения и свой релизный цикл".
❤8
📰 Новости | Роль аналитика в эпоху ИИ, как пересобрать архитектуру
Forrester выпустил отчёт «Rearchitecting Applications For The Age Of AI» — исследование о том, как ИИ меняет логику построения корпоративных систем.
Раньше архитектура строилась вокруг жёстких BPM-схем и предсказуемых цепочек вызовов. ИИ добавляли как очередной микросервис. Forrester пишет: это не работает. ИИ требует пересмотреть сам подход к проектированию: от пошаговых процессов — к границам и целям.
👉 Что нового важно для системного аналитика:
▫️ Адаптивная оркестрация вместо BPM — ИИ-агенты принимают решения в рантайме. Аналитику нужно описывать не "шаг 1 → шаг 2 → шаг 3", а границы, цели и контекст, внутри которых ИИ сам выстроит траекторию.
▫️ Приложения генерируются по описанию — пользователи или агенты создают временные приложения под задачу естественным языком. Фокус смещается с проектирования статичных систем на проектирование многократно используемых бизнес-сервисов.
▫️ Контекст становится архитектурным слоем — ИИ-агентам нужны не просто данные, а их семантическое значение в реальном времени. Появляется слой управления контекстом (стандарты вроде MCP указывают, как он может развиваться).
👉 Что это значит на проекте:
- Уходит слой Experience API — теперь ИИ-агент будет адаптировать бизнес-логику под интерфейс (мобилка/веб/чат) напрямую, обращаясь к Business API.
- Новые требования к API — ИИ плохо работает с низкоуровневыми техническими API. Нужны чёткие бизнес-сервисы, которые инкапсулируют намерение, правила и результат.
- Меняются НФТ — вместо контроля каждого пути проектируем безопасные границы (guardrails), внутри которых ИИ-агент действует автономно.
💡 Для собеседования: если спрашивают «как изменится роль аналитика через 2–3 года», уверенный ответ уровня Senior — смещение фокуса с линейных UX-потоков на проектирование бизнес-возможностей, границ оркестрации и семантического слоя данных.
Источник: Forrester «Rearchitecting Applications For The Age Of AI»
Forrester выпустил отчёт «Rearchitecting Applications For The Age Of AI» — исследование о том, как ИИ меняет логику построения корпоративных систем.
Раньше архитектура строилась вокруг жёстких BPM-схем и предсказуемых цепочек вызовов. ИИ добавляли как очередной микросервис. Forrester пишет: это не работает. ИИ требует пересмотреть сам подход к проектированию: от пошаговых процессов — к границам и целям.
👉 Что нового важно для системного аналитика:
▫️ Адаптивная оркестрация вместо BPM — ИИ-агенты принимают решения в рантайме. Аналитику нужно описывать не "шаг 1 → шаг 2 → шаг 3", а границы, цели и контекст, внутри которых ИИ сам выстроит траекторию.
▫️ Приложения генерируются по описанию — пользователи или агенты создают временные приложения под задачу естественным языком. Фокус смещается с проектирования статичных систем на проектирование многократно используемых бизнес-сервисов.
▫️ Контекст становится архитектурным слоем — ИИ-агентам нужны не просто данные, а их семантическое значение в реальном времени. Появляется слой управления контекстом (стандарты вроде MCP указывают, как он может развиваться).
👉 Что это значит на проекте:
- Уходит слой Experience API — теперь ИИ-агент будет адаптировать бизнес-логику под интерфейс (мобилка/веб/чат) напрямую, обращаясь к Business API.
- Новые требования к API — ИИ плохо работает с низкоуровневыми техническими API. Нужны чёткие бизнес-сервисы, которые инкапсулируют намерение, правила и результат.
- Меняются НФТ — вместо контроля каждого пути проектируем безопасные границы (guardrails), внутри которых ИИ-агент действует автономно.
💡 Для собеседования: если спрашивают «как изменится роль аналитика через 2–3 года», уверенный ответ уровня Senior — смещение фокуса с линейных UX-потоков на проектирование бизнес-возможностей, границ оркестрации и семантического слоя данных.
Источник: Forrester «Rearchitecting Applications For The Age Of AI»
❤8
📂 Кейс: Saga вместо распределённой транзакции — когда "откатить всё" невозможно
🏢 Контекст:
B2B-портал закупок. Заказ проходит: резерв на складе → списание лимита бюджета → создание счёта в ERP → уведомление поставщику. Четыре разных системы, у ERP нет двухфазного commit. Команда 12 человек, монолит режут на сервисы.
😬 Проблема:
После выноса "Склад" и "Бюджет" в отдельные сервисы поймали баг: лимит списали, ERP вернула 500 — заказ завис "в полупути". Ручные откаты в саппорте — 2–3 раза в неделю. Бизнес: "Нужна атомарность как в старом монолите".
🔍 Что сделал аналитик:
1. Нарисовал happy path и точки отказа — где уже нельзя просто DELETE
2. Выбрал оркестрацию Saga (центральный Order Orchestrator), а не хореографию: процесс линейный, мало автономных реакций, нужна видимость статуса для саппорта
3. Описал компенсирующие транзакции:
— Отмена резерва на складе
— Возврат лимита бюджета
— Аннулирование черновика счёта в ERP (отдельный API)
4. Зафиксировал идемпотентность шагов по
5. В ТЗ добавил статусы заказа:
✅ Результат:
За 6 недель — orchestrator на state machine, дашборд "застрявших" саг. Ручных откатов — 0 за два месяца. Бизнес принял, что при падении ERP заказ может минуту быть в
💡 Выводы:
▫️ Распределённая транзакция 2PC в микросервисах — редкость; Saga + компенсации — рабочая модель
▫️ Оркестрация vs хореография — не религия, а наблюдаемость и сложность процесса
▫️ Аналитик обязан описать что откатываем и в каком порядке, иначе разработчики напишут "retry" и забудут
🏢 Контекст:
B2B-портал закупок. Заказ проходит: резерв на складе → списание лимита бюджета → создание счёта в ERP → уведомление поставщику. Четыре разных системы, у ERP нет двухфазного commit. Команда 12 человек, монолит режут на сервисы.
😬 Проблема:
После выноса "Склад" и "Бюджет" в отдельные сервисы поймали баг: лимит списали, ERP вернула 500 — заказ завис "в полупути". Ручные откаты в саппорте — 2–3 раза в неделю. Бизнес: "Нужна атомарность как в старом монолите".
🔍 Что сделал аналитик:
1. Нарисовал happy path и точки отказа — где уже нельзя просто DELETE
2. Выбрал оркестрацию Saga (центральный Order Orchestrator), а не хореографию: процесс линейный, мало автономных реакций, нужна видимость статуса для саппорта
3. Описал компенсирующие транзакции:
— Отмена резерва на складе
— Возврат лимита бюджета
— Аннулирование черновика счёта в ERP (отдельный API)
4. Зафиксировал идемпотентность шагов по
order_id + step_id — повтор после таймаута не дублирует списание5. В ТЗ добавил статусы заказа:
PENDING_BUDGET → PENDING_ERP → CONFIRMED / COMPENSATING / FAILED✅ Результат:
За 6 недель — orchestrator на state machine, дашборд "застрявших" саг. Ручных откатов — 0 за два месяца. Бизнес принял, что при падении ERP заказ может минуту быть в
COMPENSATING, но не «зависнуть навсегда».💡 Выводы:
▫️ Распределённая транзакция 2PC в микросервисах — редкость; Saga + компенсации — рабочая модель
▫️ Оркестрация vs хореография — не религия, а наблюдаемость и сложность процесса
▫️ Аналитик обязан описать что откатываем и в каком порядке, иначе разработчики напишут "retry" и забудут
❤2
Теперь не монолит: обновили курс по архитектуре систем
Мы распилили😬 монолит: теперь у курса по архитектуре систем 2 уровня
1️⃣ Архитектура систем. База
Для тех, кто хочет собрать фундамент и перестать плавать в архитектурных темах
На курсе разберём свойства системы, декомпозицию, интеграции, REST API, очереди, вебхуки, callbacks, балансировщик и базовую документацию архитектурного решения
Старт воркшопов — 6 июля
2️⃣Архитектура систем. Хард
Для тех, кто уже знает базу и хочет глубже разбираться в сложных архитектурных решениях
На курсе будут highload, C4, архитектурные слои, модульность, индексы, репликация, шардирование, кэширование, NoSQL, антипаттерны и trade-off
Старт воркшопов — 27 июля
А что на счет подарков? 🎁
До 30 июня действует скидка 15% по промокоду
Мы распилили
Раньше у нас был один большой курс. Но после обратной связи и опыта студентов поняли, что необходимы корректировки. Поэтому мы пересобрали курс по архитектуре и разделили его на два направления:
1️⃣ Архитектура систем. База
Для тех, кто хочет собрать фундамент и перестать плавать в архитектурных темах
На курсе разберём свойства системы, декомпозицию, интеграции, REST API, очереди, вебхуки, callbacks, балансировщик и базовую документацию архитектурного решения
Старт воркшопов — 6 июля
2️⃣Архитектура систем. Хард
Для тех, кто уже знает базу и хочет глубже разбираться в сложных архитектурных решениях
На курсе будут highload, C4, архитектурные слои, модульность, индексы, репликация, шардирование, кэширование, NoSQL, антипаттерны и trade-off
Старт воркшопов — 27 июля
Если коротко:
— если архитектура пока не складывается в единую картину — начинайте с Базы;
— если фундамент уже есть и хочется расти в сторону senior/архитектора — смотрите Хард;
— если хотите пройти путь последовательно — можно взять комбо База + Хард
А что на счет подарков? 🎁
До 30 июня действует скидка 15% по промокоду
JUNE15
Напоминаем, что курсы можно оплатить от работодателя:Для этого: Отправьте карточку компании (название компании, ИНН, юр.адрес), название курса, тариф, дату старта, ФИО ученика и его на почту на адрес: companysystemanalyst@gmail.com. Стоимость для юр.лиц дороже на 10%. Скидки не применяются (для покрытия издержек на документооборот), если вы хотите обучить сразу несколько сотрудников - сообщите нам об этом, подготовим выгодное предложение!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5
Сервис заказов пишет запись в PostgreSQL и публикует событие «заказ создан» в Kafka. Иногда заказ в БД есть, а события нет — сбой после фиксации транзакции. Что зафиксировать в ТЗ?
Anonymous Quiz
50%
Исходящая таблица: событие в ту же транзакцию; отдельный процесс читает и шлёт в Kafka
19%
Двойная запись: сначала в таблицу заказов, потом в Kafka; при сбое — ручной повтор из логов
23%
Сначала Kafka, подписчик создаёт заказ в БД — брокер как единственный источник правды
8%
Снимок изменений из таблицы заказов без исходящей таблицы — дублирование не нужно
❤2
Проблема — атомарность двух разных систем (БД и брокер). Распределённую двухфазную фиксацию между 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