4821. Вы аналитик в стартапе. Заказчик требует, чтобы система обрабатывала 10 000 заказов в секунду, хотя текущий пик — 10 заказов в секунду. Разработка такого уровня масштабирования обойдётся в утроение бюджета. Ваши действия?
Anonymous Quiz
0%
Принять требование и искать более дешёвую реализацию
100%
Анализ: спросить заказчика, откуда взялась цифра, предложить альтернативу и задокументировать риск.
0%
Отказаться от проекта
0%
Добавить требование в бэклог и забыть
Нереалистичные нефункциональные требования (NFR) — частая ошибка стартапов. Заказчик может назвать цифру «10 000» без обоснования, потому что «конкуренты так могут» или «на всякий случай».
Что должен сделать аналитик
Уточнить источник цифры: откуда ожидается такой рост, есть ли маркетинговые прогнозы или это просто желание.
Предложить компромисс: сделать архитектуру, которая позволит горизонтально масштабироваться, но не строить инфраструктуру на полную мощность сейчас (например, использовать облачные сервисы с автосейлингом).
Задокументировать риск: «При резком росте нагрузки без дополнительных инвестиций система может не выдержать. Требуется повторная оценка через 6 месяцев».
Почему не другие варианты
A — согласиться без анализа — приведёт к перерасходу бюджета или невыполнимому обязательству.
C — отказ от проекта без попытки обсуждения — не гибко.
D — игнорирование — безответственно.
Реальный кейс
Один стартап по доставке еды требовал 5000 RPS с первого дня. Аналитик предложил использовать масштабируемый облачный кластер, но с минимальной конфигурацией. После запуска пик оказался 50 RPS. Экономия составила 80% бюджета.
Please open Telegram to view this post
VIEW IN TELEGRAM
4822. Сервис А, получив ошибку, начал повторять запросы каждую секунду, создавая лавину нагрузки на сервис В, которая не давала ему восстановиться. Как называется этот эффект и как его предотвратить?
Anonymous Quiz
13%
Deadlock; использовать распределённую блокировку
84%
Retry storm; использовать экспоненциальную задержку и ограничение числа ретраев,плюс Circuit Breaker
2%
Race condition; добавить идемпотентность
2%
Thundering herd; использовать очереди
Когда сервис В недоступен, множество экземпляров сервиса А одновременно начинают повторные попытки с фиксированным интервалом. Это создаёт синхронизированные всплески нагрузки, которые мешают восстановлению. Это называется retry storm (шторм повторных вызовов).
Решение
Экспоненциальная задержка (exponential backoff) — интервал между ретраями удваивается (1, 2, 4, 8 секунд). Это раздвигает по времени пики нагрузки.
Джиттер (jitter) — случайное небольшое смещение, чтобы разные экземпляры не синхронизировались.
Ограничение числа ретраев (например, 5 попыток).
Circuit Breaker — после определённого числа ошибок быстрый сброс без вызова вообще.
Почему не другие варианты
A — deadlock относится к блокировкам в БД.
C — race condition — состояние гонки, не то.
D — thundering herd — асинхронная проблема, но решение с очередями не прямое.
Реальный случай
В Amazon одна из внутренних систем легла из-за retry storm. После внедрения экспоненциального бэккотта и джиттера инциденты прекратились.
Требования аналитика
Политика ретраев: начальная задержка 1 сек, максимум 10 сек, коэффициент 2, джиттер 0-30%.
Please open Telegram to view this post
VIEW IN TELEGRAM
4823. Нужно отображать бесконечную ленту новостей (скроллинг). Запрос с OFFSET 10000 LIMIT 10работает очень медленно. Какой метод пагинации использовать для большой глубины?
Anonymous Quiz
1%
Повысить размер кэша БД
93%
Пагинация на основе курсора (keyset pagination) — использовать WHERE created_at < последнее_значение
5%
Использовать OFFSET с подзапросом
1%
Сгружать всю таблицу в приложение и фильтровать
Честно, мне кажется, через пару лет навык работы с ИИ будет таким же базовым,
как умение пользоваться интернетом.
И самое интересное — многие это до сих пор недооценивают.
Я для себя собрал папку с сильными экспертами по ИИ.
Там — реальные инструменты, кейсы и способы использовать нейросети с пользой.
Если вам тоже интересна эта тема — добавляйте папку 👇
https://t.me/addlist/KuqHb68lTqhhNDJi
⏳ доступ 48 часов
как умение пользоваться интернетом.
И самое интересное — многие это до сих пор недооценивают.
Кто-то делает всё вручную,
а другие уже экономят часы работы с помощью нейросетей и растут быстрее.
Разница между ними со временем будет только увеличиваться.
Я для себя собрал папку с сильными экспертами по ИИ.
Там — реальные инструменты, кейсы и способы использовать нейросети с пользой.
Если вам тоже интересна эта тема — добавляйте папку 👇
https://t.me/addlist/KuqHb68lTqhhNDJi
⏳ доступ 48 часов
OFFSETПагинация на основе курсора
Вместо
OFFSETSELECT * FROM news WHERE created_at < last_seen_date ORDER BY created_at DESC LIMIT 10Переменная
last_seen_dateПреимущества
База сканирует только нужные строки + ограниченный диапазон.
Работает за O(логарифм) по индексу.
Не зависает на больших смещениях.
Требования
Индекс на поле сортировки (например,
created_atУникальный вторичный ключ для разрешения связей (добавить
idORDER BYРеальный пример
Twitter и Reddit используют курсоры для бесконечной ленты.
Вывод
Аналитик должен потребовать использования курсора вместо
OFFSETPlease open Telegram to view this post
VIEW IN TELEGRAM
4824. В системе из 5 микросервисов при каждом обновлении данных нужно уведомлять 3 других сервиса. Прямые вызовы привели к большой связанности и падению одного сервиса, блокирующему других. Какой архитектурный стиль снизит связанность?
Anonymous Quiz
1%
Перейти на синхронные вызовы с ретраями
99%
Внедрить событийно-ориентированную архитектуру, где сервисы публикуют события в брокер
0%
Сделать всё в одном монолите
0%
Использовать общую базу данных для уведомлений
Прямые синхронные вызовы между сервисами создают жесткую связанность. Когда сервис А вызывает Б, В, Г, то падение любого из них может затронуть А. Событийная архитектура решает это.
Event-driven
Сервис-источник публикует событие в брокер (Kafka, RabbitMQ).
Подписчики (другие сервисы) получают события асинхронно.
Источник не знает о подписчиках и не ждёт ответа.
Отказ одного подписчика не влияет на источник и других.
Почему это снижает связанность
Слабая связанность — публикация события и его обработка разделены.
Отказоустойчивость — брокер буферизует события, упавший подписчик получит их при восстановлении.
Легко добавлять новых подписчиков без изменения источника.
Почему не другие
A — ретраи не решат связанность.
C — монолит против микросервисной идеи.
D — общая БД создаёт другую связанность.
Реальный пример
Upwork перешёл на event-driven и ускорил доставку уведомлений в реальном времени.
Вывод аналитика
Событийная архитектура — стандарт для слабо связанных микросервисов. Аналитик должен в требованиях указывать асинхронное взаимодействие для всех бизнес-событий, не требующих немедленного ответа.
Please open Telegram to view this post
VIEW IN TELEGRAM
4825. Вам нужно оценить стоимость разработки системы для аренды самокатов. Бизнес-функции: «заблокировать самокат», «начать поездку», «завершить поездку», «списать оплату». Какой метод позволит измерить объём требований независимо от технологии?
Anonymous Quiz
10%
Количество пользовательских историй
82%
Метод COSMIC – считаем функциональные процессы, триггеры и объекты данных
1%
Количество экранов в прототипе
7%
Стори-поинты на основе усреднения
Заказчикам нужна объективная оценка размера требований до начала разработки. Метод COSMIC позволяет измерить функциональный размер в единицах CFP (COSMIC Function Points) на основе логики данных, независимо от языка и платформы.
Как работает COSMIC (упрощённо)
Выделяем функциональные процессы (например, «Начать поездку»).
Для каждого процесса определяем триггер (событие, инициирующее процесс – например, пользователь отсканировал QR-код).
Определяем объекты данных, которые процесс читает или изменяет (например, состояние самоката, ID пользователя, временная метка).
Каждое перемещение данных (вход, выход, чтение, запись) – 1 CFP.
В примере с самокатом:
«Начать поездку»: триггер – сканирование; читается статус самоката, записывается начало поездки, обновляется счётчик. Это даст, скажем, 4 CFP.
Суммируя по всем процессам, получим объективный размер.
Почему не другие варианты
A (количество историй) – зависит от степени детализации, субъективно.
C (количество экранов) – не отражает сложность логики.
D (стори-поинты) – относительная оценка, не переносится между проектами.
Реальный кейс
Крупный банк использовал COSMIC для оценки размера кредитного конвейера. Оказалось, что оценка в CFP отличается от экспертной на 15%, но зато прозрачна для заказчика.
Вывод
Аналитик, владеющий COSMIC, может дать объективную оценку размера требований и обосновать бюджет.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
4826. Вам нужно синхронизировать данные из реляционной OLTP-базы в аналитическое хранилище (DWH) с минимальной задержкой (< 5 секунд). Традиционный ETL ночью не подходит. Какой подход обеспечит почти реальное время и не нагрузит исходную систему?
Anonymous Quiz
1%
Периодический SELECT всех изменённых строк по флагу
95%
Change Data Capture (CDC) через чтение лога транзакций (например, Debezium + Kafka)
1%
Триггеры на каждую таблицу
2%
Отказ от синхронизации, использовать прямое чтение из OLTP для отчётов
Периодический SELECT из большой OLTP-базы создаёт нагрузку и не обеспечивает задержку 5 секунд. Триггеры замедляют транзакции прямо в продовой системе.
Решение – CDC
Change Data Capture читает журнал транзакций (WAL в PostgreSQL, binlog в MySQL) и отправляет изменения (INSERT, UPDATE, DELETE) в Kafka. Потребитель (например, коннектор к ClickHouse) воспроизводит их в DWH с задержкой миллисекунды.
Преимущества
Минимальная нагрузка на исходную БД (читается уже сформированный лог).
Гарантированный порядок и сохранность (можно воспроизвести с любого смещения).
Не требует изменений в таблицах (ни триггеров, ни флагов).
Почему не другие варианты
A – высокий load, не даст 5 секунд.
C – триггеры замедляют вставку/обновление.
D – прямое чтение из OLTP убивает производительность аналитики.
Реальный пример
В крупном ритейлере CDC + Kafka синхронизирует 5000 изменений/сек с задержкой 1 секунда.
Требования аналитика
Использовать логическую репликацию или инструмент типа Debezium.
Обеспечить идемпотентность в целевой системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
4827. У вас 50 микросервисов. Параметр (например, таймаут вызова внешнего API) нужно изменить в 30 из них. Как это сделать без передеплоя каждого сервиса?
Anonymous Quiz
3%
Перекомпилировать каждый сервис с новым значением и перевыкатить
87%
Хранить конфигурацию в централизованном сервере и читать её при старте / по подписке на обновления
2%
Послать сигнал SIGUSR1 каждому сервису
8%
Использовать глобальную переменную окружения на всех серверах